Skip to content

Commit

Permalink
dashboard apis
Browse files Browse the repository at this point in the history
  • Loading branch information
j75689 committed Apr 12, 2019
1 parent 57b5adf commit af7a658
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 4 deletions.
59 changes: 59 additions & 0 deletions dashboard/src/lib/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,65 @@ const api = {
} catch (err) {
console.log(err);
}
},
async GetServiceAccount(name) {
try {
let res = await service.get("/role/account/" + name);
return new Promise(resolve => {
if (res.code === 0) {
resolve(res);
} else {
resolve(res);
}
});
} catch (err) {
console.log(err);
}
},
async SaveServiceAccount(name, data) {
try {
let res = await service.put(
"/role/account/" + name,
querystring.stringify(data)
);
return new Promise(resolve => {
if (res.code === 0) {
resolve(res);
} else {
resolve(res);
}
});
} catch (err) {
console.log(err);
}
},
async RefreshServiceAccountToken(name) {
try {
let res = await service.post(`/role/account/${name}/refresh`);
return new Promise(resolve => {
if (res.code === 0) {
resolve(res);
} else {
resolve(res);
}
});
} catch (err) {
console.log(err);
}
},
async GetScopeTags() {
try {
let res = await service.get(`/role/scope`);
return new Promise(resolve => {
if (res.code === 0) {
resolve(res);
} else {
resolve(res);
}
});
} catch (err) {
console.log(err);
}
}
};

Expand Down
2 changes: 1 addition & 1 deletion plugin/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ var (

func Load(path string, log *zap.SugaredLogger) {
logger = log
logger.Info("[Init] ", "load plugin")
logger.Info("[Init] ", "Load plugin")
// add default plugin
{
graphql := PluginFunc(Graphql)
Expand Down
116 changes: 116 additions & 0 deletions server/context/accessrole.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/gin-gonic/gin"
"github.com/j75689/easybot/auth"
"github.com/j75689/easybot/auth/token"
"github.com/j75689/easybot/config"
"github.com/j75689/easybot/model"
"github.com/j75689/easybot/pkg/logger"
Expand Down Expand Up @@ -42,6 +43,22 @@ func HandleGetAllServiceAccount(db *store.Storage) func(*gin.Context) {
// HandleGetServiceAccount process get service account info
func HandleGetServiceAccount(db *store.Storage) func(*gin.Context) {
return func(c *gin.Context) {
var (
account model.ServiceAccount
name = c.Param("name")
)
value, err := (*db).Load(config.ServiceAccountTable, name)
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": "Account not found"})
return
}
if data, err := json.Marshal(value); err == nil {
json.Unmarshal(data, &account)
c.JSON(http.StatusOK, account)
} else {
logger.Errorf("[dashboard] unmarshal account [%v] error [%v]", name, err)
c.JSON(http.StatusOK, gin.H{"success": false, "error": "Data error"})
}
}
}

Expand All @@ -57,7 +74,13 @@ func HandleCreateServiceAccount(db *store.Storage) func(*gin.Context) {
active int
scope = c.DefaultPostForm("scope", "")
)
// Check Exist
if _, err := (*db).Load(config.ServiceAccountTable, name); err == nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": name + " is Existed"})
return
}

// Create New
active, _ = strconv.Atoi(activeStr)

account := &model.ServiceAccount{
Expand Down Expand Up @@ -87,6 +110,56 @@ func HandleCreateServiceAccount(db *store.Storage) func(*gin.Context) {
}
}

// HandleSaveServiceAccount process save service account
func HandleSaveServiceAccount(db *store.Storage) func(*gin.Context) {
return func(c *gin.Context) {
var (
account model.ServiceAccount
name = c.Param("name")
email = c.DefaultPostForm("email", "")
domain = c.DefaultPostForm("domain", "")
provider = c.DefaultPostForm("provider", "")
activeStr = c.DefaultPostForm("active", "7200")
active int
scope = c.DefaultPostForm("scope", "")
)

value, err := (*db).Load(config.ServiceAccountTable, name)
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": "Account not found"})
return
}
if data, err := json.Marshal(value); err == nil {
active, _ = strconv.Atoi(activeStr)
json.Unmarshal(data, &account)
account.EMail = email
account.Domain = domain
account.Provider = provider
account.Active = active
account.Scope = scope

token, err := auth.GenerateToken(&account)
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": err.Error()})
return
}
account.Token = token.AccessToken
account.Expired = token.Expire

if err := (*db).Save(config.ServiceAccountTable, name, account); err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
})
} else {
logger.Errorf("[dashboard] unmarshal account [%v] error [%v]", name, err)
c.JSON(http.StatusOK, gin.H{"success": false, "error": "Data error"})
}
}
}

