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"
|
revision = "784ddc588536785e7299f7272f39101f7faccc3f"
|
||||||
version = "0.6.2"
|
version = "0.6.2"
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/elazarl/go-bindata-assetfs"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "30f82fa23fd844bd5bb1e5f216db87fd77b5eb43"
|
|
||||||
version = "v1.0.0"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/fsnotify/fsnotify"
|
name = "github.com/fsnotify/fsnotify"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
|
@ -143,6 +137,6 @@
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "f0136e5899d85670e4bb91c85db638b8d50d74cac1d00e96c714c7ec61513d5f"
|
inputs-digest = "dda0f77480b1bdc7057ae5b9a5a2e4c69d745c50200eac736cc41ba9d76e67ce"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
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/*)
|
ROUTE_FILES=$(wildcard assets/src/*) $(wildcard assets/public/*)
|
||||||
|
|
||||||
|
DOCS_ASSET=src/docs/bindata.go
|
||||||
|
DOCS_FILES=$(wildcard src/docs/ui/*)
|
||||||
|
|
||||||
VENDOR_FILES=$(wildcard vendor/*)
|
VENDOR_FILES=$(wildcard vendor/*)
|
||||||
|
|
||||||
SOURCE=./*.go routes/*.go
|
SOURCE=$(wildcard cmd/*/*.go) $(filter-out src/routes/bindata.go, $(wildcard src/routes/*.go))
|
||||||
BINARY=paste
|
BINARY=paste
|
||||||
|
|
||||||
|
define DUMMY_BINDATA
|
||||||
|
package docs
|
||||||
|
import "net/http"
|
||||||
|
func assetFS() (fs http.FileSystem) { return }
|
||||||
|
endef
|
||||||
|
export DUMMY_BINDATA
|
||||||
|
|
||||||
all: $(BINARY)
|
all: $(BINARY)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(BINARY) $(ROUTE_ASSET) $(ROUTE_FILES)
|
rm -rf $(BINARY) $(ROUTE_ASSET) public/
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
dep ensure
|
dep ensure
|
||||||
go get github.com/jteeuwen/go-bindata/...
|
go get github.com/jteeuwen/go-bindata/...
|
||||||
go get github.com/elazarl/go-bindata-assetfs/...
|
go get github.com/elazarl/go-bindata-assetfs/...
|
||||||
|
git submodule update
|
||||||
|
cd assets; npm i
|
||||||
|
|
||||||
run: $(BINARY)
|
run: $(BINARY)
|
||||||
./$(BINARY) -vv serve
|
./$(BINARY) -vv serve
|
||||||
|
|
||||||
$(BINARY): $(SOURCE) $(ROUTE_ASSET) $(VENDOR_FILES)
|
$(BINARY): $(SOURCE) $(ROUTE_ASSET) $(VENDOR_FILES) $(DOCS_ASSET)
|
||||||
go build
|
go build "sour.is/x/paste/cmd/paste"
|
||||||
|
|
||||||
$(ROUTE_ASSET): $(ROUTE_FILES)
|
$(ROUTE_ASSET): $(ROUTE_FILES)
|
||||||
cd assets; \
|
cd assets; \
|
||||||
rm -rf build ../public; \
|
rm -rf build ../public; \
|
||||||
npm run build; \
|
npm run build; \
|
||||||
cp -r build ../public; \
|
cp -r build ../public
|
||||||
export PATH=$$GOPATH/bin:$$PATH; \
|
|
||||||
cd ../routes; \
|
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/src/routes"
|
||||||
go-bindata-assetfs -pkg routes \
|
|
||||||
-prefix ../ \
|
$(DOCS_ASSET): $(DOCS_FILES) $(SOURCE)
|
||||||
../public/ \
|
echo "$$DUMMY_BINDATA" > src/docs/bindata.go
|
||||||
../public/static/css/ \
|
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/cmd/paste"
|
||||||
../public/static/js/ \
|
export PATH=$$GOPATH/bin:$$PATH; go generate "sour.is/x/paste/src/docs"
|
||||||
../public/static/media/
|
|
||||||
|
|
||||||
|
|
||||||
deploy: $(SOURCE) $(ROUTE_ASSET)
|
deploy: $(SOURCE) $(ROUTE_ASSET)
|
||||||
|
|
|
@ -24,11 +24,12 @@
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// swagger:meta
|
// swagger:meta
|
||||||
package main // import "sour.is/x/paste"
|
package main // import "sour.is/x/paste/cmd/paste"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sour.is/x/toolbox/httpsrv"
|
"sour.is/x/toolbox/httpsrv"
|
||||||
_ "sour.is/x/paste/routes"
|
_ "sour.is/x/paste/src/routes"
|
||||||
|
_ "sour.is/x/paste/src/docs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -36,3 +37,5 @@ func main() {
|
||||||
httpsrv.Run()
|
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},
|
{"getPaste", "GET", "/api/get/{id}", getPaste},
|
||||||
{"postPaste", "POST", "/api", postPaste},
|
{"postPaste", "POST", "/api", postPaste},
|
||||||
})
|
})
|
||||||
|
|
||||||
httpsrv.AssetRegister("paste", httpsrv.AssetRoutes{
|
|
||||||
{"Assets", "/", httpsrv.FsHtml5(assetFS())},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfig(config map[string]string) {
|
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