Skip to content

Commit 1937304

Browse files
Merge branch 'main' into konrad/public-openapi
2 parents 16a5ca0 + 21f9997 commit 1937304

File tree

15 files changed

+1077
-2
lines changed

15 files changed

+1077
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [4.15.5] - 2026-03-12
11+
12+
### Added
13+
- [EE] Added JumpCloud as an identity provider for SSO authentication. [#997](https://github.com/sourcebot-dev/sourcebot/pull/997)
14+
1015
### Changed
1116
- Require explicit invocation of ask_codebase tool in MCP [#995](https://github.com/sourcebot-dev/sourcebot/pull/995)
1217
- Gate MCP API behind authentication when Ask GitHub is enabled. [#994](https://github.com/sourcebot-dev/sourcebot/pull/994)

docs/docs/configuration/idp.mdx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,4 +520,51 @@ An Authentik connection can be used for [authentication](/docs/configuration/aut
520520
</Steps>
521521
</Accordion>
522522

523+
### JumpCloud
524+
525+
A JumpCloud connection can be used for [authentication](/docs/configuration/auth). JumpCloud supports OIDC (OpenID Connect), which Sourcebot uses to authenticate users.
526+
527+
<Accordion title="instructions">
528+
<Steps>
529+
<Step title="Create an SSO Application in JumpCloud">
530+
To begin, you must create an SSO application in JumpCloud to facilitate the identity provider connection. For more information, see the [JumpCloud OIDC documentation](https://jumpcloud.com/support/sso-with-oidc).
531+
532+
When configuring your application:
533+
- Set the SSO type to "OIDC"
534+
- Add `<sourcebot_url>/api/auth/callback/jumpcloud` to the redirect URIs (ex. https://sourcebot.coolcorp.com/api/auth/callback/jumpcloud)
535+
- Set the login URL to `<sourcebot_url>/login`
536+
537+
After creating the application, note the `CLIENT_ID` and `CLIENT_SECRET`. The issuer URL is typically `https://oauth.id.jumpcloud.com`.
538+
</Step>
539+
<Step title="Define environment variables">
540+
The client id, secret, and issuer URL are provided to Sourcebot via environment variables. These can be named whatever you like
541+
(ex. `JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_ID`, `JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_SECRET`, and `JUMPCLOUD_IDENTITY_PROVIDER_ISSUER`)
542+
</Step>
543+
<Step title="Define the identity provider config">
544+
Create a `identityProvider` object in the [config file](/docs/configuration/config-file) with the following fields:
545+
546+
```json wrap icon="code"
547+
{
548+
"$schema": "https://raw.githubusercontent.com/sourcebot-dev/sourcebot/main/schemas/v3/index.json",
549+
"identityProviders": [
550+
{
551+
"provider": "jumpcloud",
552+
"purpose": "sso",
553+
"clientId": {
554+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_ID"
555+
},
556+
"clientSecret": {
557+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_SECRET"
558+
},
559+
"issuer": {
560+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_ISSUER"
561+
}
562+
}
563+
]
564+
}
565+
```
566+
</Step>
567+
</Steps>
568+
</Accordion>
569+
523570

docs/snippets/schemas/v3/identityProvider.schema.mdx

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,115 @@
842842
"issuer"
843843
]
844844
},
845+
"JumpCloudIdentityProviderConfig": {
846+
"type": "object",
847+
"additionalProperties": false,
848+
"properties": {
849+
"provider": {
850+
"const": "jumpcloud"
851+
},
852+
"purpose": {
853+
"const": "sso"
854+
},
855+
"clientId": {
856+
"anyOf": [
857+
{
858+
"type": "object",
859+
"properties": {
860+
"env": {
861+
"type": "string",
862+
"description": "The name of the environment variable that contains the token."
863+
}
864+
},
865+
"required": [
866+
"env"
867+
],
868+
"additionalProperties": false
869+
},
870+
{
871+
"type": "object",
872+
"properties": {
873+
"googleCloudSecret": {
874+
"type": "string",
875+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
876+
}
877+
},
878+
"required": [
879+
"googleCloudSecret"
880+
],
881+
"additionalProperties": false
882+
}
883+
]
884+
},
885+
"clientSecret": {
886+
"anyOf": [
887+
{
888+
"type": "object",
889+
"properties": {
890+
"env": {
891+
"type": "string",
892+
"description": "The name of the environment variable that contains the token."
893+
}
894+
},
895+
"required": [
896+
"env"
897+
],
898+
"additionalProperties": false
899+
},
900+
{
901+
"type": "object",
902+
"properties": {
903+
"googleCloudSecret": {
904+
"type": "string",
905+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
906+
}
907+
},
908+
"required": [
909+
"googleCloudSecret"
910+
],
911+
"additionalProperties": false
912+
}
913+
]
914+
},
915+
"issuer": {
916+
"anyOf": [
917+
{
918+
"type": "object",
919+
"properties": {
920+
"env": {
921+
"type": "string",
922+
"description": "The name of the environment variable that contains the token."
923+
}
924+
},
925+
"required": [
926+
"env"
927+
],
928+
"additionalProperties": false
929+
},
930+
{
931+
"type": "object",
932+
"properties": {
933+
"googleCloudSecret": {
934+
"type": "string",
935+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
936+
}
937+
},
938+
"required": [
939+
"googleCloudSecret"
940+
],
941+
"additionalProperties": false
942+
}
943+
]
944+
}
945+
},
946+
"required": [
947+
"provider",
948+
"purpose",
949+
"clientId",
950+
"clientSecret",
951+
"issuer"
952+
]
953+
},
845954
"BitbucketServerIdentityProviderConfig": {
846955
"type": "object",
847956
"additionalProperties": false,
@@ -1776,6 +1885,115 @@
17761885
"clientSecret"
17771886
]
17781887
},
1888+
{
1889+
"type": "object",
1890+
"additionalProperties": false,
1891+
"properties": {
1892+
"provider": {
1893+
"const": "jumpcloud"
1894+
},
1895+
"purpose": {
1896+
"const": "sso"
1897+
},
1898+
"clientId": {
1899+
"anyOf": [
1900+
{
1901+
"type": "object",
1902+
"properties": {
1903+
"env": {
1904+
"type": "string",
1905+
"description": "The name of the environment variable that contains the token."
1906+
}
1907+
},
1908+
"required": [
1909+
"env"
1910+
],
1911+
"additionalProperties": false
1912+
},
1913+
{
1914+
"type": "object",
1915+
"properties": {
1916+
"googleCloudSecret": {
1917+
"type": "string",
1918+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1919+
}
1920+
},
1921+
"required": [
1922+
"googleCloudSecret"
1923+
],
1924+
"additionalProperties": false
1925+
}
1926+
]
1927+
},
1928+
"clientSecret": {
1929+
"anyOf": [
1930+
{
1931+
"type": "object",
1932+
"properties": {
1933+
"env": {
1934+
"type": "string",
1935+
"description": "The name of the environment variable that contains the token."
1936+
}
1937+
},
1938+
"required": [
1939+
"env"
1940+
],
1941+
"additionalProperties": false
1942+
},
1943+
{
1944+
"type": "object",
1945+
"properties": {
1946+
"googleCloudSecret": {
1947+
"type": "string",
1948+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1949+
}
1950+
},
1951+
"required": [
1952+
"googleCloudSecret"
1953+
],
1954+
"additionalProperties": false
1955+
}
1956+
]
1957+
},
1958+
"issuer": {
1959+
"anyOf": [
1960+
{
1961+
"type": "object",
1962+
"properties": {
1963+
"env": {
1964+
"type": "string",
1965+
"description": "The name of the environment variable that contains the token."
1966+
}
1967+
},
1968+
"required": [
1969+
"env"
1970+
],
1971+
"additionalProperties": false
1972+
},
1973+
{
1974+
"type": "object",
1975+
"properties": {
1976+
"googleCloudSecret": {
1977+
"type": "string",
1978+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1979+
}
1980+
},
1981+
"required": [
1982+
"googleCloudSecret"
1983+
],
1984+
"additionalProperties": false
1985+
}
1986+
]
1987+
}
1988+
},
1989+
"required": [
1990+
"provider",
1991+
"purpose",
1992+
"clientId",
1993+
"clientSecret",
1994+
"issuer"
1995+
]
1996+
},
17791997
{
17801998
"type": "object",
17811999
"additionalProperties": false,

0 commit comments

Comments
 (0)