// HandleBatchDeleteServiceAccount process batch delete service account
func HandleBatchDeleteServiceAccount(db *store.Storage) func(*gin.Context) {
return func(c *gin.Context) {
Expand All @@ -113,3 +186,46 @@ func HandleBatchDeleteServiceAccount(db *store.Storage) func(*gin.Context) {

}
}

// HandleRefreshServiceAccountToken process refresh token
func HandleRefreshServiceAccountToken(db *store.Storage) func(*gin.Context) {
return func(c *gin.Context) {
var (
name = c.Param("name")
tokenInfo *token.TokenInfo
account model.ServiceAccount
)
tokenObj, tokenOk := c.Get("token")

if tokenOk {
tokenInfo = tokenObj.(*token.TokenInfo)
value, _ := (*db).Load(config.ServiceAccountTable, name)

if data, err := json.Marshal(value); err == nil {
json.Unmarshal(data, &account)
tokenInfo, err = auth.RefreshToken(tokenInfo.AccessToken)
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": err.Error()})
account.Token = tokenInfo.AccessToken
account.Expired = tokenInfo.Expire
// Save
if err := (*db).Save(config.ServiceAccountTable, name, account); err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"token": tokenInfo,
})
}
}
}
}
}

// HandleGetScopeTags process get scope tags
func HandleGetScopeTags() func(*gin.Context) {
return func(c *gin.Context) {
c.JSON(http.StatusOK, config.Scope.Tags())
}
}
4 changes: 4 additions & 0 deletions server/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,13 @@ func registerDashBoardRouter(app *gin.Engine) {
// plugin
dashboard.POST("/plugin/:plugin", context.HandleTestPlugin())
// accessrole
dashboard.GET("role/scope", context.HandleGetScopeTags())
dashboard.GET("/role/account", context.HandleGetAllServiceAccount(&db))
dashboard.DELETE("/role/account", context.HandleBatchDeleteServiceAccount(&db))
dashboard.GET("/role/account/:name", context.HandleGetServiceAccount(&db))
dashboard.PUT("/role/account/:name", context.HandleSaveServiceAccount(&db))
dashboard.POST("/role/account/:name", context.HandleCreateServiceAccount(&db))
dashboard.POST("/role/account/:name/refresh", context.HandleRefreshServiceAccountToken(&db))
}

func registerAPIRouter(app *gin.Engine, handler *httphandler.WebhookHandler, botClient *linebot.Client) {
Expand Down
6 changes: 3 additions & 3 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func initServer() {
// init plugin
plugin.Load(plugin_path, log.GetLogger())

logger.Info("[Init] ", "db driver:", db_driver)
logger.Info("[Init] ", "Use DB driver:", db_driver)
// init db
var err error
db, err = store.NewStoreage(db_driver, &store.Connection{
Expand All @@ -89,7 +89,7 @@ func initServer() {
if err != nil {
logger.Fatal("[Init] ", err.Error())
}
logger.Info("[Init] ", "load config")
logger.Info("[Init] ", "Load config")
// init config
if err = db.LoadAll("config", func(key string, value interface{}) {
if b, err := json.Marshal(value); err == nil {
Expand All @@ -104,7 +104,7 @@ func initServer() {
}); err != nil {
logger.Error("[Init] ", err)
}
logger.Info("[Init] ", "Auth module")
logger.Info("[Init] ", "Setting Auth module")
// init Auth module
auth.SetSigningKey(appSecret)
}
Expand Down

0 comments on commit af7a658

Please sign in to comment.