feat: add go backend API docs

Signed-off-by: Kininaru <shiftregister233@outlook.com>
This commit is contained in:
Kininaru 2021-03-29 23:40:25 +08:00
parent 5c49693bc0
commit 3a13b8e73c
27 changed files with 2578 additions and 7 deletions

View File

@ -6,4 +6,5 @@ copyrequestbody = true
dataSourceName = root:123@tcp(localhost:3306)/ dataSourceName = root:123@tcp(localhost:3306)/
dbName = casdoor dbName = casdoor
AuthState = "casdoor" AuthState = "casdoor"
UseProxy = false UseProxy = false
EnableDocs = true

View File

@ -58,7 +58,7 @@ type Response struct {
// @Description register a new user // @Description register a new user
// @Param username formData string true "The username to register" // @Param username formData string true "The username to register"
// @Param password formData string true "The password" // @Param password formData string true "The password"
// @Success 200 {object} controllers.api_controller.Response The Response object // @Success 200 {object} controllers.Response The Response object
// @router /register [post] // @router /register [post]
func (c *ApiController) Register() { func (c *ApiController) Register() {
var resp Response var resp Response
@ -104,7 +104,7 @@ func (c *ApiController) Register() {
// @Title Logout // @Title Logout
// @Description logout the current user // @Description logout the current user
// @Success 200 {object} controllers.api_controller.Response The Response object // @Success 200 {object} controllers.Response The Response object
// @router /logout [post] // @router /logout [post]
func (c *ApiController) Logout() { func (c *ApiController) Logout() {
var resp Response var resp Response
@ -120,6 +120,10 @@ func (c *ApiController) Logout() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetAccount
// @Description get the details of the current account
// @Success 200 {object} controllers.Response The Response object
// @router /get-account [get]
func (c *ApiController) GetAccount() { func (c *ApiController) GetAccount() {
var resp Response var resp Response
@ -138,6 +142,12 @@ func (c *ApiController) GetAccount() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UploadAvatar
// @Description register a new user
// @Param avatarfile formData string true "The base64 encode of avatarfile"
// @Param password formData string true "The password"
// @Success 200 {object} controllers.Response The Response object
// @router /upload-avatar [post]
func (c *ApiController) UploadAvatar() { func (c *ApiController) UploadAvatar() {
var resp Response var resp Response
username := c.GetSessionUser() username := c.GetSessionUser()

View File

@ -20,6 +20,11 @@ import (
"github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/object"
) )
// @Title GetApplications
// @Description get all applications
// @Param owner query string true "The owner of applications."
// @Success 200 {array} object.Application The Response object
// @router /get-applications [get]
func (c *ApiController) GetApplications() { func (c *ApiController) GetApplications() {
owner := c.Input().Get("owner") owner := c.Input().Get("owner")
@ -27,6 +32,11 @@ func (c *ApiController) GetApplications() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetApplication
// @Description get the detail of an application
// @Param id query string true "The id of the application."
// @Success 200 {object} object.Application The Response object
// @router /get-application [get]
func (c *ApiController) GetApplication() { func (c *ApiController) GetApplication() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -34,6 +44,12 @@ func (c *ApiController) GetApplication() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UpdateApplication
// @Description update an application
// @Param id query string true "The id of the application"
// @Param body body object.Application true "The details of the application"
// @Success 200 {object} controllers.Response The Response object
// @router /update-application [post]
func (c *ApiController) UpdateApplication() { func (c *ApiController) UpdateApplication() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -47,6 +63,11 @@ func (c *ApiController) UpdateApplication() {
c.ServeJSON() c.ServeJSON()
} }
// @Title AddApplication
// @Description add an application
// @Param body body object.Application true "The details of the application"
// @Success 200 {object} controllers.Response The Response object
// @router /add-application [post]
func (c *ApiController) AddApplication() { func (c *ApiController) AddApplication() {
var application object.Application var application object.Application
err := json.Unmarshal(c.Ctx.Input.RequestBody, &application) err := json.Unmarshal(c.Ctx.Input.RequestBody, &application)
@ -58,6 +79,11 @@ func (c *ApiController) AddApplication() {
c.ServeJSON() c.ServeJSON()
} }
// @Title DeleteApplication
// @Description delete an application
// @Param body body object.Application true "The details of the application"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-application [post]
func (c *ApiController) DeleteApplication() { func (c *ApiController) DeleteApplication() {
var application object.Application var application object.Application
err := json.Unmarshal(c.Ctx.Input.RequestBody, &application) err := json.Unmarshal(c.Ctx.Input.RequestBody, &application)

View File

@ -53,6 +53,15 @@ func (c *ApiController) HandleLoggedIn(userId string, form *RequestForm) *Respon
return resp return resp
} }
// @Title GetApplicationLogin
// @Description get application login
// @Param clientId query string true "client id"
// @Param responseType query string true "response type"
// @Param redirectUri query string true "redirect uri"
// @Param scope query string true "scope"
// @Param state query string true "state"
// @Success 200 {object} controllers.api_controller.Response The Response object
// @router /update-application [get]
func (c *ApiController) GetApplicationLogin() { func (c *ApiController) GetApplicationLogin() {
var resp Response var resp Response
@ -72,6 +81,12 @@ func (c *ApiController) GetApplicationLogin() {
c.ServeJSON() c.ServeJSON()
} }
// @Title Login
// @Description login
// @Param oAuthParams query string true "oAuth parameters"
// @Param body body RequestForm true "Login information"
// @Success 200 {object} controllers.api_controller.Response The Response object
// @router /login [post]
func (c *ApiController) Login() { func (c *ApiController) Login() {
resp := &Response{Status: "null", Msg: ""} resp := &Response{Status: "null", Msg: ""}
var form RequestForm var form RequestForm

View File

@ -20,6 +20,11 @@ import (
"github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/object"
) )
// @Title GetOrganizations
// @Description get organizations
// @Param owner query string true "owner"
// @Success 200 {array} object.Organization The Response object
// @router /get-organizations [get]
func (c *ApiController) GetOrganizations() { func (c *ApiController) GetOrganizations() {
owner := c.Input().Get("owner") owner := c.Input().Get("owner")
@ -27,6 +32,11 @@ func (c *ApiController) GetOrganizations() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetOrganization
// @Description get organization
// @Param id query string true "organization id"
// @Success 200 {object} object.Organization The Response object
// @router /get-organization [get]
func (c *ApiController) GetOrganization() { func (c *ApiController) GetOrganization() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -34,6 +44,12 @@ func (c *ApiController) GetOrganization() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UpdateOrganization
// @Description update organization
// @Param id query string true "The id of the organization"
// @Param body body object.Organization true "The details of the organization"
// @Success 200 {object} controllers.Response The Response object
// @router /update-organization [post]
func (c *ApiController) UpdateOrganization() { func (c *ApiController) UpdateOrganization() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -47,6 +63,11 @@ func (c *ApiController) UpdateOrganization() {
c.ServeJSON() c.ServeJSON()
} }
// @Title AddOrganization
// @Description add organization
// @Param body body object.Organization true "The details of the organization"
// @Success 200 {object} controllers.Response The Response object
// @router /add-organization [post]
func (c *ApiController) AddOrganization() { func (c *ApiController) AddOrganization() {
var organization object.Organization var organization object.Organization
err := json.Unmarshal(c.Ctx.Input.RequestBody, &organization) err := json.Unmarshal(c.Ctx.Input.RequestBody, &organization)
@ -58,6 +79,11 @@ func (c *ApiController) AddOrganization() {
c.ServeJSON() c.ServeJSON()
} }
// @Title DeleteOrganization
// @Description delete organization
// @Param body body object.Organization true "The details of the organization"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-organization [post]
func (c *ApiController) DeleteOrganization() { func (c *ApiController) DeleteOrganization() {
var organization object.Organization var organization object.Organization
err := json.Unmarshal(c.Ctx.Input.RequestBody, &organization) err := json.Unmarshal(c.Ctx.Input.RequestBody, &organization)

View File

@ -20,6 +20,11 @@ import (
"github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/object"
) )
// @Title GetProviders
// @Description get providers
// @Param owner query string true "The owner of providers"
// @Success 200 {array} object.Provider The Response object
// @router /get-providers [get]
func (c *ApiController) GetProviders() { func (c *ApiController) GetProviders() {
owner := c.Input().Get("owner") owner := c.Input().Get("owner")
@ -27,6 +32,11 @@ func (c *ApiController) GetProviders() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetProvider
// @Description get provider
// @Param id query string true "The id of the provider"
// @Success 200 {object} object.Provider The Response object
// @router /get-provider [get]
func (c *ApiController) GetProvider() { func (c *ApiController) GetProvider() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -34,6 +44,12 @@ func (c *ApiController) GetProvider() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UpdateProvider
// @Description update provider
// @Param id query string true "The id of the provider"
// @Param body body object.Provider true "The details of the provider"
// @Success 200 {object} controllers.Response The Response object
// @router /update-provider [post]
func (c *ApiController) UpdateProvider() { func (c *ApiController) UpdateProvider() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -47,6 +63,11 @@ func (c *ApiController) UpdateProvider() {
c.ServeJSON() c.ServeJSON()
} }
// @Title AddProvider
// @Description add provider
// @Param body body object.Provider true "The details of the provider"
// @Success 200 {object} controllers.Response The Response object
// @router /add-provider [post]
func (c *ApiController) AddProvider() { func (c *ApiController) AddProvider() {
var provider object.Provider var provider object.Provider
err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider) err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider)
@ -58,6 +79,11 @@ func (c *ApiController) AddProvider() {
c.ServeJSON() c.ServeJSON()
} }
// @Title DeleteProvider
// @Description delete provider
// @Param body body object.Provider true "The details of the provider"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-provider [post]
func (c *ApiController) DeleteProvider() { func (c *ApiController) DeleteProvider() {
var provider object.Provider var provider object.Provider
err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider) err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider)

View File

@ -20,6 +20,11 @@ import (
"github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/object"
) )
// @Title GetTokens
// @Description get tokens
// @Param owner query string true "The owner of tokens"
// @Success 200 {array} object.Token The Response object
// @router /get-tokens [get]
func (c *ApiController) GetTokens() { func (c *ApiController) GetTokens() {
owner := c.Input().Get("owner") owner := c.Input().Get("owner")
@ -27,6 +32,11 @@ func (c *ApiController) GetTokens() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetToken
// @Description get token
// @Param id query string true "The id of token"
// @Success 200 {object} object.Token The Response object
// @router /get-token [get]
func (c *ApiController) GetToken() { func (c *ApiController) GetToken() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -34,6 +44,12 @@ func (c *ApiController) GetToken() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UpdateToken
// @Description update token
// @Param id query string true "The id of token"
// @Param body body object.Token true "Details of the token"
// @Success 200 {object} controllers.Response The Response object
// @router /update-token [post]
func (c *ApiController) UpdateToken() { func (c *ApiController) UpdateToken() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -47,6 +63,11 @@ func (c *ApiController) UpdateToken() {
c.ServeJSON() c.ServeJSON()
} }
// @Title AddToken
// @Description add token
// @Param body body object.Token true "Details of the token"
// @Success 200 {object} controllers.Response The Response object
// @router /add-token [post]
func (c *ApiController) AddToken() { func (c *ApiController) AddToken() {
var token object.Token var token object.Token
err := json.Unmarshal(c.Ctx.Input.RequestBody, &token) err := json.Unmarshal(c.Ctx.Input.RequestBody, &token)
@ -58,6 +79,11 @@ func (c *ApiController) AddToken() {
c.ServeJSON() c.ServeJSON()
} }
// @Title DeleteToken
// @Description delete token
// @Param body body object.Token true "Details of the token"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-token [post]
func (c *ApiController) DeleteToken() { func (c *ApiController) DeleteToken() {
var token object.Token var token object.Token
err := json.Unmarshal(c.Ctx.Input.RequestBody, &token) err := json.Unmarshal(c.Ctx.Input.RequestBody, &token)
@ -69,6 +95,14 @@ func (c *ApiController) DeleteToken() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetOAuthToken
// @Description get oAuth token
// @Param grant_type query string true "oAuth grant type"
// @Param client_id query string true "oAuth client id"
// @Param client_secret query string true "oAuth client secret"
// @Param code query string true "oAuth code"
// @Success 200 {object} object.TokenWrapper The Response object
// @router /login/oauth/access_token [post]
func (c *ApiController) GetOAuthToken() { func (c *ApiController) GetOAuthToken() {
grantType := c.Input().Get("grant_type") grantType := c.Input().Get("grant_type")
clientId := c.Input().Get("client_id") clientId := c.Input().Get("client_id")

View File

@ -20,11 +20,20 @@ import (
"github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/object"
) )
// @Title GetGlobalUsers
// @Description get global users
// @Success 200 {array} object.User The Response object
// @router /get-global-users [get]
func (c *ApiController) GetGlobalUsers() { func (c *ApiController) GetGlobalUsers() {
c.Data["json"] = object.GetGlobalUsers() c.Data["json"] = object.GetGlobalUsers()
c.ServeJSON() c.ServeJSON()
} }
// @Title GetUsers
// @Description
// @Param owner query string true "The owner of users"
// @Success 200 {array} object.User The Response object
// @router /get-users [get]
func (c *ApiController) GetUsers() { func (c *ApiController) GetUsers() {
owner := c.Input().Get("owner") owner := c.Input().Get("owner")
@ -32,6 +41,11 @@ func (c *ApiController) GetUsers() {
c.ServeJSON() c.ServeJSON()
} }
// @Title GetUser
// @Description get user
// @Param id query string true "The id of the user"
// @Success 200 {object} object.User The Response object
// @router /get-user [get]
func (c *ApiController) GetUser() { func (c *ApiController) GetUser() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -39,6 +53,12 @@ func (c *ApiController) GetUser() {
c.ServeJSON() c.ServeJSON()
} }
// @Title UpdateUser
// @Description update user
// @Param id query string true "The id of the user"
// @Param body body object.User true "The details of the user"
// @Success 200 {object} controllers.Response The Response object
// @router /update-user [post]
func (c *ApiController) UpdateUser() { func (c *ApiController) UpdateUser() {
id := c.Input().Get("id") id := c.Input().Get("id")
@ -52,6 +72,11 @@ func (c *ApiController) UpdateUser() {
c.ServeJSON() c.ServeJSON()
} }
// @Title AddUser
// @Description add user
// @Param body body object.User true "The details of the user"
// @Success 200 {object} controllers.Response The Response object
// @router /add-user [post]
func (c *ApiController) AddUser() { func (c *ApiController) AddUser() {
var user object.User var user object.User
err := json.Unmarshal(c.Ctx.Input.RequestBody, &user) err := json.Unmarshal(c.Ctx.Input.RequestBody, &user)
@ -63,6 +88,11 @@ func (c *ApiController) AddUser() {
c.ServeJSON() c.ServeJSON()
} }
// @Title DeleteUser
// @Description delete user
// @Param body body object.User true "The details of the user"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-user [post]
func (c *ApiController) DeleteUser() { func (c *ApiController) DeleteUser() {
var user object.User var user object.User
err := json.Unmarshal(c.Ctx.Input.RequestBody, &user) err := json.Unmarshal(c.Ctx.Input.RequestBody, &user)

View File

@ -41,6 +41,8 @@ func main() {
//beego.DelStaticPath("/static") //beego.DelStaticPath("/static")
beego.SetStaticPath("/static", "web/build/static") beego.SetStaticPath("/static", "web/build/static")
beego.BConfig.WebConfig.DirectoryIndex = true
beego.SetStaticPath("/swagger", "swagger")
// https://studygolang.com/articles/2303 // https://studygolang.com/articles/2303
beego.InsertFilter("*", beego.BeforeRouter, routers.StaticFilter) beego.InsertFilter("*", beego.BeforeRouter, routers.StaticFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.AutoLoginFilter) beego.InsertFilter("*", beego.BeforeRouter, routers.AutoLoginFilter)

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// @APIVersion 1.0.0
// @Title Casdoor API
// @Description Documentation of Casdoor API
// @Contact admin@casbin.org
package routers package routers
import ( import (
@ -27,8 +31,10 @@ func init() {
func initAPI() { func initAPI() {
ns := ns :=
beego.NewNamespace("/api", beego.NewNamespace("/api",
beego.NSInclude( beego.NSNamespace("/api",
&controllers.ApiController{}, beego.NSInclude(
&controllers.ApiController{},
),
), ),
) )
beego.AddNamespace(ns) beego.AddNamespace(ns)

BIN
swagger/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

BIN
swagger/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

93
swagger/index.html Normal file
View File

@ -0,0 +1,93 @@
<!-- 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: "swagger.json",
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
window.ui = ui
}
</script>
</body>
</html>

View File

@ -0,0 +1,53 @@
<!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 isValid, qp, arr;
qp = (window.location.hash || 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.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(oauth2.auth);
} else {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "error",
message: "Authorization failed: no accessCode received from the server"
});
}
} else {
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid});
}
window.close();
}
</script>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;AAu/FA;AA6+FA;;;;;;;;;;;;;;;;;;;;;;;;;;AAyTA;;;;;;AAoIA;AAi7FA;AAmtCA;AAi0IA;AA0oJA;AAgwFA;AAyrGA;AA0lFA;AA4nFA;AA+9CA;AA+gDA;AAwrCA;AA60EA;;;;;AA6oCA;AAsyJA;;;;;;;;;;;;;;AA64EA;AA4mIA;AAquJA;AA2qHA;AA2mGA;AAiiEA;AAq4DA;AAg3DA;AAoPA;;;;;;AAk7FA;AA07FA;;;;;AAi8CA;AAgsFA;AAs2CA;AAglCA;AAu9CA;AAy8EA;AAsiCA;AA+yFA;;;;;;;;;AAgkDA;AA2zIA;AAu7FA;AAmrFA;AAu0EA","sourceRoot":""}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"swagger-ui-standalone-preset.js","sources":["webpack:///swagger-ui-standalone-preset.js"],"mappings":"AAAA;;;;;AA8QA;AAmvGA;AAuxFA;;;;;;AAocA;AAkvFA;AAu+CA;AAo+CA;AAgrCA;AAuyEA","sourceRoot":""}

2
swagger/swagger-ui.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"swagger-ui.css","sources":[],"mappings":"","sourceRoot":""}

15
swagger/swagger-ui.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AA0yCA;AAoyHA;AAmyHA;AAykGA;AA+9BA;AA6iCA;AAojCA;AAu5BA","sourceRoot":""}

1262
swagger/swagger.json Normal file

File diff suppressed because it is too large Load Diff

831
swagger/swagger.yml Normal file
View File

@ -0,0 +1,831 @@
swagger: "2.0"
info:
title: Casdoor API
description: Documentation of Casdoor API
version: 1.0.0
contact:
email: admin@casbin.org
basePath: /api
paths:
/api/add-application:
post:
tags:
- api
description: add an application
operationId: ApiController.AddApplication
parameters:
- in: body
name: body
description: The details of the application
required: true
schema:
$ref: '#/definitions/object.Application'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/add-organization:
post:
tags:
- api
description: add organization
operationId: ApiController.AddOrganization
parameters:
- in: body
name: body
description: The details of the organization
required: true
schema:
$ref: '#/definitions/object.Organization'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/add-provider:
post:
tags:
- api
description: add provider
operationId: ApiController.AddProvider
parameters:
- in: body
name: body
description: The details of the provider
required: true
schema:
$ref: '#/definitions/object.Provider'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/add-token:
post:
tags:
- api
description: add token
operationId: ApiController.AddToken
parameters:
- in: body
name: body
description: Details of the token
required: true
schema:
$ref: '#/definitions/object.Token'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/add-user:
post:
tags:
- api
description: add user
operationId: ApiController.AddUser
parameters:
- in: body
name: body
description: The details of the user
required: true
schema:
$ref: '#/definitions/object.User'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/delete-application:
post:
tags:
- api
description: delete an application
operationId: ApiController.DeleteApplication
parameters:
- in: body
name: body
description: The details of the application
required: true
schema:
$ref: '#/definitions/object.Application'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/delete-organization:
post:
tags:
- api
description: delete organization
operationId: ApiController.DeleteOrganization
parameters:
- in: body
name: body
description: The details of the organization
required: true
schema:
$ref: '#/definitions/object.Organization'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/delete-provider:
post:
tags:
- api
description: delete provider
operationId: ApiController.DeleteProvider
parameters:
- in: body
name: body
description: The details of the provider
required: true
schema:
$ref: '#/definitions/object.Provider'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/delete-token:
post:
tags:
- api
description: delete token
operationId: ApiController.DeleteToken
parameters:
- in: body
name: body
description: Details of the token
required: true
schema:
$ref: '#/definitions/object.Token'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/delete-user:
post:
tags:
- api
description: delete user
operationId: ApiController.DeleteUser
parameters:
- in: body
name: body
description: The details of the user
required: true
schema:
$ref: '#/definitions/object.User'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/get-account:
get:
tags:
- api
description: get the details of the current account
operationId: ApiController.GetAccount
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/get-application:
get:
tags:
- api
description: get the detail of an application
operationId: ApiController.GetApplication
parameters:
- in: query
name: id
description: The id of the application.
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.Application'
/api/get-applications:
get:
tags:
- api
description: get all applications
operationId: ApiController.GetApplications
parameters:
- in: query
name: owner
description: The owner of applications.
required: true
type: string
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.Application'
/api/get-global-users:
get:
tags:
- api
description: get global users
operationId: ApiController.GetGlobalUsers
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.User'
/api/get-organization:
get:
tags:
- api
description: get organization
operationId: ApiController.GetOrganization
parameters:
- in: query
name: id
description: organization id
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.Organization'
/api/get-organizations:
get:
tags:
- api
description: get organizations
operationId: ApiController.GetOrganizations
parameters:
- in: query
name: owner
description: owner
required: true
type: string
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.Organization'
/api/get-provider:
get:
tags:
- api
description: get provider
operationId: ApiController.GetProvider
parameters:
- in: query
name: id
description: The id of the provider
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.Provider'
/api/get-providers:
get:
tags:
- api
description: get providers
operationId: ApiController.GetProviders
parameters:
- in: query
name: owner
description: The owner of providers
required: true
type: string
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.Provider'
/api/get-token:
get:
tags:
- api
description: get token
operationId: ApiController.GetToken
parameters:
- in: query
name: id
description: The id of token
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.Token'
/api/get-tokens:
get:
tags:
- api
description: get tokens
operationId: ApiController.GetTokens
parameters:
- in: query
name: owner
description: The owner of tokens
required: true
type: string
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.Token'
/api/get-user:
get:
tags:
- api
description: get user
operationId: ApiController.GetUser
parameters:
- in: query
name: id
description: The id of the user
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.User'
/api/get-users:
get:
tags:
- api
operationId: ApiController.GetUsers
parameters:
- in: query
name: owner
description: The owner of users
required: true
type: string
responses:
"200":
description: The Response object
schema:
type: array
items:
$ref: '#/definitions/object.User'
/api/login:
post:
tags:
- api
description: login
operationId: ApiController.Login
parameters:
- in: query
name: oAuthParams
description: oAuth parameters
required: true
type: string
- in: body
name: body
description: Login information
required: true
schema:
$ref: '#/definitions/RequestForm'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.api_controller.Response'
/api/login/oauth/access_token:
post:
tags:
- api
description: get oAuth token
operationId: ApiController.GetOAuthToken
parameters:
- in: query
name: grant_type
description: oAuth grant type
required: true
type: string
- in: query
name: client_id
description: oAuth client id
required: true
type: string
- in: query
name: client_secret
description: oAuth client secret
required: true
type: string
- in: query
name: code
description: oAuth code
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/object.TokenWrapper'
/api/logout:
post:
tags:
- api
description: logout the current user
operationId: ApiController.Logout
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/register:
post:
tags:
- api
description: register a new user
operationId: ApiController.Register
parameters:
- in: formData
name: username
description: The username to register
required: true
type: string
- in: formData
name: password
description: The password
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/update-application:
get:
tags:
- api
description: get application login
operationId: ApiController.GetApplicationLogin
parameters:
- in: query
name: clientId
description: client id
required: true
type: string
- in: query
name: responseType
description: response type
required: true
type: string
- in: query
name: redirectUri
description: redirect uri
required: true
type: string
- in: query
name: scope
description: scope
required: true
type: string
- in: query
name: state
description: state
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.api_controller.Response'
post:
tags:
- api
description: update an application
operationId: ApiController.UpdateApplication
parameters:
- in: query
name: id
description: The id of the application
required: true
type: string
- in: body
name: body
description: The details of the application
required: true
schema:
$ref: '#/definitions/object.Application'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/update-organization:
post:
tags:
- api
description: update organization
operationId: ApiController.UpdateOrganization
parameters:
- in: query
name: id
description: The id of the organization
required: true
type: string
- in: body
name: body
description: The details of the organization
required: true
schema:
$ref: '#/definitions/object.Organization'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/update-provider:
post:
tags:
- api
description: update provider
operationId: ApiController.UpdateProvider
parameters:
- in: query
name: id
description: The id of the provider
required: true
type: string
- in: body
name: body
description: The details of the provider
required: true
schema:
$ref: '#/definitions/object.Provider'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/update-token:
post:
tags:
- api
description: update token
operationId: ApiController.UpdateToken
parameters:
- in: query
name: id
description: The id of token
required: true
type: string
- in: body
name: body
description: Details of the token
required: true
schema:
$ref: '#/definitions/object.Token'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/update-user:
post:
tags:
- api
description: update user
operationId: ApiController.UpdateUser
parameters:
- in: query
name: id
description: The id of the user
required: true
type: string
- in: body
name: body
description: The details of the user
required: true
schema:
$ref: '#/definitions/object.User'
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
/api/upload-avatar:
post:
tags:
- api
description: register a new user
operationId: ApiController.UploadAvatar
parameters:
- in: formData
name: avatarfile
description: The base64 encode of avatarfile
required: true
type: string
- in: formData
name: password
description: The password
required: true
type: string
responses:
"200":
description: The Response object
schema:
$ref: '#/definitions/controllers.Response'
definitions:
1471.0xc0003bd890.false:
title: "false"
type: object
RequestForm:
title: RequestForm
type: object
controllers.Response:
title: Response
type: object
properties:
data:
$ref: '#/definitions/1471.0xc0003bd890.false'
msg:
type: string
status:
type: string
controllers.api_controller.Response:
title: Response
type: object
properties:
data:
$ref: '#/definitions/1471.0xc0003bd890.false'
msg:
type: string
status:
type: string
object.Application:
title: Application
type: object
properties:
clientId:
type: string
clientSecret:
type: string
createdTime:
type: string
description:
type: string
displayName:
type: string
enablePassword:
type: boolean
enableSignUp:
type: boolean
expireInHours:
type: integer
format: int64
homepageUrl:
type: string
logo:
type: string
name:
type: string
organization:
type: string
owner:
type: string
providerObjs:
type: array
items:
$ref: '#/definitions/object.Provider'
providers:
type: array
items:
type: string
redirectUris:
type: array
items:
type: string
object.Organization:
title: Organization
type: object
properties:
createdTime:
type: string
displayName:
type: string
name:
type: string
owner:
type: string
websiteUrl:
type: string
object.Provider:
title: Provider
type: object
properties:
clientId:
type: string
clientSecret:
type: string
createdTime:
type: string
displayName:
type: string
name:
type: string
owner:
type: string
providerUrl:
type: string
type:
type: string
object.Token:
title: Token
type: object
properties:
accessToken:
type: string
application:
type: string
code:
type: string
createdTime:
type: string
expiresIn:
type: integer
format: int64
name:
type: string
owner:
type: string
scope:
type: string
tokenType:
type: string
object.TokenWrapper:
title: TokenWrapper
type: object
properties:
access_token:
type: string
expires_in:
type: integer
format: int64
scope:
type: string
token_type:
type: string
object.User:
title: User
type: object
properties:
affiliation:
type: string
avatar:
type: string
createdTime:
type: string
displayName:
type: string
email:
type: string
github:
type: string
google:
type: string
id:
type: string
isAdmin:
type: boolean
isGlobalAdmin:
type: boolean
name:
type: string
owner:
type: string
password:
type: string
passwordType:
type: string
phone:
type: string
qq:
type: string
tag:
type: string

View File

@ -285,6 +285,11 @@ class App extends Component {
</Menu.Item> </Menu.Item>
); );
} }
res.push(
<Menu.Item key="6" onClick={() => window.location.href = "/swagger"}>
{i18next.t("general:Swagger")}
</Menu.Item>
);
return res; return res;
} }

View File

@ -25,7 +25,8 @@
"User containers": "User containers", "User containers": "User containers",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"OAuth providers": "OAuth providers", "OAuth providers": "OAuth providers",
"Applications that requires authentication": "Applications that requires authentication" "Applications that requires authentication": "Applications that requires authentication",
"Swagger": "Swagger"
}, },
"account": "account":
{ {

View File

@ -25,7 +25,8 @@
"User containers": "用户容器", "User containers": "用户容器",
"Users under all organizations": "所有组织里的用户", "Users under all organizations": "所有组织里的用户",
"OAuth providers": "OAuth提供方", "OAuth providers": "OAuth提供方",
"Applications that requires authentication": "需要鉴权的应用" "Applications that requires authentication": "需要鉴权的应用",
"Swagger": "API总览"
}, },
"account": "account":
{ {