diff --git a/.env_example b/.env_example new file mode 100644 index 0000000..919c52b --- /dev/null +++ b/.env_example @@ -0,0 +1,5 @@ +POSTGRES_USER=user +POSTGRES_PASSWORD=password +POSTGRES_DB=test +DB_ADDR=postgres://user:password@db:5432/test?sslmode=disable +JWT_SECRET=secret \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..78e2bd7 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,21 @@ +name: build.yml +on: + pull_request: + branches: [main] + push: + branches: [main] +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Build docker-compose + run: | + mv .env_example .env + docker compose build + + - name: Run docker-compose + run : | + docker compose up -d diff --git a/.gitignore b/.gitignore index b2ca3b5..3bf780b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .idea -config/auth/ -config/api-gateway/ \ No newline at end of file +.env \ No newline at end of file diff --git a/cmd/auth-service/main.go b/cmd/auth-service/main.go index 733e14a..ffde4a9 100644 --- a/cmd/auth-service/main.go +++ b/cmd/auth-service/main.go @@ -25,8 +25,10 @@ func LoadConfig() (*auth.Config, error) { return nil, err } + expanded := os.ExpandEnv(string(doc)) + var config auth.Config - err = toml.Unmarshal(doc, &config) + err = toml.Unmarshal([]byte(expanded), &config) if err != nil { return nil, err @@ -51,10 +53,22 @@ func main() { defer db.Close() + accessTTL, err := time.ParseDuration(config.JWT.AccessTokenTTL) + + if err != nil { + log.Fatalf("Error to parser access token ttl: %v", err.Error()) + } + + refreshTTL, err := time.ParseDuration(config.JWT.RefreshTokenTTL) + + if err != nil { + log.Fatalf("Error to parser refresh token ttl: %v", err.Error()) + } + userRepo := storage.NewUserRepository(db) tokenRepo := storage.NewRefreshTokenRepository(db) hasher := infrastructure.NewBcryptHasher(bcrypt.DefaultCost) - jwtService := infrastructure.NewJWTService(config.JWT.Secret, 15*time.Minute, 20*time.Hour) + jwtService := infrastructure.NewJWTService(config.JWT.Secret, accessTTL, refreshTTL) authService := service.NewAuthService(hasher, tokenRepo, userRepo, jwtService) diff --git a/config/api-gateway/config.toml b/config/api-gateway/config.toml new file mode 100644 index 0000000..e69de29 diff --git a/config/auth/config.toml b/config/auth/config.toml new file mode 100644 index 0000000..17890fb --- /dev/null +++ b/config/auth/config.toml @@ -0,0 +1,7 @@ +[database] +addr = "${DB_ADDR}" + +[jwt] +secret = "${JWT_SECRET}" +access_token_ttl = "15m" +refresh_token_ttl = "20h" \ No newline at end of file diff --git a/config/server/config.toml b/config/server/config.toml deleted file mode 100644 index 2b89a55..0000000 --- a/config/server/config.toml +++ /dev/null @@ -1 +0,0 @@ -addr = ":8080" diff --git a/docker-compose.yaml b/docker-compose.yaml index 165e986..1f0573a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,6 +13,9 @@ services: dockerfile: docker/auth-service/Dockerfile ports: - "8081:8081" + environment: + JWT_SECRET: ${JWT_SECRET} + DB_ADDR: ${DB_ADDR} depends_on: - db @@ -20,9 +23,9 @@ services: image: postgres:17 restart: always environment: - POSTGRES_USER: user - POSTGRES_PASSWORD: password - POSTGRES_DB: test + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} ports: - "5432:5432" volumes: diff --git a/internal/auth/config.go b/internal/auth/config.go index 4c2b123..b562b35 100644 --- a/internal/auth/config.go +++ b/internal/auth/config.go @@ -8,7 +8,8 @@ type Config struct { type DatabaseConfig struct { Addr string `toml:"addr"` } - type JWTConfig struct { - Secret string `toml:"secret"` + Secret string `toml:"secret"` + AccessTokenTTL string `toml:"access_token_ttl"` + RefreshTokenTTL string `toml:"refresh_token_ttl"` }