| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | /* * EliasDB * * Copyright 2016 Matthias Ladkau. All rights reserved. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */package apiimport (	"encoding/json"	"net/http")/*SwaggerDefs is used to describe the endpoint in swagger.*/func (a *aboutEndpoint) SwaggerDefs(s map[string]interface{}) {	// Add query paths	s["paths"].(map[string]interface{})["/about"] = map[string]interface{}{		"get": map[string]interface{}{			"summary":     "Return information about the REST API provider.",			"description": "Returns available API versions, product name and product version.",			"produces": []string{				"text/plain",				"application/json",			},			"responses": map[string]interface{}{				"200": map[string]interface{}{					"description": "About info object",					"schema": map[string]interface{}{						"type": "object",						"properties": map[string]interface{}{							"api_versions": map[string]interface{}{								"description": "List of available API versions.",								"type":        "array",								"items": map[string]interface{}{									"description": "Available API version.",									"type":        "string",								},							},							"product": map[string]interface{}{								"description": "Product name of the REST API provider.",								"type":        "string",							},							"version": map[string]interface{}{								"description": "Version of the REST API provider.",								"type":        "string",							},						},					},				},				"default": map[string]interface{}{					"description": "Error response",					"schema": map[string]interface{}{						"$ref": "#/definitions/Error",					},				},			},		},	}	// Add generic error object to definition	s["definitions"].(map[string]interface{})["Error"] = map[string]interface{}{		"description": "A human readable error mesage.",		"type":        "string",	}}/*EndpointSwagger is the swagger endpoint URL (rooted). Handles swagger.json/*/const EndpointSwagger = APIRoot + "/swagger.json/"/*SwaggerEndpointInst creates a new endpoint handler.*/func SwaggerEndpointInst() RestEndpointHandler {	return &swaggerEndpoint{}}/*Handler object for swagger operations.*/type swaggerEndpoint struct {	*DefaultEndpointHandler}/*HandleGET returns the swagger definition of the REST API.*/func (a *swaggerEndpoint) HandleGET(w http.ResponseWriter, r *http.Request, resources []string) {	// Add general sections	data := map[string]interface{}{		"swagger":     "2.0",		"host":        APIHost,		"schemes":     APISchemes,		"basePath":    APIRoot,		"produces":    []string{"application/json"},		"paths":       map[string]interface{}{},		"definitions": map[string]interface{}{},	}	// Go through all registered components and let them add their definitions	a.SwaggerDefs(data)	for _, inst := range registered {		inst().SwaggerDefs(data)	}	// Write data	w.Header().Set("content-type", "application/json; charset=utf-8")	ret := json.NewEncoder(w)	ret.Encode(data)}/*SwaggerDefs is used to describe the endpoint in swagger.*/func (a *swaggerEndpoint) SwaggerDefs(s map[string]interface{}) {	// Add general application information	s["info"] = map[string]interface{}{		"title":       "EliasDB API",		"description": "Query and modify the EliasDB datastore.",		"version":     APIVersion,	}}
 |