diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..6f51382 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,46 @@ +default: + image: debian:11 + +stages: + - build + - publish + - release + +build: + stage: build + image: golang:1.21-alpine + before_script: + - apk update && apk add --no-cache make git + script: + - make build_password + artifacts: + paths: + - ./bin/* + +publish_main: + stage: publish + image: golang:1.21-alpine + variables: + VER: latest + before_script: + - apk update && apk add --no-cache make git curl + script: + - make publish_password + needs: + - build + only: + - main + +release_tag: + stage: publish + image: golang:1.21-alpine + variables: + VER: ${CI_COMMIT_TAG} + before_script: + - apk update && apk add --no-cache make git curl + script: + - make publish_password + needs: + - build + only: + - tags \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8a6bf90 --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +ARCH := amd64 arm64 +OS := linux windows darwin +NAME := password +VERSION := $(shell git describe) +BUILD := $(shell git rev-parse HEAD) + +LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.Build=${BUILD}" + +.PHONY: all build + +all: build + +build_password: + $(foreach GOOS, ${OS},\ + $(foreach GOARCH, ${ARCH}, \ + $(shell CGO_ENABLED=0 go build -v -o bin/${NAME} ./golang/cmd/passwordhash;cd bin/;[ "${GOOS}" = "windows" ] && mv ${NAME} ${NAME}.exe;tar czf ${NAME}_${GOOS}_${GOARCH}.tar.gz *;rm -f ${NAME} ${NAME}.exe) \ + )) + +publish_password: + $(foreach GOOS, ${OS},\ + $(foreach GOARCH, ${ARCH}, \ + $(curl --silent --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${NAME}_${GOOS}_${GOARCH}.tar.gz "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${NAME}/${VER}/${NAME}_${GOOS}_${GOARCH}.tar.gz") \ + )) + +clean: + rm -rf bin + +re: clean all \ No newline at end of file diff --git a/go.work b/go.work new file mode 100644 index 0000000..20fb2fe --- /dev/null +++ b/go.work @@ -0,0 +1,3 @@ +go 1.21.8 + +use ./golang diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 0000000..8434351 --- /dev/null +++ b/go.work.sum @@ -0,0 +1,4 @@ +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/golang/cmd/passwordhash/main.go b/golang/cmd/passwordhash/main.go new file mode 100644 index 0000000..0ac4d4c --- /dev/null +++ b/golang/cmd/passwordhash/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "bufio" + "fmt" + "os" + + "golang.org/x/crypto/bcrypt" +) + +func HashPassword(password string) (string, error) { + bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) + return string(bytes), err +} + +func main() { + scanner := bufio.NewScanner(os.Stdin) + fmt.Print("Enter a password : ") + scanner.Scan() + primary := scanner.Text() + fmt.Print("Enter a password : ") + scanner.Scan() + second := scanner.Text() + + if primary != second { + fmt.Println("password do not match") + return + } + hash, _ := HashPassword(primary) + fmt.Println("La version hasher du password :", string(hash)) +} diff --git a/golang/go.mod b/golang/go.mod new file mode 100644 index 0000000..75984b4 --- /dev/null +++ b/golang/go.mod @@ -0,0 +1,5 @@ +module gitlab.g3e.fr/h6n/tools/golang + +go 1.21.8 + +require golang.org/x/crypto v0.21.0 // indirect diff --git a/golang/go.sum b/golang/go.sum new file mode 100644 index 0000000..e02e133 --- /dev/null +++ b/golang/go.sum @@ -0,0 +1,2 @@ +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=