diff --git a/controllers/auth.go b/controllers/auth.go index ac699f49..9e072a05 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -307,7 +307,7 @@ func (c *ApiController) Login() { } organization := object.GetOrganization(fmt.Sprintf("%s/%s", "admin", application.Organization)) - provider := object.GetProvider(util.GetId(form.Provider)) + provider := object.GetProvider(util.GetId("admin", form.Provider)) providerItem := application.GetProviderItem(provider.Name) if !providerItem.IsProviderVisible() { c.ResponseError(fmt.Sprintf(c.T("ProviderErr.ProviderNotEnabled"), provider.Name)) diff --git a/controllers/resource.go b/controllers/resource.go index 9f4bae0b..1940b713 100644 --- a/controllers/resource.go +++ b/controllers/resource.go @@ -156,7 +156,7 @@ func (c *ApiController) UploadResource() { return } - provider, user, ok := c.GetProviderFromContext("Storage") + provider, _, ok := c.GetProviderFromContext("Storage") if !ok { return } @@ -202,12 +202,10 @@ func (c *ApiController) UploadResource() { switch tag { case "avatar": + user := object.GetUserNoCheck(util.GetId(owner, username)) if user == nil { - user = object.GetUserNoCheck(username) - if user == nil { - c.ResponseError(c.T("ResourceErr.UserIsNil")) - return - } + c.ResponseError(c.T("ResourceErr.UserIsNil")) + return } user.Avatar = fileUrl diff --git a/controllers/service.go b/controllers/service.go index a58edf4d..1432d40c 100644 --- a/controllers/service.go +++ b/controllers/service.go @@ -60,7 +60,7 @@ func (c *ApiController) SendEmail() { var provider *object.Provider if emailForm.Provider != "" { // called by frontend's TestEmailWidget, provider name is set by frontend - provider = object.GetProvider(util.GetId(emailForm.Provider)) + provider = object.GetProvider(util.GetId("admin", emailForm.Provider)) } else { // called by Casdoor SDK via Client ID & Client Secret, so the used Email provider will be the application' Email provider or the default Email provider var ok bool diff --git a/controllers/util.go b/controllers/util.go index e2333405..2f9a3c40 100644 --- a/controllers/util.go +++ b/controllers/util.go @@ -126,7 +126,7 @@ func getInitScore() (int, error) { func (c *ApiController) GetProviderFromContext(category string) (*object.Provider, *object.User, bool) { providerName := c.Input().Get("provider") if providerName != "" { - provider := object.GetProvider(util.GetId(providerName)) + provider := object.GetProvider(util.GetId("admin", providerName)) if provider == nil { c.ResponseError(c.T("ProviderErr.ProviderNotFound"), providerName) return nil, nil, false diff --git a/deployment/deploy_test.go b/deployment/deploy_test.go index 7d76c5a1..dff62b79 100644 --- a/deployment/deploy_test.go +++ b/deployment/deploy_test.go @@ -25,6 +25,6 @@ import ( ) func TestDeployStaticFiles(t *testing.T) { - provider := object.GetProvider(util.GetId("provider_storage_aliyun_oss")) + provider := object.GetProvider(util.GetId("admin", "provider_storage_aliyun_oss")) deployStaticFiles(provider) } diff --git a/object/init.go b/object/init.go index f5f2964f..ad9c76ef 100644 --- a/object/init.go +++ b/object/init.go @@ -222,7 +222,7 @@ func initBuiltInLdap() { } func initBuiltInProvider() { - provider := GetProvider(util.GetId("provider_captcha_default")) + provider := GetProvider(util.GetId("admin", "provider_captcha_default")) if provider != nil { return } diff --git a/object/init_data.go b/object/init_data.go index 323dbc6e..e4bdf368 100644 --- a/object/init_data.go +++ b/object/init_data.go @@ -168,7 +168,7 @@ func initDefinedLdap(ldap *Ldap) { } func initDefinedProvider(provider *Provider) { - existed := GetProvider(util.GetId(provider.Name)) + existed := GetProvider(util.GetId("admin", provider.Name)) if existed != nil { return } diff --git a/object/token.go b/object/token.go index 0bfb5773..e1bf6e42 100644 --- a/object/token.go +++ b/object/token.go @@ -678,7 +678,7 @@ func GetWechatMiniProgramToken(application *Application, code string, host strin ErrorDescription: "the application does not support wechat mini program", } } - provider := GetProvider(util.GetId(mpProvider.Name)) + provider := GetProvider(util.GetId("admin", mpProvider.Name)) mpIdp := idp.NewWeChatMiniProgramIdProvider(provider.ClientId, provider.ClientSecret) session, err := mpIdp.GetSessionByCode(code) if err != nil { diff --git a/util/string.go b/util/string.go index e2735162..9bf7d79f 100644 --- a/util/string.go +++ b/util/string.go @@ -123,8 +123,8 @@ func GenerateSimpleTimeId() string { return t } -func GetId(name string) string { - return fmt.Sprintf("admin/%s", name) +func GetId(owner, name string) string { + return fmt.Sprintf("%s/%s", owner, name) } func GetMd5Hash(text string) string { diff --git a/util/string_test.go b/util/string_test.go index 143d6fc9..0bd75c66 100644 --- a/util/string_test.go +++ b/util/string_test.go @@ -137,16 +137,16 @@ func TestGenerateId(t *testing.T) { func TestGetId(t *testing.T) { scenarios := []struct { description string - input string + input []string expected interface{} }{ - {"Scenery one", "casdoor", "admin/casdoor"}, - {"Scenery two", "casbin", "admin/casbin"}, - {"Scenery three", "lorem ipsum", "admin/lorem ipsum"}, + {"Scenery one", []string{"admin", "casdoor"}, "admin/casdoor"}, + {"Scenery two", []string{"admin", "casbin"}, "admin/casbin"}, + {"Scenery three", []string{"test", "lorem ipsum"}, "test/lorem ipsum"}, } for _, scenery := range scenarios { t.Run(scenery.description, func(t *testing.T) { - actual := GetId(scenery.input) + actual := GetId(scenery.input[0], scenery.input[1]) assert.Equal(t, scenery.expected, actual, "This not is a valid MD5") }) } diff --git a/web/src/CropperDiv.js b/web/src/CropperDiv.js index 6013d7bb..4165f6c2 100644 --- a/web/src/CropperDiv.js +++ b/web/src/CropperDiv.js @@ -30,6 +30,7 @@ export const CropperDiv = (props) => { const {title} = props; const {user} = props; const {buttonText} = props; + const {organization} = props; let uploadButton; const onChange = (e) => { @@ -92,9 +93,8 @@ export const CropperDiv = (props) => { const getOptions = (data) => { const options = []; - if (props.account.organization.defaultAvatar !== null) { - options.push({value: props.account.organization.defaultAvatar}); - } + options.push({value: organization?.defaultAvatar}); + for (let i = 0; i < data.length; i++) { if (data[i].fileType === "image") { const url = `${data[i].url}`; @@ -125,7 +125,7 @@ export const CropperDiv = (props) => { useEffect(() => { setLoading(true); - ResourceBackend.getResources(props.account.owner, props.account.name, "", "", "", "", "", "") + ResourceBackend.getResources(user.owner, user.name, "", "", "", "", "", "") .then((res) => { setLoading(false); setOptions(getOptions(res)); diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js index fad6a7cd..b6af1070 100644 --- a/web/src/UserEditPage.js +++ b/web/src/UserEditPage.js @@ -242,7 +242,7 @@ class UserEditPage extends React.Component { - + organization.name === this.state.organizationName)} />