Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API for managing Teams and Users #261

Open
Tracked by #309
joshuafernandes opened this issue Sep 15, 2021 · 12 comments
Open
Tracked by #309

API for managing Teams and Users #261

joshuafernandes opened this issue Sep 15, 2021 · 12 comments
Assignees
Labels
docker_hub Improvements or additions to Docker Hub

Comments

@joshuafernandes
Copy link

joshuafernandes commented Sep 15, 2021

Tell us about your request
Our organisation (& others I imagine ) would like to keep with the new subscription plans, however managing users for any of the lower tiers is going to be a nightmare if its is add/remove one by one.

Another option might be to enable SAML for the Team plan? Our org does not require any of the features of the Business plan but would be nice to have some way to programmatically add users upto 250 users.

Which service(s) is this request for?
Docker for Desktop

Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?
Managing 250 user licenses is not going to be a pleasant experience and would be nice to have a programatic API to do this. SAML is great but the price for a Business user cannot really be justified.

Are you currently working around the issue?
None available

@joshuafernandes joshuafernandes added the community_new New idea raised by a community contributor label Sep 15, 2021
@nebuk89 nebuk89 added the docker_hub Improvements or additions to Docker Hub label Sep 24, 2021
@project0
Copy link

project0 commented Nov 30, 2021

I feel with you, no API, no SSO auth. How docker thinks they can justify forcing people to buy subscription if they do not even provider proper tooling to manage users....

@faradayfan
Copy link

I agree. This capability is sorely needed.

@carnei-ro
Copy link

Another comment to endorse the need for this feature.

@jeremyhager
Copy link

There seems to be public API endpoints for this. I found this by adding myself and removing myself from my org, using + for an additional email, eg. user+test@example.com, then running dev tools in chrome.

I'm not sure if this is publicly documented anywhere, so these endpoints could change easily. The only thing I found so far is this: https://docs.docker.com/docker-hub/api/latest/. The naming seems pretty consistent, but since I used my dev tools vs. documentation I wouldn't expect these to last forever.

Here's what I've found:

Add users:

Method: POST
https://hub.docker.com/v2/orgs/{orgName}/groups/{groupName}/members which accepts '{"member": "{email}"}' as the payload.

Get invitees here:

Method: GET
https://hub.docker.com/v2/orgs/{orgName}/invitees/

Resend invite

Method POST
https://hub.docker.com/v2/orgs/{orgName}/invitees/?email={email@example.com}

Delete invitees:

Method: DELETE
https://hub.docker.com/v2/orgs/{orgName}/invitees/?email={email}

Delete users:

Method: DELETE
Note: Both methods remove a user from an organization

Via group member endpoint

https://hub.docker.com/v2/orgs/{orgName}/groups/{groupName}/members/{dockerUserName}/

Via org member endpoint

https://hub.docker.com/v2/orgs/{orgName}/members/{dockerUserName}/

Example setup:

!#/bin/bash
UNAME=""
UPASS=""
ORG=""
DefaultGroup=""
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)

json='{"member": "'$userEmail'"}'
curl -X POST -d "$json" -H 'Content-Type: application/json' -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/orgs/$ORG/groups/$DefaultGroup/members/

special thanks: https://gist.github.com/kizbitz/175be06d0fbbb39bc9bfa6c0cb0d4721

Note:

Some of these must of course be url-encoded, so https://hub.docker.com/v2/orgs/{orgName}/{groupName}/invitees/?email=email@example.com wouldn't work, but https://hub.docker.com/v2/orgs/{orgName}/{groupName}/invitees/?email=email%40example.com should

@nunocoracao nunocoracao self-assigned this Jun 29, 2022
@nunocoracao nunocoracao removed the community_new New idea raised by a community contributor label Jun 29, 2022
@nunocoracao
Copy link
Collaborator

nunocoracao commented Jun 29, 2022

Hello, we are currently in the process of validating this feature and I'm interested in learning more about your use-cases. If you want to drop me a line at nuno.coracao@docker.com I'm happy to jump on a call. @joshuafernandes @carnei-ro @faradayfan @project0

@nunocoracao nunocoracao changed the title Add a programatic way to add/remove users per the new subscription plans API for managing Teams and Users Aug 9, 2022
@josh-higgs
Copy link

Hi @nunocoracao,
Our main need is being able to export the full list of members of the organisation to see who has access and regular audit processes. Currently having to email support for this .csv export is not ideal.
Thanks.

@nunocoracao
Copy link
Collaborator

Hello @josh-higgs, thanks for your feedback. We are tracking the export users as a separate feature on #401 if you want to follow progress there.

@ShrikeBTR
Copy link

Is there a status update on development of this feature? I'm being tasked with evaluating a migration to DockerHub for my company, and it's beginning to look like there is no support outside of the (beta?) SCIM feature for SSO, which is only capable of provisioning and deprovisioning, for:

  • API based management of users - either accessing lists of current users for audit purposes, adding new users, removing existing.
  • Any management of "Teams" - creating, removing, changing permissions, or modifying membership

With the net result looking like a great deal of manual work is needed to support a business of significant size.

@raj-patel1
Copy link

We are looking for APIs to grant/revoke access to users/teams. And I can't put enough emphasis on how much these APIs are very critical for using DockerHub at scale in automated way. As whenever our automation adds a new repo, someone has to manually goto DockerHub web app and grant access to different teams/users.

I see its open for more than a year and considering it's in investigation stage right now, can someone give me best case scenario and most likely scenario timelines for these APIs to be available in Production.

@neurorepro
Copy link

@MercedesSteele (and maybe @nunocoracao) I am in the same situation as @raj-patel1 . We would need for example an API call to set specific permissions ("Read & Write") to a team for a given private repository (that we could create with the current API).

As a reference, ChatGPT suggested the following ;)

  1. Get the team id from the team name
curl -s -H "Authorization: JWT <ACCESS_TOKEN>" https://hub.docker.com/v2/orgs/<DOCKERHUB_ORG>/teams/ | jq -r '.teams[] | select(.name == "<TEAM_NAME>") | .id'
  1. Add write permissions for the team with that id
curl -s -H "Authorization: JWT <ACCESS_TOKEN>" -H "Content-Type: application/json" -X PUT -d '{"name": "<TEAM_NAME>", "permission": "write"}' https://hub.docker.com/v2/repositories/<DOCKERHUB_ORG>/<REPO_NAME>/team/$(echo -n "<TEAM_ID>" | base64)/

@markjreed
Copy link

The /invitees endpoint doesn't seem to be there? Managing team memberships works, as does removing users from an org, but I still don't see a way to programmatically send an invitation to join an org.

@dirsigler
Copy link

dirsigler commented Jan 12, 2024

@markjreed "Add users" seems to be now the endpoint https://hub.docker.com/v2/invites/bulk with the payload:

{
  "org": "<YOUR_ORG>",
  "team": "",
  "invitees": ["john.doe@example.com"],
  "dry_run": false,
  "role": "member"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docker_hub Improvements or additions to Docker Hub
Projects
Status: Investigating
Development

No branches or pull requests