From 6a218f8258e81002b913e8040f059575410ca00c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 31 Jul 2023 00:09:13 +0800 Subject: [PATCH] Add getStorageProviders() --- casdoor/provider.go | 73 +++++++++++++++++++++++ controllers/storage_provider.go | 29 +++++++++ routers/router.go | 2 + web/src/StoreEditPage.js | 24 ++++++-- web/src/backend/StorageProviderBackend.js | 22 +++++++ 5 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 casdoor/provider.go create mode 100644 controllers/storage_provider.go create mode 100644 web/src/backend/StorageProviderBackend.js diff --git a/casdoor/provider.go b/casdoor/provider.go new file mode 100644 index 0000000..1f42c14 --- /dev/null +++ b/casdoor/provider.go @@ -0,0 +1,73 @@ +// Copyright 2023 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package casdoor + +type Provider struct { + Owner string `xorm:"varchar(100) notnull pk" json:"owner"` + Name string `xorm:"varchar(100) notnull pk unique" 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"` + SubType string `xorm:"varchar(100)" json:"subType"` + Method string `xorm:"varchar(100)" json:"method"` + ClientId string `xorm:"varchar(100)" json:"clientId"` + ClientSecret string `xorm:"varchar(2000)" json:"clientSecret"` + ClientId2 string `xorm:"varchar(100)" json:"clientId2"` + ClientSecret2 string `xorm:"varchar(100)" json:"clientSecret2"` + Cert string `xorm:"varchar(100)" json:"cert"` + CustomAuthUrl string `xorm:"varchar(200)" json:"customAuthUrl"` + CustomTokenUrl string `xorm:"varchar(200)" json:"customTokenUrl"` + CustomUserInfoUrl string `xorm:"varchar(200)" json:"customUserInfoUrl"` + CustomLogo string `xorm:"varchar(200)" json:"customLogo"` + Scopes string `xorm:"varchar(100)" json:"scopes"` + UserMapping map[string]string `xorm:"varchar(500)" json:"userMapping"` + + Host string `xorm:"varchar(100)" json:"host"` + Port int `json:"port"` + DisableSsl bool `json:"disableSsl"` // If the provider type is WeChat, DisableSsl means EnableQRCode + Title string `xorm:"varchar(100)" json:"title"` + Content string `xorm:"varchar(1000)" json:"content"` // If provider type is WeChat, Content means QRCode string by Base64 encoding + Receiver string `xorm:"varchar(100)" json:"receiver"` + + RegionId string `xorm:"varchar(100)" json:"regionId"` + SignName string `xorm:"varchar(100)" json:"signName"` + TemplateCode string `xorm:"varchar(100)" json:"templateCode"` + AppId string `xorm:"varchar(100)" json:"appId"` + + Endpoint string `xorm:"varchar(1000)" json:"endpoint"` + IntranetEndpoint string `xorm:"varchar(100)" json:"intranetEndpoint"` + Domain string `xorm:"varchar(100)" json:"domain"` + Bucket string `xorm:"varchar(100)" json:"bucket"` + PathPrefix string `xorm:"varchar(100)" json:"pathPrefix"` + + Metadata string `xorm:"mediumtext" json:"metadata"` + IdP string `xorm:"mediumtext" json:"idP"` + IssuerUrl string `xorm:"varchar(100)" json:"issuerUrl"` + EnableSignAuthnRequest bool `json:"enableSignAuthnRequest"` + + ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"` +} + +func GetStorageProviders(owner string) ([]*Provider, error) { + providers := []*Provider{} + err := adapter.Engine.Desc("created_time").Find(&providers, &Provider{Owner: owner, Category: "Storage"}) + if err != nil { + return providers, err + } + + return providers, nil +} diff --git a/controllers/storage_provider.go b/controllers/storage_provider.go new file mode 100644 index 0000000..506cad6 --- /dev/null +++ b/controllers/storage_provider.go @@ -0,0 +1,29 @@ +// Copyright 2023 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package controllers + +import "github.com/casbin/casibase/casdoor" + +func (c *ApiController) GetStorageProviders() { + owner := c.Input().Get("owner") + + providers, err := casdoor.GetStorageProviders(owner) + if err != nil { + c.ResponseError(err.Error()) + return + } + + c.ResponseOk(providers) +} diff --git a/routers/router.go b/routers/router.go index 0e14aa2..6fef52f 100644 --- a/routers/router.go +++ b/routers/router.go @@ -66,6 +66,8 @@ func initAPI() { beego.Router("/api/add-store", &controllers.ApiController{}, "POST:AddStore") beego.Router("/api/delete-store", &controllers.ApiController{}, "POST:DeleteStore") + beego.Router("/api/get-storage-providers", &controllers.ApiController{}, "GET:GetStorageProviders") + 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") diff --git a/web/src/StoreEditPage.js b/web/src/StoreEditPage.js index 6da947d..f14ca34 100644 --- a/web/src/StoreEditPage.js +++ b/web/src/StoreEditPage.js @@ -13,8 +13,9 @@ // limitations under the License. import React from "react"; -import {Button, Card, Col, Input, Row} from "antd"; +import {Button, Card, Col, Input, Row, Select} from "antd"; import * as StoreBackend from "./backend/StoreBackend"; +import * as StorageProviderBackend from "./backend/StorageProviderBackend"; import * as Setting from "./Setting"; import i18next from "i18next"; import FileTree from "./FileTree"; @@ -26,12 +27,14 @@ class StoreEditPage extends React.Component { classes: props, owner: props.match.params.owner, storeName: props.match.params.storeName, + storageProviders: [], store: null, }; } UNSAFE_componentWillMount() { this.getStore(); + this.getStorageProviders(); } getStore() { @@ -51,6 +54,19 @@ class StoreEditPage extends React.Component { }); } + getStorageProviders() { + StorageProviderBackend.getStorageProviders(this.props.account.name) + .then((res) => { + if (res.status === "ok") { + this.setState({ + storageProviders: res.data, + }); + } else { + Setting.showMessage("error", `Failed to get storage providers: ${res.msg}`); + } + }); + } + parseStoreField(key, value) { if (["score"].includes(key)) { value = Setting.myParseInt(value); @@ -101,9 +117,9 @@ class StoreEditPage extends React.Component { {i18next.t("store:Storage provider")}: - { - this.updateStoreField("storageProvider", e.target.value); - }} /> +