Compare commits

..

1 commit

Author SHA1 Message Date
cfd5f47698
first try 2022-01-20 17:59:46 +01:00
6 changed files with 182 additions and 0 deletions

15
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,15 @@
{
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.
// Pointez pour afficher la description des attributs existants.
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/cmd/liiibre-sp/main.go"
}
]
}

102
cmd/liiibre-sp/main.go Normal file
View file

@ -0,0 +1,102 @@
package main
import (
"errors"
"fmt"
"log"
"math/rand"
"net/http"
"time"
"github.com/elimity-com/scim"
"github.com/elimity-com/scim/optional"
"github.com/elimity-com/scim/schema"
)
type testResourceHandler struct {
}
func main() {
config := scim.ServiceProviderConfig{
DocumentationURI: optional.NewString("localhost:8282"),
}
// schema := schema.Schema{
// ID: schema.UserSchema,
// Name: optional.NewString("User"),
// Description: optional.NewString("User Account"),
// Attributes: []schema.CoreAttribute{
// schema.SimpleCoreAttribute(schema.SimpleStringParams(schema.StringParams{
// Name: "userName",
// Required: true,
// Uniqueness: schema.AttributeUniquenessServer(),
// })),
// },
// }
resourceTypes := []scim.ResourceType{
{
ID: optional.NewString("User"),
Name: "User",
Endpoint: "/Users",
Description: optional.NewString("User Account"),
Schema: schema.CoreUserSchema(),
Handler: testResourceHandler{},
},
{
ID: optional.NewString("Group"),
Name: "Group",
Endpoint: "/Groups",
Description: optional.NewString("Group"),
Schema: schema.CoreGroupSchema(),
Handler: testResourceHandler{},
},
}
server := scim.Server{
Config: config,
ResourceTypes: resourceTypes,
}
http.Handle("/", server)
log.Fatal(http.ListenAndServe(":8282", nil))
}
func (h testResourceHandler) Create(r *http.Request, attributes scim.ResourceAttributes) (scim.Resource, error) {
rand.Seed(time.Now().UnixNano())
id := fmt.Sprintf("%04d", rand.Intn(9999))
// now := time.Now()
return scim.Resource{
ID: id,
ExternalID: optional.NewString(attributes["externalId"].(string)),
Attributes: attributes,
Meta: scim.Meta{
// Created: &now,
// LastModified: &now,
Version: fmt.Sprintf("v%s", id),
},
}, nil
}
func (h testResourceHandler) Get(r *http.Request, id string) (scim.Resource, error) {
return scim.Resource{}, errors.New("not implemented")
}
func (h testResourceHandler) GetAll(r *http.Request, params scim.ListRequestParams) (scim.Page, error) {
return scim.Page{}, errors.New("not implemented")
}
func (h testResourceHandler) Replace(r *http.Request, id string, attributes scim.ResourceAttributes) (scim.Resource, error) {
return scim.Resource{}, errors.New("not implemented")
}
func (h testResourceHandler) Delete(r *http.Request, id string) error {
return errors.New("not implemented")
}
func (h testResourceHandler) Patch(r *http.Request, id string, operations []scim.PatchOperation) (scim.Resource, error) {
return scim.Resource{}, errors.New("not implemented")
}

29
docker-compose.yml Normal file
View file

@ -0,0 +1,29 @@
version: "3"
services:
postgres:
image: postgres
volumes:
- db:/var/lib/postgresql/data
environment:
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: keycloak
keycloak:
build:
context: keycloak
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_SCHEMA: public
DB_PASSWORD: keycloak
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
ports:
- 8080:8080
depends_on:
- postgres
volumes:
db:

13
go.mod Normal file
View file

@ -0,0 +1,13 @@
module lab.libreho.st/libre.sh/scim
go 1.17
require github.com/elimity-com/scim v0.0.0-20211119105057-007f1a2691f0
require (
github.com/di-wu/parser v0.2.2 // indirect
github.com/di-wu/xsd-datetime v1.0.0 // indirect
github.com/scim2/filter-parser/v2 v2.2.0 // indirect
)
// replace github.com/elimity-com/scim => /home/hougo/git/hrenard/scim

8
go.sum Normal file
View file

@ -0,0 +1,8 @@
github.com/di-wu/parser v0.2.2 h1:I9oHJ8spBXOeL7Wps0ffkFFFiXJf/pk7NX9lcAMqRMU=
github.com/di-wu/parser v0.2.2/go.mod h1:SLp58pW6WamdmznrVRrw2NTyn4wAvT9rrEFynKX7nYo=
github.com/di-wu/xsd-datetime v1.0.0 h1:vZoGNkbzpBNoc+JyfVLEbutNDNydYV8XwHeV7eUJoxI=
github.com/di-wu/xsd-datetime v1.0.0/go.mod h1:i3iEhrP3WchwseOBeIdW/zxeoleXTOzx1WyDXgdmOww=
github.com/elimity-com/scim v0.0.0-20211119105057-007f1a2691f0 h1:/26/OeOlwid0okzLB3ZN0p/wgzxOmQhGnH0VYPhRBVU=
github.com/elimity-com/scim v0.0.0-20211119105057-007f1a2691f0/go.mod h1:JkjcmqbLW+khwt2fmBPJFBhx2zGZ8XobRZ+O0VhlwWo=
github.com/scim2/filter-parser/v2 v2.2.0 h1:QGadEcsmypxg8gYChRSM2j1edLyE/2j72j+hdmI4BJM=
github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcyHHj+X+je9ce5JA=

15
keycloak/Dockerfile Normal file
View file

@ -0,0 +1,15 @@
FROM maven:3-openjdk-11 as base
# RUN apt-get update && apt-get install -y git maven
RUN git clone https://github.com/suvera/keycloak-scim2-storage.git
WORKDIR /keycloak-scim2-storage
RUN mvn clean install
FROM docker.io/jboss/keycloak:16.1.0
COPY --from=base /keycloak-scim2-storage/target/suvera-keycloak-scim2-outbound-provisioning-jar-with-dependencies.jar /opt/jboss/keycloak/standalone/deployments/
# RUN curl https://github.com/Captain-P-Goldfish/scim-for-keycloak/releases/download/kc-16-b2/scim-for-keycloak-kc-16-b2.ear -o /opt/jboss/keycloak/standalone/deployments/scim-for-keycloak-kc-16-b2.ear