Browse Source

Rename bucket to storage provider

HEAD
Yang Luo 2 years ago
parent
commit
23a2de182f
9 changed files with 47 additions and 47 deletions
  1. +1
    -8
      casdoor/adapter.go
  2. +15
    -4
      casdoor/resource.go
  3. +5
    -5
      object/file.go
  4. +2
    -3
      object/store.go
  5. +3
    -3
      object/store_provider.go
  6. +9
    -7
      storage/storage.go
  7. +1
    -1
      storage/storage_test.go
  8. +3
    -14
      web/src/StoreEditPage.js
  9. +8
    -2
      web/src/StoreListPage.js

+ 1
- 8
casdoor/adapter.go View File

@@ -22,11 +22,7 @@ import (
"xorm.io/xorm"
)

var (
adapter *Adapter = nil
Organization string
Application string
)
var adapter *Adapter

type Session struct {
SessionKey string `xorm:"char(64) notnull pk"`
@@ -41,9 +37,6 @@ func InitCasdoorAdapter() {
}

adapter = NewAdapter(beego.AppConfig.String("driverName"), beego.AppConfig.String("dataSourceName"), beego.AppConfig.String("casdoorDbName"))

Organization = beego.AppConfig.String("casdoorOrganization")
Application = beego.AppConfig.String("casdoorApplication")
}

// Adapter represents the MySQL adapter for policy storage.


+ 15
- 4
casdoor/resource.go View File

@@ -15,15 +15,26 @@
package casdoor

import (
"fmt"

"github.com/astaxie/beego"
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
)

