github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/routers/api/user/oauth.go (about) 1 package user 2 3 import ( 4 "strconv" 5 "time" 6 7 "github.com/covergates/covergates/core" 8 "github.com/covergates/covergates/routers/api/request" 9 "github.com/gin-gonic/gin" 10 ) 11 12 // Token for API 13 type Token struct { 14 ID uint `json:"id"` 15 Name string `json:"name"` 16 CreatedAt time.Time `json:"createdAt"` 17 } 18 19 // HandleCreateToken for user 20 // @Summary create OAuth token 21 // @Tags User 22 // @Param name formData string false "token name" 23 // @Success 200 {object} string access token 24 // @Router /user/tokens [post] 25 func HandleCreateToken(service core.OAuthService) gin.HandlerFunc { 26 return func(c *gin.Context) { 27 user, ok := request.UserFrom(c) 28 if !ok { 29 c.String(401, "") 30 return 31 } 32 tokenName := c.PostForm("name") 33 ctx := service.WithUser(c.Request.Context(), user) 34 token, err := service.CreateToken(ctx, tokenName) 35 if err != nil { 36 c.Error(err) 37 c.String(500, "") 38 return 39 } 40 c.String(200, token.Access) 41 } 42 } 43 44 // HandleListTokens for user 45 // @Summary list OAuth tokens 46 // @Tags User 47 // @Success 200 {object} []Token "list of tokens" 48 // @Router /user/tokens [get] 49 func HandleListTokens(service core.OAuthService) gin.HandlerFunc { 50 return func(c *gin.Context) { 51 user, ok := request.UserFrom(c) 52 if !ok { 53 c.JSON(401, []*Token{}) 54 return 55 } 56 ctx := service.WithUser(c.Request.Context(), user) 57 tokens, err := service.ListTokens(ctx) 58 if err != nil { 59 c.Error(err) 60 c.JSON(500, []*Token{}) 61 return 62 } 63 result := make([]*Token, len(tokens)) 64 for i, token := range tokens { 65 result[i] = &Token{ 66 ID: token.ID, 67 Name: token.Name, 68 CreatedAt: token.CreatedAt, 69 } 70 } 71 c.JSON(200, result) 72 } 73 } 74 75 // HandleDeleteToken with token id 76 // @Summary delete token with id 77 // @Tags User 78 // @Param id path integer true "token id" 79 // @Success 200 {object} Token "deleted token" 80 // @Router /user/tokens/{id} [delete] 81 func HandleDeleteToken(service core.OAuthService, store core.OAuthStore) gin.HandlerFunc { 82 return func(c *gin.Context) { 83 user, ok := request.UserFrom(c) 84 if !ok { 85 c.JSON(401, &Token{}) 86 return 87 } 88 id, err := strconv.ParseUint(c.Param("id"), 10, 64) 89 if err != nil { 90 c.Error(err) 91 c.JSON(400, &Token{}) 92 return 93 } 94 token, err := store.Find(&core.OAuthToken{ID: uint(id)}) 95 if err != nil { 96 c.Error(err) 97 c.JSON(500, &Token{}) 98 return 99 } 100 ctx := service.WithUser(c.Request.Context(), user) 101 if err := service.DeleteToken(ctx, token); err != nil { 102 c.Error(err) 103 c.JSON(500, &Token{}) 104 return 105 } 106 c.JSON(200, &Token{ID: token.ID, Name: token.Name}) 107 } 108 }