diff --git a/backend/docs/docs.go b/backend/docs/docs.go index 0ffb957..211e957 100644 --- a/backend/docs/docs.go +++ b/backend/docs/docs.go @@ -15,6 +15,32 @@ const docTemplate = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { + "/callback": { + "get": { + "description": "Callback for oauth2 providers", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "auth" + ], + "summary": "Callback for oauth2 providers", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, "/posts": { "get": { "description": "Get all posts", diff --git a/backend/docs/swagger.json b/backend/docs/swagger.json index 518167b..2a9b7bc 100644 --- a/backend/docs/swagger.json +++ b/backend/docs/swagger.json @@ -4,6 +4,32 @@ "contact": {} }, "paths": { + "/callback": { + "get": { + "description": "Callback for oauth2 providers", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "auth" + ], + "summary": "Callback for oauth2 providers", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, "/posts": { "get": { "description": "Get all posts", diff --git a/backend/docs/swagger.yaml b/backend/docs/swagger.yaml index ff5bb35..53470b0 100644 --- a/backend/docs/swagger.yaml +++ b/backend/docs/swagger.yaml @@ -32,6 +32,23 @@ definitions: info: contact: {} paths: + /callback: + get: + consumes: + - application/json + description: Callback for oauth2 providers + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + type: string + type: object + summary: Callback for oauth2 providers + tags: + - auth /posts: get: consumes: diff --git a/backend/go.mod b/backend/go.mod index 4e7eb31..362c206 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -57,6 +57,7 @@ require ( golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.49.0 // indirect + golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect golang.org/x/text v0.33.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index da97b44..660e839 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -138,6 +138,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= diff --git a/backend/internal/handlers/auth_handlers.go b/backend/internal/handlers/auth_handlers.go index a5c5747..c7c94ff 100644 --- a/backend/internal/handlers/auth_handlers.go +++ b/backend/internal/handlers/auth_handlers.go @@ -1,17 +1,30 @@ package handlers import ( - "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/repositories" + "os" + "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger" + "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/repositories" "github.com/gin-gonic/gin" + "golang.org/x/oauth2" + "golang.org/x/oauth2/endpoints" ) type AuthHandlers struct { - repo repositories.AuthRepository + repo repositories.AuthRepository + logger *logger.Logger +} + +var configGithub = &oauth2.Config{ + ClientID: os.Getenv("GITHUB_CLIENT_ID"), + ClientSecret: os.Getenv("GITHUB_CLIENT_SECRET"), + RedirectURL: "https://d3m0k1d.ru/", + Scopes: []string{"user"}, + Endpoint: endpoints.GitHub, } func NewAuthHandlers(repo repositories.AuthRepository) *AuthHandlers { - return &AuthHandlers{repo: repo} + return &AuthHandlers{repo: repo, logger: logger.New(false)} } // Callback godoc @@ -21,7 +34,15 @@ func NewAuthHandlers(repo repositories.AuthRepository) *AuthHandlers { // @Accept json // @Produce json // @Success 200 {object} map[string]string -// @Router /callback [get] -func (h *AuthHandlers) Callback(c *gin.Context) { +// @Router /callback/github [get] +func (h *AuthHandlers) CallbackGithub(c *gin.Context) { + h.logger.Info("CallbackGithub called") + token, err := configGithub.Exchange(c.Request.Context(), c.Query("code")) + if err != nil { + h.logger.Error("error request: " + err.Error()) + c.Status(500) + } + h.logger.Info("200 OK GET /callback/github") + c.JSON(200, gin.H{"token": token}) } diff --git a/backend/internal/handlers/post_handlers.go b/backend/internal/handlers/post_handlers.go index ef68be9..0e074d4 100644 --- a/backend/internal/handlers/post_handlers.go +++ b/backend/internal/handlers/post_handlers.go @@ -10,15 +10,14 @@ import ( ) type PostHandlers struct { - repo repositories.PostRepository + repo repositories.PostRepository + logger *logger.Logger } func NewPostHandlers(repo repositories.PostRepository) *PostHandlers { - return &PostHandlers{repo: repo} + return &PostHandlers{repo: repo, logger: logger.New(false)} } -var log = logger.New(false) - // GetPosts godoc // @Summary Get all posts // @Description Get all posts @@ -31,10 +30,10 @@ func (h *PostHandlers) GetPosts(c *gin.Context) { var result []storage.PostReq result, err := h.repo.GetAll(c.Request.Context()) if err != nil { - log.Error("error request: " + err.Error()) + h.logger.Error("error request: " + err.Error()) c.Status(500) } - log.Info("200 OK GET /posts") + h.logger.Info("200 OK GET /posts") c.JSON(200, result) } @@ -54,15 +53,15 @@ func (h *PostHandlers) GetPost(c *gin.Context) { id_p := c.Param("id") id, err := strconv.Atoi(id_p) if err != nil { - log.Error("error request: " + err.Error()) + h.logger.Error("error request: " + err.Error()) c.Status(500) } result, err = h.repo.GetByID(c.Request.Context(), id) if err != nil { - log.Error("error request: " + err.Error()) + h.logger.Error("error request: " + err.Error()) c.Status(500) } - log.Info("200 OK GET /posts/" + id_p) + h.logger.Info("200 OK GET /posts/" + id_p) c.JSON(200, result) // TODO: added validaton for 400 response } @@ -112,7 +111,7 @@ func (h *PostHandlers) UpdatePost(c *gin.Context) { id_p := c.Param("id") id, err := strconv.Atoi(id_p) if err != nil { - log.Error("error request: " + err.Error()) + h.logger.Error("error request: " + err.Error()) c.Status(500) } var req storage.Post @@ -127,7 +126,7 @@ func (h *PostHandlers) UpdatePost(c *gin.Context) { } c.JSON(200, req) - log.Info("200 OK PUT /posts/" + id_p) + h.logger.Info("200 OK PUT /posts/" + id_p) } // DeletePost godoc @@ -139,5 +138,4 @@ func (h *PostHandlers) UpdatePost(c *gin.Context) { // @Success 200 {object} storage.Post // @Router /posts/{id} [delete] func DeletePost(c *gin.Context) { - log.Info("DeletePost") } diff --git a/backend/internal/handlers/registry_handlers.go b/backend/internal/handlers/registry_handlers.go index e83b2cc..f121cfe 100644 --- a/backend/internal/handlers/registry_handlers.go +++ b/backend/internal/handlers/registry_handlers.go @@ -11,7 +11,7 @@ func Register(router *gin.Engine, db *sql.DB) { handler_posts := NewPostHandlers(repositories.NewPostRepository(db)) handler_auth := NewAuthHandlers(repositories.NewAuthRepository(db)) v1 := router.Group("api/v1") - v1.GET("/callback", handler_auth.Callback) + v1.GET("/callback", handler_auth.CallbackGithub) posts := v1.Group("posts") { posts.GET("/", handler_posts.GetPosts)