added initial swagger docs.
This commit is contained in:
parent
0a6fa4bc53
commit
22b5e89784
8
Gopkg.lock
generated
8
Gopkg.lock
generated
|
@ -7,12 +7,6 @@
|
|||
revision = "784ddc588536785e7299f7272f39101f7faccc3f"
|
||||
version = "0.6.2"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/elazarl/go-bindata-assetfs"
|
||||
packages = ["."]
|
||||
revision = "30f82fa23fd844bd5bb1e5f216db87fd77b5eb43"
|
||||
version = "v1.0.0"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/fsnotify/fsnotify"
|
||||
packages = ["."]
|
||||
|
@ -143,6 +137,6 @@
|
|||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "f0136e5899d85670e4bb91c85db638b8d50d74cac1d00e96c714c7ec61513d5f"
|
||||
inputs-digest = "dda0f77480b1bdc7057ae5b9a5a2e4c69d745c50200eac736cc41ba9d76e67ce"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
|
39
Makefile
39
Makefile
|
@ -1,40 +1,51 @@
|
|||
ROUTE_ASSET=routes/bindata.go
|
||||
ROUTE_ASSET=src/routes/bindata.go
|
||||
ROUTE_FILES=$(wildcard assets/src/*) $(wildcard assets/public/*)
|
||||
|
||||
DOCS_ASSET=src/docs/bindata.go
|
||||
DOCS_FILES=$(wildcard src/docs/ui/*)
|
||||
|
||||
VENDOR_FILES=$(wildcard vendor/*)
|
||||
|
||||
SOURCE=./*.go routes/*.go
|
||||
SOURCE=$(wildcard cmd/*/*.go) $(filter-out src/routes/bindata.go, $(wildcard src/routes/*.go))
|
||||
BINARY=paste
|
||||
|
||||
define DUMMY_BINDATA
|
||||
package docs
|
||||
import "net/http"
|
||||
func assetFS() (fs http.FileSystem) { return }
|
||||
endef
|
||||
export DUMMY_BINDATA
|
||||
|
||||
all: $(BINARY)
|
||||
|
||||
clean:
|
||||
rm -f $(BINARY) $(ROUTE_ASSET) $(ROUTE_FILES)
|
||||
rm -rf $(BINARY) $(ROUTE_ASSET) public/
|
||||
|
||||
setup:
|
||||
dep ensure
|
||||
go get github.com/jteeuwen/go-bindata/...
|
||||
go get github.com/elazarl/go-bindata-assetfs/...
|
||||
git submodule update
|
||||
cd assets; npm i
|
||||
|
||||
run: $(BINARY)
|
||||
./$(BINARY) -vv serve
|
||||
|
||||
$(BINARY): $(SOURCE) $(ROUTE_ASSET) $(VENDOR_FILES)
|
||||
go build
|
||||
$(BINARY): $(SOURCE) $(ROUTE_ASSET) $(VENDOR_FILES) $(DOCS_ASSET)
|
||||
go build "sour.is/x/paste/cmd/paste"
|
||||
|
||||
$(ROUTE_ASSET): $(ROUTE_FILES)
|
||||
cd assets; \
|
||||
rm -rf build ../public; \
|
||||
npm run build; \
|
||||
cp -r build ../public; \
|
||||
export PATH=$$GOPATH/bin:$$PATH; \
|
||||
cd ../routes; \
|
||||
go-bindata-assetfs -pkg routes \
|
||||
-prefix ../ \
|
||||
../public/ \
|
||||
../public/static/css/ \
|
||||
../public/static/js/ \
|
||||
../public/static/media/
|
||||
cp -r build ../public
|
||||
|
||||
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/src/routes"
|
||||
|
||||
$(DOCS_ASSET): $(DOCS_FILES) $(SOURCE)
|
||||
echo "$$DUMMY_BINDATA" > src/docs/bindata.go
|
||||
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/cmd/paste"
|
||||
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/src/docs"
|
||||
|
||||
|
||||
deploy: $(SOURCE) $(ROUTE_ASSET)
|
||||
|
|
|
@ -24,11 +24,12 @@
|
|||
//
|
||||
//
|
||||
// swagger:meta
|
||||
package main // import "sour.is/x/paste"
|
||||
package main // import "sour.is/x/paste/cmd/paste"
|
||||
|
||||
import (
|
||||
"sour.is/x/toolbox/httpsrv"
|
||||
_ "sour.is/x/paste/routes"
|
||||
_ "sour.is/x/paste/src/routes"
|
||||
_ "sour.is/x/paste/src/docs"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
@ -36,3 +37,5 @@ func main() {
|
|||
httpsrv.Run()
|
||||
}
|
||||
}
|
||||
|
||||
//go:generate swagger generate spec -o ../../src/docs/public/swagger.json
|
1
src/docs/.gitignore
vendored
Normal file
1
src/docs/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
public/swagger.json
|
11
src/docs/public.go
Normal file
11
src/docs/public.go
Normal file
|
@ -0,0 +1,11 @@
|
|||
package docs
|
||||
|
||||
import "sour.is/x/toolbox/httpsrv"
|
||||
|
||||
func init() {
|
||||
httpsrv.AssetRegister("docs", httpsrv.AssetRoutes{
|
||||
{"Assets", "/docs/", httpsrv.FsHtml5(assetFS())},
|
||||
})
|
||||
}
|
||||
|
||||
//go:generate go-bindata-assetfs -pkg docs public/
|
BIN
src/docs/public/favicon-16x16.png
Normal file
BIN
src/docs/public/favicon-16x16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 445 B |
BIN
src/docs/public/favicon-32x32.png
Normal file
BIN
src/docs/public/favicon-32x32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
95
src/docs/public/index.html
Normal file
95
src/docs/public/index.html
Normal file
|
@ -0,0 +1,95 @@
|
|||
<!-- HTML for static distribution bundle build -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
<style>
|
||||
html
|
||||
{
|
||||
box-sizing: border-box;
|
||||
overflow: -moz-scrollbars-vertical;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
*,
|
||||
*:before,
|
||||
*:after
|
||||
{
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
background: #fafafa;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
|
||||
<defs>
|
||||
<symbol viewBox="0 0 20 20" id="unlocked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="locked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="close">
|
||||
<path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow">
|
||||
<path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow-down">
|
||||
<path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
|
||||
</symbol>
|
||||
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="jump-to">
|
||||
<path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="expand">
|
||||
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
||||
</symbol>
|
||||
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
<div id="swagger-ui"></div>
|
||||
|
||||
<script src="./swagger-ui-bundle.js"> </script>
|
||||
<script src="./swagger-ui-standalone-preset.js"> </script>
|
||||
<script>
|
||||
window.onload = function() {
|
||||
|
||||
// Build a system
|
||||
const ui = SwaggerUIBundle({
|
||||
url: "/docs/swagger.json",
|
||||
dom_id: '#swagger-ui',
|
||||
deepLinking: true,
|
||||
presets: [
|
||||
SwaggerUIBundle.presets.apis,
|
||||
SwaggerUIStandalonePreset
|
||||
],
|
||||
plugins: [
|
||||
SwaggerUIBundle.plugins.DownloadUrl
|
||||
],
|
||||
layout: "StandaloneLayout"
|
||||
})
|
||||
|
||||
window.ui = ui
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
67
src/docs/public/oauth2-redirect.html
Normal file
67
src/docs/public/oauth2-redirect.html
Normal file
|
@ -0,0 +1,67 @@
|
|||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<body onload="run()">
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
'use strict';
|
||||
function run () {
|
||||
var oauth2 = window.opener.swaggerUIRedirectOauth2;
|
||||
var sentState = oauth2.state;
|
||||
var redirectUrl = oauth2.redirectUrl;
|
||||
var isValid, qp, arr;
|
||||
|
||||
if (/code|token|error/.test(window.location.hash)) {
|
||||
qp = window.location.hash.substring(1);
|
||||
} else {
|
||||
qp = location.search.substring(1);
|
||||
}
|
||||
|
||||
arr = qp.split("&")
|
||||
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';})
|
||||
qp = qp ? JSON.parse('{' + arr.join() + '}',
|
||||
function (key, value) {
|
||||
return key === "" ? value : decodeURIComponent(value)
|
||||
}
|
||||
) : {}
|
||||
|
||||
isValid = qp.state === sentState
|
||||
|
||||
if ((
|
||||
oauth2.auth.schema.get("flow") === "accessCode"||
|
||||
oauth2.auth.schema.get("flow") === "authorizationCode"
|
||||
) && !oauth2.auth.code) {
|
||||
if (!isValid) {
|
||||
oauth2.errCb({
|
||||
authId: oauth2.auth.name,
|
||||
source: "auth",
|
||||
level: "warning",
|
||||
message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
|
||||
});
|
||||
}
|
||||
|
||||
if (qp.code) {
|
||||
delete oauth2.state;
|
||||
oauth2.auth.code = qp.code;
|
||||
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
|
||||
} else {
|
||||
let oauthErrorMsg
|
||||
if (qp.error) {
|
||||
oauthErrorMsg = "["+qp.error+"]: " +
|
||||
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
|
||||
(qp.error_uri ? "More info: "+qp.error_uri : "");
|
||||
}
|
||||
|
||||
oauth2.errCb({
|
||||
authId: oauth2.auth.name,
|
||||
source: "auth",
|
||||
level: "error",
|
||||
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
|
||||
});
|
||||
}
|
||||
} else {
|
||||
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
|
||||
}
|
||||
window.close();
|
||||
}
|
||||
</script>
|
93
src/docs/public/swagger-ui-bundle.js
Normal file
93
src/docs/public/swagger-ui-bundle.js
Normal file
File diff suppressed because one or more lines are too long
13
src/docs/public/swagger-ui-standalone-preset.js
Normal file
13
src/docs/public/swagger-ui-standalone-preset.js
Normal file
File diff suppressed because one or more lines are too long
3
src/docs/public/swagger-ui.css
Normal file
3
src/docs/public/swagger-ui.css
Normal file
File diff suppressed because one or more lines are too long
8
src/docs/public/swagger-ui.js
Normal file
8
src/docs/public/swagger-ui.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -37,10 +37,6 @@ func init() {
|
|||
{"getPaste", "GET", "/api/get/{id}", getPaste},
|
||||
{"postPaste", "POST", "/api", postPaste},
|
||||
})
|
||||
|
||||
httpsrv.AssetRegister("paste", httpsrv.AssetRoutes{
|
||||
{"Assets", "/", httpsrv.FsHtml5(assetFS())},
|
||||
})
|
||||
}
|
||||
|
||||
func setConfig(config map[string]string) {
|
11
src/routes/public.go
Normal file
11
src/routes/public.go
Normal file
|
@ -0,0 +1,11 @@
|
|||
package routes
|
||||
|
||||
import "sour.is/x/toolbox/httpsrv"
|
||||
|
||||
func init() {
|
||||
httpsrv.AssetRegister("paste", httpsrv.AssetRoutes{
|
||||
{"Assets", "/", httpsrv.FsHtml5(assetFS())},
|
||||
})
|
||||
}
|
||||
|
||||
//go:generate go-bindata-assetfs -pkg routes -prefix ../../ ../../public/ ../../public/static/css/ ../../public/static/js/ ../../public/static/media/
|
Loading…
Reference in New Issue
Block a user