added docs for loginrenew, login, regsiter

This commit is contained in:
Samuel Högbom Aronson 2024-03-18 22:40:51 +01:00
parent 2be4afd0e0
commit f3c5abf4f3
3 changed files with 173 additions and 6 deletions

View file

@ -19,14 +19,101 @@ const docTemplate = `{
"host": "{{.Host}}", "host": "{{.Host}}",
"basePath": "{{.BasePath}}", "basePath": "{{.BasePath}}",
"paths": { "paths": {
"/api/register": { "/login": {
"post": {
"description": "logs the user in and returns a jwt token",
"consumes": [
"application/json"
],
"produces": [
"text/plain"
],
"tags": [
"User"
],
"summary": "login",
"parameters": [
{
"description": "login info",
"name": "NewUser",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/types.NewUser"
}
}
],
"responses": {
"200": {
"description": "Successfully signed token for user",
"schema": {
"type": "Token"
}
},
"400": {
"description": "Bad request",
"schema": {
"type": "string"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal server error",
"schema": {
"type": "string"
}
}
}
}
},
"/loginerenew": {
"post": {
"description": "renews the users token",
"consumes": [
"application/json"
],
"produces": [
"text/plain"
],
"tags": [
"User"
],
"summary": "renews the users token",
"responses": {
"200": {
"description": "Successfully signed token for user",
"schema": {
"type": "Token"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal server error",
"schema": {
"type": "string"
}
}
}
}
},
"/register": {
"post": { "post": {
"description": "Register a new user", "description": "Register a new user",
"consumes": [ "consumes": [
"application/json" "application/json"
], ],
"produces": [ "produces": [
"application/json" "text/plain"
], ],
"tags": [ "tags": [
"User" "User"
@ -35,7 +122,7 @@ const docTemplate = `{
"parameters": [ "parameters": [
{ {
"description": "User to register", "description": "User to register",
"name": "{string}", "name": "NewUser",
"in": "body", "in": "body",
"required": true, "required": true,
"schema": { "schema": {
@ -64,6 +151,47 @@ const docTemplate = `{
} }
} }
} }
},
"/userdelete/{username}": {
"delete": {
"description": "UserDelete deletes a user from the database",
"consumes": [
"application/json"
],
"produces": [
"text/plain"
],
"tags": [
"User"
],
"summary": "Deletes a user",
"responses": {
"200": {
"description": "User deleted",
"schema": {
"type": "string"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "string"
}
},
"403": {
"description": "You can only delete yourself",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal server error",
"schema": {
"type": "string"
}
}
}
}
} }
}, },
"definitions": { "definitions": {

View file

@ -16,7 +16,7 @@ import (
// @Tags User // @Tags User
// @Accept json // @Accept json
// @Produce plain // @Produce plain
// @Param NewUser body types.NewUser true "User to register" // @Param NewUser body types.NewUser true "User to register"
// @Success 200 {string} string "User added" // @Success 200 {string} string "User added"
// @Failure 400 {string} string "Bad request" // @Failure 400 {string} string "Bad request"
// @Failure 500 {string} string "Internal server error" // @Failure 500 {string} string "Internal server error"
@ -39,6 +39,17 @@ func (gs *GState) Register(c *fiber.Ctx) error {
// This path should obviously be protected in the future // This path should obviously be protected in the future
// UserDelete deletes a user from the database // UserDelete deletes a user from the database
//
// @Summary Deletes a user
// @Description UserDelete deletes a user from the database
// @Tags User
// @Accept json
// @Produce plain
// @Success 200 {string} string "User deleted"
// @Failure 403 {string} string "You can only delete yourself"
// @Failure 500 {string} string "Internal server error"
// @Failure 401 {string} string "Unauthorized"
// @Router /userdelete/{username} [delete]
func (gs *GState) UserDelete(c *fiber.Ctx) error { func (gs *GState) UserDelete(c *fiber.Ctx) error {
// Read from path parameters // Read from path parameters
username := c.Params("username") username := c.Params("username")
@ -58,8 +69,21 @@ func (gs *GState) UserDelete(c *fiber.Ctx) error {
} }
// Login is a simple login handler that returns a JWT token // Login is a simple login handler that returns a JWT token
//
// @Summary login
// @Description logs the user in and returns a jwt token
// @Tags User
// @Accept json
// @Param NewUser body types.NewUser true "login info"
// @Produce plain
// @Success 200 Token types.Token "Successfully signed token for user"
// @Failure 400 {string} string "Bad request"
// @Failure 401 {string} string "Unauthorized"
// @Failure 500 {string} string "Internal server error"
// @Router /login [post]
func (gs *GState) Login(c *fiber.Ctx) error { func (gs *GState) Login(c *fiber.Ctx) error {
// The body type is identical to a NewUser // The body type is identical to a NewUser
u := new(types.NewUser) u := new(types.NewUser)
if err := c.BodyParser(u); err != nil { if err := c.BodyParser(u); err != nil {
println("Error parsing body") println("Error parsing body")
@ -91,10 +115,20 @@ func (gs *GState) Login(c *fiber.Ctx) error {
} }
println("Successfully signed token for user:", u.Username) println("Successfully signed token for user:", u.Username)
return c.JSON(fiber.Map{"token": t}) return c.JSON(types.Token{Token: t})
} }
// LoginRenew is a simple handler that renews the token // LoginRenew is a simple handler that renews the token
//
// @Summary renews the users token
// @Description renews the users token
// @Tags User
// @Accept json
// @Produce plain
// @Success 200 Token types.Token "Successfully signed token for user"
// @Failure 401 {string} string "Unauthorized"
// @Failure 500 {string} string "Internal server error"
// @Router /loginerenew [post]
func (gs *GState) LoginRenew(c *fiber.Ctx) error { func (gs *GState) LoginRenew(c *fiber.Ctx) error {
// For testing: curl localhost:3000/restricted -H "Authorization: Bearer <token>" // For testing: curl localhost:3000/restricted -H "Authorization: Bearer <token>"
user := c.Locals("user").(*jwt.Token) user := c.Locals("user").(*jwt.Token)
@ -110,7 +144,7 @@ func (gs *GState) LoginRenew(c *fiber.Ctx) error {
if err != nil { if err != nil {
return c.SendStatus(fiber.StatusInternalServerError) return c.SendStatus(fiber.StatusInternalServerError)
} }
return c.JSON(fiber.Map{"token": t}) return c.JSON(types.Token{Token: t})
} }
// ListAllUsers is a handler that returns a list of all users in the application database // ListAllUsers is a handler that returns a list of all users in the application database

View file

@ -27,3 +27,8 @@ type PublicUser struct {
UserId string `json:"userId"` UserId string `json:"userId"`
Username string `json:"username"` Username string `json:"username"`
} }
// wrapper type for token
type Token struct {
Token string `json:"token"`
}