func ListResources(prefix string) ([]*casdoorsdk.Resource, error) {
res, err := casdoorsdk.GetResources("built-in", "admin", "", "", "", "")
func ListResources(provider string, prefix string) ([]*casdoorsdk.Resource, error) {
casdoorOrganization := beego.AppConfig.String("casdoorOrganization")
casdoorApplication := beego.AppConfig.String("casdoorApplication")
res, err := casdoorsdk.GetResources(casdoorOrganization, casdoorApplication, "provider", provider, "Casibase", "")
return res, err
}

func GetResource(key string) (*casdoorsdk.Resource, error) {
res, err := casdoorsdk.GetResourceEx("built-in", key)
func GetResource(provider string, key string) (*casdoorsdk.Resource, error) {
casdoorOrganization := beego.AppConfig.String("casdoorOrganization")
res, err := casdoorsdk.GetResourceEx(casdoorOrganization, key)

if provider != res.Provider {
panic(fmt.Errorf("the resource's provider expected to be: %s, but got: %s", provider, res.Provider))
}

return res, err
}

+ 5
- 5
object/file.go View File

@@ -49,7 +49,7 @@ func AddFile(storeId string, key string, isLeaf bool, filename string, file mult
}

bs := fileBuffer.Bytes()
err = storage.PutObject(store.Bucket, objectKey, fileBuffer)
err = storage.PutObject(store.StorageProvider, objectKey, fileBuffer)
if err != nil {
return false, nil, err
}
@@ -60,7 +60,7 @@ func AddFile(storeId string, key string, isLeaf bool, filename string, file mult
objectKey = strings.TrimLeft(objectKey, "/")
fileBuffer = bytes.NewBuffer(nil)
bs := fileBuffer.Bytes()
err = storage.PutObject(store.Bucket, objectKey, fileBuffer)
err = storage.PutObject(store.StorageProvider, objectKey, fileBuffer)
if err != nil {
return false, nil, err
}
@@ -79,18 +79,18 @@ func DeleteFile(storeId string, key string, isLeaf bool) (bool, error) {
}

if isLeaf {
err = storage.DeleteObject(store.Bucket, key)
err = storage.DeleteObject(store.StorageProvider, key)
if err != nil {
return false, err
}
} else {
objects, err := storage.ListObjects(store.Bucket, key)
objects, err := storage.ListObjects(store.StorageProvider, key)
if err != nil {
return false, err
}

for _, object := range objects {
err = storage.DeleteObject(store.Bucket, object.Key)
err = storage.DeleteObject(store.StorageProvider, object.Key)
if err != nil {
return false, err
}


+ 2
- 3
object/store.go View File

@@ -43,8 +43,7 @@ type Store struct {
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`

Bucket string `xorm:"varchar(100)" json:"bucket"`
Domain string `xorm:"varchar(100)" json:"domain"`
StorageProvider string `xorm:"varchar(100)" json:"storageProvider"`

FileTree *File `xorm:"mediumtext" json:"fileTree"`
PropertiesMap map[string]*Properties `xorm:"mediumtext" json:"propertiesMap"`
@@ -77,7 +76,7 @@ func GetDefaultStore(owner string) (*Store, error) {
}

for _, store := range stores {
if store.Domain != "https://cdn.example.com" {
if store.StorageProvider != "" {
return store, nil
}
}


+ 3
- 3
object/store_provider.go View File

@@ -80,7 +80,7 @@ func isObjectLeaf(object *storage.Object) bool {
}

func (store *Store) Populate() error {
objects, err := storage.ListObjects(store.Bucket, "")
objects, err := storage.ListObjects(store.StorageProvider, "")
if err != nil {
return err
}
@@ -123,7 +123,7 @@ func (store *Store) Populate() error {
}

func (store *Store) GetVideoData() ([]string, error) {
objects, err := storage.ListObjects(store.Bucket, "2023/视频附件")
objects, err := storage.ListObjects(store.StorageProvider, "2023/视频附件")
if err != nil {
return nil, err
}
@@ -134,7 +134,7 @@ func (store *Store) GetVideoData() ([]string, error) {
continue
}

url := fmt.Sprintf("%s/%s", store.Domain, object.Key)
url := fmt.Sprintf("%s/%s", store.StorageProvider, object.Key)
res = append(res, url)
}



+ 9
- 7
storage/storage.go View File

@@ -21,6 +21,7 @@ import (
"net/http"
"time"

"github.com/astaxie/beego"
"github.com/casbin/casibase/casdoor"
"github.com/casbin/casibase/util"
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
@@ -32,8 +33,8 @@ type Object struct {
Size int64
}

func ListObjects(bucketName string, prefix string) ([]*Object, error) {
resources, err := casdoor.ListResources(prefix)
func ListObjects(provider string, prefix string) ([]*Object, error) {
resources, err := casdoor.ListResources(provider, prefix)
if err != nil {
return nil, err
}
@@ -50,8 +51,8 @@ func ListObjects(bucketName string, prefix string) ([]*Object, error) {
return res, nil
}

func GetObject(bucketName string, key string) (io.ReadCloser, error) {
res, err := casdoor.GetResource(key)
func GetObject(provider string, key string) (io.ReadCloser, error) {
res, err := casdoor.GetResource(provider, key)
if err != nil {
return nil, err
}
@@ -64,7 +65,7 @@ func GetObject(bucketName string, key string) (io.ReadCloser, error) {
return response.Body, nil
}

func PutObject(bucketName string, key string, fileBuffer *bytes.Buffer) error {
func PutObject(provider string, key string, fileBuffer *bytes.Buffer) error {
_, _, err := casdoorsdk.UploadResource("Casibase", "Casibase", "Casibase",
fmt.Sprintf("/casibase/%s", key), fileBuffer.Bytes())
if err != nil {
@@ -73,8 +74,9 @@ func PutObject(bucketName string, key string, fileBuffer *bytes.Buffer) error {
return nil
}

func DeleteObject(bucketName string, key string) error {
_, err := casdoorsdk.DeleteResource(util.GetIdFromOwnerAndName("built-in", fmt.Sprintf("/casibase/%s", key)))
func DeleteObject(provider string, key string) error {
casdoorOrganization := beego.AppConfig.String("casdoorOrganization")
_, err := casdoorsdk.DeleteResource(util.GetIdFromOwnerAndName(casdoorOrganization, fmt.Sprintf("/casibase/%s", key)))
if err != nil {
return err
}


+ 1
- 1
storage/storage_test.go View File

@@ -30,7 +30,7 @@ func TestStorage(t *testing.T) {
object.InitConfig()
controllers.InitAuthConfig()

objects, err := storage.ListObjects("casibase", "")
objects, err := storage.ListObjects("provider_storage_casibase", "")
if err != nil {
panic(err)
}


+ 3
- 14
web/src/StoreEditPage.js View File

@@ -14,7 +14,6 @@
import React from "react";
import {Button, Card, Col, Input, Row} from "antd";
import {LinkOutlined} from "@ant-design/icons";
import * as StoreBackend from "./backend/StoreBackend";
import * as Setting from "./Setting";
import i18next from "i18next";
@@ -99,21 +98,11 @@ class StoreEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{i18next.t("store:Bucket")}:
{i18next.t("store:Storage provider")}:
</Col>
<Col span={22} >
<Input value={this.state.store.bucket} onChange={e => {
this.updateStoreField("bucket", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{i18next.t("store:Domain")}:
</Col>
<Col span={22} >
<Input prefix={<LinkOutlined />} value={this.state.store.domain} onChange={e => {
this.updateStoreField("domain", e.target.value);
<Input value={this.state.store.storageProvider} onChange={e => {
this.updateStoreField("storageProvider", e.target.value);
}} />
</Col>
</Row>


+ 8
- 2
web/src/StoreListPage.js View File

@@ -53,8 +53,7 @@ class StoreListPage extends React.Component {
name: `store_${randomName}`,
createdTime: moment().format(),
displayName: `New Store - ${randomName}`,
bucket: `bucket-${this.state.stores.length}`,
domain: "https://cdn.example.com",
storageProvider: "",
propertiesMap: {},
};
}
@@ -117,6 +116,13 @@ class StoreListPage extends React.Component {
// width: "600px",
sorter: (a, b) => a.displayName.localeCompare(b.displayName),
},
{
title: i18next.t("store:Storage provider"),
dataIndex: "storageProvider",
key: "storageProvider",
width: "250px",
sorter: (a, b) => a.storageProvider.localeCompare(b.storageProvider),
},
{
title: i18next.t("general:Action"),
dataIndex: "action",


Loading…
Cancel
Save