SCIM provisioning API basic implementation#17144
Conversation
ea6a6d6 to
dd52360
Compare
|
(I've taken this out of the review queue as its in draft, let us know if you want feedback) |
|
Hi @erikjohnston There is one design question though. I see that there is a dependency to pydantic in synapse, and I recently published scim2-models that is a library that helps to parse and serialize SCIM2 payloads using pydantic. I think the SCIM implementation would greatly benefit from using scim2-models, as a big part of the specification compliance would be delegated to the library. Would it be acceptable to add a dependency towards scim2-models in synapse, or should I continue checking and building SCIM2 payloads manually? |
f893967 to
81d751b
Compare
dcd72ed to
6a1e1b2
Compare
|
Hi @erikjohnston |
Implementation of a subset of SCIM endpoint and capabilities as described in MSC4098. Signed-off-by: Éloi Rivard <eloi@yaal.coop>
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
|
@reivilibre I think all your comments have been addressed now. Most of them have been fixed in the code and I responded to some with new questions. I am sorry for the many commits, the PR looks like a mess. If it is easier for the review, I can close it and open a new one. Let me know. |
reivilibre
left a comment
There was a problem hiding this comment.
this is looking generally good, but a few comments (and some still open from last time).
The CI is also unhappy but hopefully that's nothing too difficult?
| ``` | ||
| DELETE /_matrix/client/unstable/coop.yaal/scim/Users/@bjensen:test | ||
| ``` | ||
|
|
There was a problem hiding this comment.
I don't think this was noted on the documentation?
| return env | ||
|
|
||
|
|
||
| def mxc_to_http( |
There was a problem hiding this comment.
I suspect this is no longer functional, given authenticated media means you can't just hotlink to media like this anymore.
|
@reivilibre The I think everything should be solved except the |
|
Hey @azmeuk Thanks for the update. Unfortunately, we won't be able to continue work on this PR at this time for a couple of reasons:
Thanks very much for taking the time to develop this PR and get it to this stage - I just want to acknowledge this isn't an ideal situation to come to this conclusion at this stage and really appreciate the effort you've put in! |
|
To clarify (speaking as element ceo/cto), there are three considerations here:
So, my recommendation here would be to maintain this out-of-tree, either in Synapse (given that's where the work has happened already), or as a third-party Synapse module, or even better to do it on MAS (although I can't guarantee that we'd have bandwidth to accept it there either. plus I guess MAS being in Rust might be an obstacle). I can only apologise that we (I) didn't spot this back in May 2024 and warn that this might not be a feature we'd be able to merge. |
|
Hi. I'll see how much work it would ask to maintain this out of synapse, but I fear this would double the maintenance burden. I might tackle the implementation on MAS some day, but certainly not anytime soon. I would not benevolently contributing to a proprietary feature though, and on the other hand I understand that you would not be interested in paying for a feature you did not even ask in the first place. So for this to happen, this should probably be funded by someone else. |
This is an implementation of MSC4098. It implements a subset of the SCIM provisioning protocol defined in RFC7643 and RFC7644.
It contains:
synapse/rest/admin/users.py.The SCIM requires needs python 3.9+ (because of the use of typing.Anotated in scim2-models) and pydantic 2.7.0+
SCIM implementation details
Only a subset of the SCIM endpoints are implemented:
What's implemented:
What is defined in the SCIM specs but not implemented here:
What do you think?
Pull Request Checklist
EventStoretoEventWorkerStore.".code blocks.(run the linters)