Merge docs -> dev
This commit is contained in:
		
						commit
						2ffbc2f9fd
					
				
					 3 changed files with 202 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -19,19 +19,117 @@ const docTemplate = `{
 | 
			
		|||
    "host": "{{.Host}}",
 | 
			
		||||
    "basePath": "{{.BasePath}}",
 | 
			
		||||
    "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": {
 | 
			
		||||
                "description": "Register a new user",
 | 
			
		||||
                "consumes": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                ],
 | 
			
		||||
                "produces": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                    "text/plain"
 | 
			
		||||
                ],
 | 
			
		||||
                "tags": [
 | 
			
		||||
                    "User"
 | 
			
		||||
                ],
 | 
			
		||||
                "summary": "Register a new user",
 | 
			
		||||
                "parameters": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "description": "User to register",
 | 
			
		||||
                        "name": "NewUser",
 | 
			
		||||
                        "in": "body",
 | 
			
		||||
                        "required": true,
 | 
			
		||||
                        "schema": {
 | 
			
		||||
                            "$ref": "#/definitions/types.NewUser"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "responses": {
 | 
			
		||||
                    "200": {
 | 
			
		||||
                        "description": "User added",
 | 
			
		||||
| 
						 | 
				
			
			@ -53,6 +151,60 @@ 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": {
 | 
			
		||||
        "types.NewUser": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
                "password": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "username": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "externalDocs": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,11 +16,12 @@ import (
 | 
			
		|||
//	@Description	Register a new user
 | 
			
		||||
//	@Tags			User
 | 
			
		||||
//	@Accept			json
 | 
			
		||||
//	@Produce		json
 | 
			
		||||
//	@Success		200	{string}	string	"User added"
 | 
			
		||||
//	@Failure		400	{string}	string	"Bad request"
 | 
			
		||||
//	@Failure		500	{string}	string	"Internal server error"
 | 
			
		||||
//	@Router			/api/register [post]
 | 
			
		||||
//	@Produce		plain
 | 
			
		||||
//	@Param			NewUser	body		types.NewUser true	"User to register"
 | 
			
		||||
//	@Success		200			{string}	string			"User added"
 | 
			
		||||
//	@Failure		400			{string}	string			"Bad request"
 | 
			
		||||
//	@Failure		500			{string}	string			"Internal server error"
 | 
			
		||||
//	@Router			/register [post]
 | 
			
		||||
func (gs *GState) Register(c *fiber.Ctx) error {
 | 
			
		||||
	u := new(types.NewUser)
 | 
			
		||||
	if err := c.BodyParser(u); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +41,17 @@ func (gs *GState) Register(c *fiber.Ctx) error {
 | 
			
		|||
 | 
			
		||||
// This path should obviously be protected in the future
 | 
			
		||||
// 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 {
 | 
			
		||||
	// Read from path parameters
 | 
			
		||||
	username := c.Params("username")
 | 
			
		||||
| 
						 | 
				
			
			@ -62,8 +74,21 @@ func (gs *GState) UserDelete(c *fiber.Ctx) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// 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 {
 | 
			
		||||
	// The body type is identical to a NewUser
 | 
			
		||||
 | 
			
		||||
	u := new(types.NewUser)
 | 
			
		||||
	if err := c.BodyParser(u); err != nil {
 | 
			
		||||
		log.Warn("Error parsing body")
 | 
			
		||||
| 
						 | 
				
			
			@ -94,11 +119,21 @@ func (gs *GState) Login(c *fiber.Ctx) error {
 | 
			
		|||
		return c.SendStatus(fiber.StatusInternalServerError)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Successfully signed token for user:", u.Username)
 | 
			
		||||
	return c.JSON(fiber.Map{"token": t})
 | 
			
		||||
	println("Successfully signed token for user:", u.Username)
 | 
			
		||||
	return c.JSON(types.Token{Token: t})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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 {
 | 
			
		||||
	user := c.Locals("user").(*jwt.Token)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +154,7 @@ func (gs *GState) LoginRenew(c *fiber.Ctx) error {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Successfully renewed token for user:", user.Claims.(jwt.MapClaims)["name"])
 | 
			
		||||
	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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,3 +27,8 @@ type PublicUser struct {
 | 
			
		|||
	UserId   string `json:"userId"`
 | 
			
		||||
	Username string `json:"username"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// wrapper type for token
 | 
			
		||||
type Token struct {
 | 
			
		||||
	Token string `json:"token"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue