Categorygithub.com/imulab/go-scim/pkg/v2
module
2.2.0
Repository: https://github.com/imulab/go-scim.git
Documentation: pkg.go.dev

# README

SCIM

GoDoc

This module implements features described in RFC 7643 - SCIM: Core Schema and RFC 7644 - SCIM: Protocol, along with custom features that address specific implementation difficulties.

The goal of this package is to provide extensible, maintainable and easy-to-use building blocks for implementing a SCIM service with relatively good performance.

It is not the goal of this package to enable every possible use case, or to provide an out-of-box SCIM service.

This module evolved from v1 of github.com/imulab/go-scim.

We had since learnt couple lessons (issue 11 and 39) from this initial implementation and had decided to pursue a completely different design. Due to the drastic difference between the two major versions, we decided to stop maintaining v1 and devote limited resources and future efforts on maintaining v2.

We apologize for any inconvenience caused by this decision. The original v1 can still be checked out via tags.

:bulb: Usage

To get this package:

# make sure Go 1.13
go get github.com/imulab/go-scim/pkg/v2

:gift: Features in v2

  • :free: Reflection free operations on resources
  • :mailbox_with_mail: Property subscribers
  • :rocket: Direct serialization and deserialization in JSON and other data exchange formats
  • :wrench: Enhanced attributes model to allow for custom metadata
  • :thumbsup: Robust SCIM path and filter parsing
  • :fast_forward: Resource filters to allow for custom resource processing

:file_folder: Project Structure

Features in this module are separated into different directories:

  • spec directory implements the foundation of SCIM resource type definition
  • prop directory implements Property which holds pieces of resource data
  • json directory implements direct serialization and deserialization between SCIM resource and its JSON format
  • crud directory implements parsing and evaluation capabilities for SCIM path and SCIM filters
  • db directory introduces a standard DB interface and a in-memory implementation
  • annotation directory documents internally used attribute annotations and their purpose
  • groupsync directory implements utilities to synchronize change in Group.members with User.groups
  • service directory implements CRUD services that carry out most of the protocol work
  • handlerutil directory implements utilities that help parsing and rendering HTTP, assuming Go's HTTP abstraction

For detailed documentation, please check out README of individual directories, or GoDoc.

:bullettrain_side: Road Map

After delivering the v2.0.0 which will cover most features, efforts will be directed toward:

  • ResourceType(s) and Schema(s) endpoints (see issue 40)
  • Root query
  • Bulk operations
  • SCIM password management extension
  • SCIM soft delete extension

# Packages

This package describes the internally used annotations.
This package implements modification and evaluation of Resource.
This package defines the database provider interface, and provides a simple in-memory implementation.
This package serves as a frontend of custom structures that are mappable to SCIM schemas.
This package provides utility to deal with the group synchronization issue.
This package implements helper functions to parse service requests and render service responses.
This package implements direct JSON serializing and de-serializing for Property and Resource.
This package contains SCIM property definitions and its respective implementations defined in the SCIM specification.
This package implements most commonly used endpoint logic in RFC7644.
This package implements the founding blocks for defining SCIM resource types, and basic error types.