Initial commit

This commit is contained in:
2024-01-17 18:05:55 +01:00
commit b58430af9a
25 changed files with 1930 additions and 0 deletions

356
docs/docs.go Normal file
View File

@ -0,0 +1,356 @@
// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{escape .Description}}",
"title": "{{.Title}}",
"contact": {
"name": "Florian Beisel",
"url": "http://git.beisel.it/florian",
"email": "florian@beisel.it"
},
"license": {
"name": "MIT",
"url": "http://git.beisel.it/florian/hostname-service/"
},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/api/notebook": {
"put": {
"description": "Generates a new hostname for a notebook based on dynamic rules.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Generating Hostnames"
],
"summary": "Update hostname for category \"notebook\"",
"operationId": "update-notebook-hostname",
"parameters": [
{
"description": "Input data to generate hostname",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/rules.NotebookRuleInput"
}
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "string"
}
}
}
},
"post": {
"description": "Generates a hostname for a notebook based on dynamic rules.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Generating Hostnames"
],
"summary": "Generate hostname for category \"notebook\"",
"operationId": "insert-notebook-hostname",
"parameters": [
{
"description": "Input data to generate hostname",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/rules.NotebookRuleInput"
}
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "string"
}
}
}
}
},
"/hello": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Checks whether the user is successfully authenticated",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Authentication"
],
"summary": "Check your authentication",
"operationId": "hello",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
}
}
}
},
"/login": {
"post": {
"description": "Authenticate user and return JWT token",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Authentication"
],
"summary": "User login",
"parameters": [
{
"description": "Login Credentials",
"name": "loginCredentials",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.LoginCredentials"
}
}
],
"responses": {
"200": {
"description": "Successfully authenticated, JWT token returned",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"400": {
"description": "Invalid request body",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"401": {
"description": "Invalid login credentials",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"500": {
"description": "Internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/{category}": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "List all details for a given category",
"produces": [
"application/json"
],
"tags": [
"Querying Hostnames"
],
"summary": "Return a list of hosts and their details filtered by category",
"operationId": "list-hostnames-by-category",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
}
},
"/{category}/{hostname}": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Return details for a single hostname identified by its category",
"produces": [
"application/json"
],
"tags": [
"Querying Hostnames"
],
"summary": "Return a single hostname by Category and Name",
"operationId": "get-hostname-by-category-and-name",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Category of the hostname",
"name": "hostname",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
},
"delete": {
"security": [
{
"Bearer": []
}
],
"description": "List all details for a given category",
"produces": [
"application/json"
],
"tags": [
"Manipulate existing Hostnames"
],
"summary": "Delete a hostname from the database",
"operationId": "delete-hostnames-by-category-and-name",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Hostname to delete",
"name": "hostname",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
}
}
},
"definitions": {
"models.LoginCredentials": {
"description": "User account information used in the login process with Username and password",
"type": "object",
"properties": {
"password": {
"type": "string"
},
"username": {
"type": "string"
}
}
},
"rules.NotebookRuleInput": {
"type": "object",
"properties": {
"Location": {
"type": "string"
},
"OrgUnit": {
"type": "string"
}
}
}
},
"securityDefinitions": {
"Bearer": {
"description": "Type \"Bearer\" followed by a space and JWT token.",
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "1",
Host: "localhost:8080",
BasePath: "/api/v1",
Schemes: []string{},
Title: "Hostname Service API",
Description: "This is a sample server for a hostname service.",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}

332
docs/swagger.json Normal file
View File

@ -0,0 +1,332 @@
{
"swagger": "2.0",
"info": {
"description": "This is a sample server for a hostname service.",
"title": "Hostname Service API",
"contact": {
"name": "Florian Beisel",
"url": "http://git.beisel.it/florian",
"email": "florian@beisel.it"
},
"license": {
"name": "MIT",
"url": "http://git.beisel.it/florian/hostname-service/"
},
"version": "1"
},
"host": "localhost:8080",
"basePath": "/api/v1",
"paths": {
"/api/notebook": {
"put": {
"description": "Generates a new hostname for a notebook based on dynamic rules.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Generating Hostnames"
],
"summary": "Update hostname for category \"notebook\"",
"operationId": "update-notebook-hostname",
"parameters": [
{
"description": "Input data to generate hostname",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/rules.NotebookRuleInput"
}
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "string"
}
}
}
},
"post": {
"description": "Generates a hostname for a notebook based on dynamic rules.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Generating Hostnames"
],
"summary": "Generate hostname for category \"notebook\"",
"operationId": "insert-notebook-hostname",
"parameters": [
{
"description": "Input data to generate hostname",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/rules.NotebookRuleInput"
}
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "string"
}
}
}
}
},
"/hello": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Checks whether the user is successfully authenticated",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Authentication"
],
"summary": "Check your authentication",
"operationId": "hello",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
}
}
}
},
"/login": {
"post": {
"description": "Authenticate user and return JWT token",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Authentication"
],
"summary": "User login",
"parameters": [
{
"description": "Login Credentials",
"name": "loginCredentials",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.LoginCredentials"
}
}
],
"responses": {
"200": {
"description": "Successfully authenticated, JWT token returned",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"400": {
"description": "Invalid request body",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"401": {
"description": "Invalid login credentials",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"500": {
"description": "Internal server error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/{category}": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "List all details for a given category",
"produces": [
"application/json"
],
"tags": [
"Querying Hostnames"
],
"summary": "Return a list of hosts and their details filtered by category",
"operationId": "list-hostnames-by-category",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
}
},
"/{category}/{hostname}": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Return details for a single hostname identified by its category",
"produces": [
"application/json"
],
"tags": [
"Querying Hostnames"
],
"summary": "Return a single hostname by Category and Name",
"operationId": "get-hostname-by-category-and-name",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Category of the hostname",
"name": "hostname",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
},
"delete": {
"security": [
{
"Bearer": []
}
],
"description": "List all details for a given category",
"produces": [
"application/json"
],
"tags": [
"Manipulate existing Hostnames"
],
"summary": "Delete a hostname from the database",
"operationId": "delete-hostnames-by-category-and-name",
"parameters": [
{
"type": "string",
"description": "Category of the hostname",
"name": "category",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Hostname to delete",
"name": "hostname",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Hostname",
"schema": {
"type": "json"
}
}
}
}
}
},
"definitions": {
"models.LoginCredentials": {
"description": "User account information used in the login process with Username and password",
"type": "object",
"properties": {
"password": {
"type": "string"
},
"username": {
"type": "string"
}
}
},
"rules.NotebookRuleInput": {
"type": "object",
"properties": {
"Location": {
"type": "string"
},
"OrgUnit": {
"type": "string"
}
}
}
},
"securityDefinitions": {
"Bearer": {
"description": "Type \"Bearer\" followed by a space and JWT token.",
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}

218
docs/swagger.yaml Normal file
View File

@ -0,0 +1,218 @@
basePath: /api/v1
definitions:
models.LoginCredentials:
description: User account information used in the login process with Username
and password
properties:
password:
type: string
username:
type: string
type: object
rules.NotebookRuleInput:
properties:
Location:
type: string
OrgUnit:
type: string
type: object
host: localhost:8080
info:
contact:
email: florian@beisel.it
name: Florian Beisel
url: http://git.beisel.it/florian
description: This is a sample server for a hostname service.
license:
name: MIT
url: http://git.beisel.it/florian/hostname-service/
title: Hostname Service API
version: "1"
paths:
/{category}:
get:
description: List all details for a given category
operationId: list-hostnames-by-category
parameters:
- description: Category of the hostname
in: path
name: category
required: true
type: string
produces:
- application/json
responses:
"200":
description: Hostname
schema:
type: json
security:
- Bearer: []
summary: Return a list of hosts and their details filtered by category
tags:
- Querying Hostnames
/{category}/{hostname}:
delete:
description: List all details for a given category
operationId: delete-hostnames-by-category-and-name
parameters:
- description: Category of the hostname
in: path
name: category
required: true
type: string
- description: Hostname to delete
in: path
name: hostname
required: true
type: string
produces:
- application/json
responses:
"200":
description: Hostname
schema:
type: json
security:
- Bearer: []
summary: Delete a hostname from the database
tags:
- Manipulate existing Hostnames
get:
description: Return details for a single hostname identified by its category
operationId: get-hostname-by-category-and-name
parameters:
- description: Category of the hostname
in: path
name: category
required: true
type: string
- description: Category of the hostname
in: path
name: hostname
required: true
type: string
produces:
- application/json
responses:
"200":
description: Hostname
schema:
type: json
security:
- Bearer: []
summary: Return a single hostname by Category and Name
tags:
- Querying Hostnames
/api/notebook:
post:
consumes:
- application/json
description: Generates a hostname for a notebook based on dynamic rules.
operationId: insert-notebook-hostname
parameters:
- description: Input data to generate hostname
in: body
name: body
required: true
schema:
$ref: '#/definitions/rules.NotebookRuleInput'
produces:
- application/json
responses:
"200":
description: Hostname
schema:
type: string
summary: Generate hostname for category "notebook"
tags:
- Generating Hostnames
put:
consumes:
- application/json
description: Generates a new hostname for a notebook based on dynamic rules.
operationId: update-notebook-hostname
parameters:
- description: Input data to generate hostname
in: body
name: body
required: true
schema:
$ref: '#/definitions/rules.NotebookRuleInput'
produces:
- application/json
responses:
"200":
description: Hostname
schema:
type: string
summary: Update hostname for category "notebook"
tags:
- Generating Hostnames
/hello:
get:
consumes:
- application/json
description: Checks whether the user is successfully authenticated
operationId: hello
produces:
- application/json
responses:
"200":
description: OK
schema:
type: string
security:
- Bearer: []
summary: Check your authentication
tags:
- Authentication
/login:
post:
consumes:
- application/json
description: Authenticate user and return JWT token
parameters:
- description: Login Credentials
in: body
name: loginCredentials
required: true
schema:
$ref: '#/definitions/models.LoginCredentials'
produces:
- application/json
responses:
"200":
description: Successfully authenticated, JWT token returned
schema:
additionalProperties:
type: string
type: object
"400":
description: Invalid request body
schema:
additionalProperties:
type: string
type: object
"401":
description: Invalid login credentials
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal server error
schema:
additionalProperties:
type: string
type: object
summary: User login
tags:
- Authentication
securityDefinitions:
Bearer:
description: Type "Bearer" followed by a space and JWT token.
in: header
name: Authorization
type: apiKey
swagger: "2.0"