mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-22 18:25:47 +08:00
155 lines
4.3 KiB
Go
155 lines
4.3 KiB
Go
![]() |
// Copyright 2023 The Casdoor 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 scim
|
||
|
|
||
|
import (
|
||
|
"github.com/elimity-com/scim"
|
||
|
"github.com/elimity-com/scim/optional"
|
||
|
"github.com/elimity-com/scim/schema"
|
||
|
)
|
||
|
|
||
|
/*
|
||
|
Example JSON user resource
|
||
|
{
|
||
|
"schemas": [
|
||
|
"urn:ietf:params:scim:schemas:core:2.0:User",
|
||
|
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
|
||
|
],
|
||
|
"addresses": [
|
||
|
{
|
||
|
"country": "US",
|
||
|
"locality": "San Fransisco",
|
||
|
"region": "US West"
|
||
|
}
|
||
|
],
|
||
|
"displayName": "Hello, Scim",
|
||
|
"name": {
|
||
|
"familyName": "Bob",
|
||
|
"givenName": "Alice"
|
||
|
},
|
||
|
"phoneNumbers": [
|
||
|
{
|
||
|
"value": "46407568879"
|
||
|
}
|
||
|
],
|
||
|
"photos": [
|
||
|
{
|
||
|
"value": "https://cdn.casbin.org/img/casbin.svg"
|
||
|
}
|
||
|
],
|
||
|
"emails": [
|
||
|
{
|
||
|
"value": "cbvdho@example.com"
|
||
|
}
|
||
|
],
|
||
|
"profileUrl": "https://door.casdoor.com/users/build-in/scim_test_user2",
|
||
|
"userName": "scim_test_user2",
|
||
|
"userType": "normal-user",
|
||
|
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
|
||
|
"organization": "built-in"
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
const (
|
||
|
UserExtensionKey = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
UserStringField = []schema.SimpleParams{
|
||
|
newStringParams("externalId", false, true),
|
||
|
newStringParams("userName", true, true),
|
||
|
newStringParams("password", false, false),
|
||
|
newStringParams("displayName", false, false),
|
||
|
newStringParams("profileUrl", false, false),
|
||
|
newStringParams("userType", false, false),
|
||
|
}
|
||
|
UserComplexField = []schema.ComplexParams{
|
||
|
newComplexParams("name", false, false, []schema.SimpleParams{
|
||
|
newStringParams("givenName", false, false),
|
||
|
newStringParams("familyName", false, false),
|
||
|
}),
|
||
|
newComplexParams("emails", false, true, []schema.SimpleParams{
|
||
|
newStringParams("value", true, false),
|
||
|
}),
|
||
|
newComplexParams("phoneNumbers", false, true, []schema.SimpleParams{
|
||
|
newStringParams("value", true, false),
|
||
|
}),
|
||
|
newComplexParams("photos", false, true, []schema.SimpleParams{
|
||
|
newStringParams("value", true, false),
|
||
|
}),
|
||
|
newComplexParams("addresses", false, true, []schema.SimpleParams{
|
||
|
newStringParams("locality", false, false),
|
||
|
newStringParams("region", false, false),
|
||
|
newStringParams("country", false, false),
|
||
|
}),
|
||
|
}
|
||
|
Server = GetScimServer()
|
||
|
)
|
||
|
|
||
|
func GetScimServer() scim.Server {
|
||
|
config := scim.ServiceProviderConfig{
|
||
|
// DocumentationURI: optional.NewString("www.example.com/scim"),
|
||
|
SupportPatch: true,
|
||
|
}
|
||
|
|
||
|
codeAttrs := make([]schema.CoreAttribute, 0, len(UserStringField)+len(UserComplexField))
|
||
|
for _, field := range UserStringField {
|
||
|
codeAttrs = append(codeAttrs, schema.SimpleCoreAttribute(field))
|
||
|
}
|
||
|
for _, field := range UserComplexField {
|
||
|
codeAttrs = append(codeAttrs, schema.ComplexCoreAttribute(field))
|
||
|
}
|
||
|
|
||
|
userSchema := schema.Schema{
|
||
|
ID: schema.UserSchema,
|
||
|
Name: optional.NewString("User"),
|
||
|
Description: optional.NewString("User Account"),
|
||
|
Attributes: codeAttrs,
|
||
|
}
|
||
|
|
||
|
extension := schema.Schema{
|
||
|
ID: UserExtensionKey,
|
||
|
Name: optional.NewString("EnterpriseUser"),
|
||
|
Description: optional.NewString("Enterprise User"),
|
||
|
Attributes: []schema.CoreAttribute{
|
||
|
schema.SimpleCoreAttribute(schema.SimpleStringParams(schema.StringParams{
|
||
|
Name: "organization",
|
||
|
Required: true,
|
||
|
})),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
resourceTypes := []scim.ResourceType{
|
||
|
{
|
||
|
ID: optional.NewString("User"),
|
||
|
Name: "User",
|
||
|
Endpoint: "/Users",
|
||
|
Description: optional.NewString("User Account in Casdoor"),
|
||
|
Schema: userSchema,
|
||
|
SchemaExtensions: []scim.SchemaExtension{
|
||
|
{Schema: extension},
|
||
|
},
|
||
|
Handler: UserResourceHandler{},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
server := scim.Server{
|
||
|
Config: config,
|
||
|
ResourceTypes: resourceTypes,
|
||
|
}
|
||
|
return server
|
||
|
}
|