Skip to content

Commit

Permalink
Add provider pages
Browse files Browse the repository at this point in the history
  • Loading branch information
hsluoyz committed Jul 15, 2023
1 parent e59f9e5 commit ac76b1f
Show file tree
Hide file tree
Showing 8 changed files with 663 additions and 0 deletions.
94 changes: 94 additions & 0 deletions controllers/provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package controllers

import (
"encoding/json"

"github.com/casbin/casibase/object"
)

func (c *ApiController) GetGlobalProviders() {
providers, err := object.GetGlobalProviders()
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(providers)
}

func (c *ApiController) GetProviders() {
owner := c.Input().Get("owner")

providers, err := object.GetProviders(owner)
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(providers)
}

func (c *ApiController) GetProvider() {
id := c.Input().Get("id")

provider, err := object.GetProvider(id)
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(provider)
}

func (c *ApiController) UpdateProvider() {
id := c.Input().Get("id")

var provider object.Provider
err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider)
if err != nil {
c.ResponseError(err.Error())
return
}

success, err := object.UpdateProvider(id, &provider)
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(success)
}

func (c *ApiController) AddProvider() {
var provider object.Provider
err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider)
if err != nil {
c.ResponseError(err.Error())
return
}

success, err := object.AddProvider(&provider)
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(success)
}

func (c *ApiController) DeleteProvider() {
var provider object.Provider
err := json.Unmarshal(c.Ctx.Input.RequestBody, &provider)
if err != nil {
c.ResponseError(err.Error())
return
}

success, err := object.DeleteProvider(&provider)
if err != nil {
c.ResponseError(err.Error())
return
}

c.ResponseOk(success)
}
5 changes: 5 additions & 0 deletions object/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,9 @@ func (a *Adapter) createTable() {
if err != nil {
panic(err)
}

err = a.engine.Sync2(new(Provider))
if err != nil {
panic(err)
}
}
101 changes: 101 additions & 0 deletions object/provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package object

import (
"fmt"

"github.com/casbin/casibase/util"
"xorm.io/core"
)

type Provider struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`

DisplayName string `xorm:"varchar(100)" json:"displayName"`
Category string `xorm:"varchar(100)" json:"category"`
Type string `xorm:"varchar(100)" json:"type"`
ClientId string `xorm:"varchar(100)" json:"clientId"`
ClientSecret string `xorm:"varchar(2000)" json:"clientSecret"`
ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
}

func GetGlobalProviders() ([]*Provider, error) {
providers := []*Provider{}
err := adapter.engine.Asc("owner").Desc("created_time").Find(&providers)
if err != nil {
return providers, err
}

return providers, nil
}

func GetProviders(owner string) ([]*Provider, error) {
providers := []*Provider{}
err := adapter.engine.Desc("created_time").Find(&providers, &Provider{Owner: owner})
if err != nil {
return providers, err
}

return providers, nil
}

func getProvider(owner string, name string) (*Provider, error) {
provider := Provider{Owner: owner, Name: name}
existed, err := adapter.engine.Get(&provider)
if err != nil {
return &provider, err
}

if existed {
return &provider, nil
} else {
return nil, nil
}
}

func GetProvider(id string) (*Provider, error) {
owner, name := util.GetOwnerAndNameFromId(id)
return getProvider(owner, name)
}

func UpdateProvider(id string, provider *Provider) (bool, error) {
owner, name := util.GetOwnerAndNameFromId(id)
_, err := getProvider(owner, name)
if err != nil {
return false, err
}
if provider == nil {
return false, nil
}

_, err = adapter.engine.ID(core.PK{owner, name}).AllCols().Update(provider)
if err != nil {
return false, err
}

//return affected != 0
return true, nil
}

func AddProvider(provider *Provider) (bool, error) {
affected, err := adapter.engine.Insert(provider)
if err != nil {
return false, err
}

return affected != 0, nil
}

func DeleteProvider(provider *Provider) (bool, error) {
affected, err := adapter.engine.ID(core.PK{provider.Owner, provider.Name}).Delete(&Provider{})
if err != nil {
return false, err
}

return affected != 0, nil
}

func (provider *Provider) GetId() string {
return fmt.Sprintf("%s/%s", provider.Owner, provider.Name)
}
7 changes: 7 additions & 0 deletions routers/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ func initAPI() {
beego.Router("/api/add-store", &controllers.ApiController{}, "POST:AddStore")
beego.Router("/api/delete-store", &controllers.ApiController{}, "POST:DeleteStore")

beego.Router("/api/get-global-providers", &controllers.ApiController{}, "GET:GetGlobalProviders")
beego.Router("/api/get-providers", &controllers.ApiController{}, "GET:GetProviders")
beego.Router("/api/get-provider", &controllers.ApiController{}, "GET:GetProvider")
beego.Router("/api/update-provider", &controllers.ApiController{}, "POST:UpdateProvider")
beego.Router("/api/add-provider", &controllers.ApiController{}, "POST:AddProvider")
beego.Router("/api/delete-provider", &controllers.ApiController{}, "POST:DeleteProvider")

beego.Router("/api/update-file", &controllers.ApiController{}, "POST:UpdateFile")
beego.Router("/api/add-file", &controllers.ApiController{}, "POST:AddFile")
beego.Router("/api/delete-file", &controllers.ApiController{}, "POST:DeleteFile")
Expand Down
13 changes: 13 additions & 0 deletions web/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import VectorsetListPage from "./VectorsetListPage";
import VectorsetEditPage from "./VectorsetEditPage";
import VideoListPage from "./VideoListPage";
import VideoEditPage from "./VideoEditPage";
import ProviderListPage from "./ProviderListPage";
import ProviderEditPage from "./ProviderEditPage";
import SigninPage from "./SigninPage";
import i18next from "i18next";
import LanguageSelect from "./LanguageSelect";
Expand Down Expand Up @@ -70,6 +72,8 @@ class App extends Component {
this.setState({selectedMenuKey: "/vectorsets"});
} else if (uri.includes("/videos")) {
this.setState({selectedMenuKey: "/videos"});
} else if (uri.includes("/providers")) {
this.setState({selectedMenuKey: "/providers"});
} else {
this.setState({selectedMenuKey: "null"});
}
Expand Down Expand Up @@ -289,6 +293,13 @@ class App extends Component {
</Link>
</Menu.Item>
);
res.push(
<Menu.Item key="/providers">
<Link to="/providers">
{i18next.t("general:Providers")}
</Link>
</Menu.Item>
);

if (Setting.isLocalAdminUser(this.state.account)) {
res.push(
Expand Down Expand Up @@ -363,6 +374,8 @@ class App extends Component {
<Route exact path="/vectorsets/:vectorsetName" render={(props) => this.renderSigninIfNotSignedIn(<VectorsetEditPage account={this.state.account} {...props} />)} />
<Route exact path="/videos" render={(props) => this.renderSigninIfNotSignedIn(<VideoListPage account={this.state.account} {...props} />)} />
<Route exact path="/videos/:videoName" render={(props) => this.renderSigninIfNotSignedIn(<VideoEditPage account={this.state.account} {...props} />)} />
<Route exact path="/providers" render={(props) => this.renderSigninIfNotSignedIn(<ProviderListPage account={this.state.account} {...props} />)} />
<Route exact path="/providers/:providerName" render={(props) => this.renderSigninIfNotSignedIn(<ProviderEditPage account={this.state.account} {...props} />)} />
</Switch>
</div>
);
Expand Down

0 comments on commit ac76b1f

Please sign in to comment.