• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kobotoolbox / kpi / 22509946657
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 28 Feb 2026 01:38AM UTC
Jobs 2
Files 891
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Feb 2026 01:04AM UTC coverage: 82.067% (+0.04%) from 82.031%
22509946657

push

github

web-flow
feat(scim): get/list api endpoints for the scim integration DEV-1665 (#6741)

### đŸ“Ŗ Summary
As part of the SSO deprovisioning project, this PR implements basic SCIM
v2 User `GET` (list and retrieve) endpoints, allowing external IdPs to
query user accounts via the SCIM protocol.

Features included in this PR:
* SCIM API endpoints exposed at `/api/scim/v2/{idp_slug}/Users/` and
`/api/scim/v2/{idp_slug}/Users/{user_id}`
* Authentication via a `Bearer` token validated against the respective
`IdentityProvider.scim_api_key`.
* Pagination following the standard specifications 
* Supported filtering usernames and emails (e.g. `?filter=userName eq
"test@test.com"`) to locate linked accounts for deprovisioning queries.


### 👀 Preview steps


1. â„šī¸ Create an active `IdentityProvider` using the Django shell (or
admin)
2. â„šī¸ Ensure you have a couple of users existing in your local test
databae
3. Open your terminal and attempt to fetch the SCIM users list without
authentication:
```
   curl -X GET http://kf.kobo.local/api/scim/v2/test-idp/Users/
```
🔴 It should fail.
4. Provide the Bearer token configured for your IdP:
```
curl -H "Authorization: Bearer my-secret-token" \
     -X GET http://kf.kobo.local/api/scim/v2/test-idp/Users/
```
đŸŸĸ [on PR] Notice that the endpoint returns a 200 OK response. The
response should follow the SCIM ListResponse standard, detailing
totalResults, pagination bounds (startIndex, itemsPerPage), and an array
of Kobo users formatted with the SCIM specs.
5. Retrieve a specific user by copying a user ID from the previous list
and querying it directly:
```
curl -H "Authorization: Bearer my-secret-token" \
     -X GET http://kf.kobo.local/api/scim/v2/test-idp/Users/{user_id}/
đŸŸĸ [on PR] Notice that the endpoint returns a single user matching the urn:ietf:params:scim:schemas:core:2.0:User schema

7469 of 11502 branches covered (64.94%)

95 of 101 new or added lines in 5 files covered. (94.06%)

114 existing lines in 8 files now uncovered.

28689 of 34958 relevant lines covered (82.07%)

1.62 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
1
95.65
kobo/apps/kobo_scim/authentication.py
1
95.83
kobo/apps/kobo_scim/serializers.py
4
77.78
kobo/apps/kobo_scim/pagination.py

Uncovered Existing Lines

Lines Coverage ∆ File
2
97.65
-0.18% kobo/apps/subsequences/actions/mixins.py
6
96.57
0.54% kobo/apps/subsequences/actions/automatic_bedrock_qual.py
7
93.81
0.11% kobo/apps/subsequences/actions/qual.py
9
88.72
0.09% kobo/apps/subsequences/models.py
15
26.83
0.0% kobo/apps/subsequences/tasks.py
21
46.94
-1.95% kpi/schema_extensions/v2/subsequences/extensions.py
23
88.6
-0.1% kobo/apps/subsequences/actions/base.py
31
88.4
-1.22% kpi/views/v2/data.py
Jobs
ID Job ID Ran Files Coverage
1 22509946657.1 28 Feb 2026 01:38AM UTC 889
79.74
2 22509946657.2 28 Feb 2026 01:42AM UTC 891
82.03
Source Files on build 22509946657
  • Tree
  • List 891
  • Changed 11
  • Source Changed 0
  • Coverage Changed 11
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 239cbe6b on github
  • Prev Build on main (#22361967232)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc