-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
feat(oauth): Add public client support and refresh token rotation #106451
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
Merged
Merged
Changes from all commits
Commits
Show all changes
94 commits
Select commit
Hold shift + click to select a range
93d8383
feat(oauth): Add public client support and refresh token rotation
BYK c7047a8
fix(oauth): Fix mypy type errors for nullable client_secret
BYK 92382bc
fix(oauth): Fix migration to use correct default for client_secret
BYK 4829506
:hammer_and_wrench: apply pre-commit fixes
getsantry[bot] bd90745
chore(alerts): increase max rollup constants (#106397)
nikkikapadia 37105c0
refactor(tests): Split PromptsActivityTest into GET/PUT test classes …
dcramer ed6fdc4
Uptime insights assertions (#106403)
evanpurkhiser 7e04ec1
perf(eventstore): Use cached project lookup in BaseEvent (#106440)
beezz 1856d09
fix(dashboards): Check query ID before moving out of loading state (#…
narsaynorath bdf6187
chore: logging to figure out why tasks not getting created properly (…
shruthilayaj d8334a7
chore(billing): add constants for emerge (#106235)
vbro cf6fb73
fix(alerts): Validate targetIdentifier is an int before we try to que…
kcons 62bb5c8
fix(dashboards): Update dashboard selects to use new TypeBadge (#106376)
nsdeschenes 9ac4821
fix(uptime): Make verification section smaller in uptime monitor edit…
jaydgoss 5bde08b
fix(top-issues): Swap Title and Subtitle in Drawer to match Cluster C…
yuvmen a46e184
feat(cells): Add isCellScoped prop to ResultGrid for cell-scoped endp…
evanpurkhiser 4b7bf9c
ref(seer): always include short id in cursor handoff (#106454)
sehr-m a540cda
chore: temporarily run task every hour (#106458)
shruthilayaj df58c19
perf(groups): Fix N+1 query on Project in qualified_short_id (#106418)
scttcper 79f7b65
fix(top-issues): Fix TopIssuesDrawer unconstrained width on long erro…
yuvmen 1e685f1
fix(seer): Update showNewSeer conditions to count the `code-review-be…
ryan953 d569af7
ref(sentry-apps): Improve RpcSentryAppError with from_exc factory met…
leeandher 8ab3f8f
ref(spans): Add logging to SpanFlusher startup (#106446)
lvthanh03 14bace7
ref(cells): Use isCellScoped for user customers endpoint (#106457)
evanpurkhiser ca70851
fix(uptime): checker_api should not set null for body and related (#1…
klochek f2431e9
fix(code-review): Fix staged billing check for GA (#106146)
suejungshin 42077a8
feat(ACI): Document organization workflow index GET and DELETE endpoi…
ceorourke 23adfbf
chore(explorer): move panel (#106420)
roaga c871abe
ref(alerts): Migrate `AlertsContainer` and children views off of `dep…
shashjar b767779
chore(preprod): add log when artifact is updated (#106469)
trevor-e 5d0ef97
ref(slack): Compact Slack issue alert message layout (#105994)
leeandher 5a9dd7e
fix(eco): Fixes typing for integration debug data, reduces page size …
GabeVillalobos bf926e4
fix(aci): add validation for detector trigger condition results (#106…
mifu67 3ddb93a
fix(audit_log): Correct DetectorWorkflow audit log data (#106382)
seer-by-sentry[bot] dcdb217
fix(cells): Use cell endpoint for closing invoices (#106445)
evanpurkhiser 195169a
fix(preprod): Fix settings api bug for status checks (#106480)
NicoHinderling 400f5cb
fix(preprod): add status check retry delay (#106481)
trevor-e 0d2f936
feat(nav): Add feature flag logic to show/hide the Prevent nav item (…
ryan953 5643d28
perf(issues): Fix N+1 query on repository in get_sorted_code_mapping_…
scttcper 3e1ca72
feat: Show details when there are any for sending test notifications …
JPeer264 96760c3
feat(usageStats): Add new `ignored` client discard reason (#106251)
Lms24 62c1173
feat(ai-insights): support tool.call attribute (#106509)
obostjancic 887b894
feat(preprod): Check quota available in preprod assemble (#106455)
chromy dc0426d
feat(objectstore): Try Django request.body when proxying (#106506)
lcian 4694b2a
feat(preprod): Check quota and run only available features (#106510)
chromy d87f5f3
chore(overwatch): Remove Overwatch forwarding infrastructure (#106447)
armenzg d1bd2ea
Add some data model documentation to spans buffer (#106504)
fpacifici b0c03ff
Add logging for abnormally long EVALSHA in spans buffer (#106496)
fpacifici cb18422
Revert "feat(preprod): Check quota and run only available features" (…
chromy d872649
chore(feedback): re-assign sessions feedback to replay team, laravel&…
shellmayr b696ec0
feat(crons-detector-schedule-preview): Adding new schedule preview co…
Abdkhan14 a3a3bf5
Revert "feat(preprod): Check quota available in preprod assemble" (#1…
chromy 8d3fd31
fix(uptime): validator should not set null for body and related (#106…
klochek 57ed458
Revert "Add logging for abnormally long EVALSHA in spans buffer (#106…
getsentry-bot dc4eaf3
feat(project-details): link to mobile session health (#106520)
bcoe 6ad2b36
Add logging for abnormally long EVALSHA in spans buffer (#106496) (#1…
evanh b25a258
chore: fix typos in comments and messages (#106495)
NAM-MAN 3a1f328
feat(crons-detector-schedule-preview): Endpoint edge cases (#106392)
Abdkhan14 afed387
chore(explorer-index): remove debug code (#106516)
shruthilayaj 9c7cf8e
fix(tracemetrics): Add timestamp to filterable fields (#106456)
narsaynorath 3f23446
feat(oauth): Add RFC 6750 Bearer token compliance (#106274)
dcramer a3fc390
fix(code-review): Check if org has disabled default code review trigg…
suejungshin 3e622d6
fix(releases): Use mobile_app_info for preprod build count query (#10…
cameroncooke 1bd25e3
feat(dashboards/insights): allow >90 days pickable (#106529)
DominikB2014 ad3a4c7
fix(dashboards): clear message when dataset doesnt support >90 days (…
DominikB2014 6c79f66
Merge remote-tracking branch 'origin/master' into feat/oauth-public-c…
BYK eda118d
Merge branch 'master' into feat/oauth-public-client-refresh-token-rot…
BYK 2f5206f
fix(oauth): Use CheckedMigration for silo-aware migration
BYK d8fa2f8
fix(oauth): Prevent client_id enumeration via timing oracle
BYK 06d8d01
refactor(oauth): Simplify public client grant type check
BYK 75b69bc
Merge branch 'master' into feat/oauth-public-client-refresh-token-rot…
BYK e731fb1
fix(oauth): Prevent race condition in refresh token rotation
BYK 56e7221
fix(oauth): Handle replay detection when token has no family ID
BYK 6781ff0
fix(oauth): Use explicit None check for is_public property
BYK e8d51b5
test(oauth): Add comprehensive tests for public client behavior
BYK 5d86221
refactor(oauth): Simplify refresh token rotation to create/delete
BYK 4b7a140
Merge branch 'master' into feat/oauth-public-client-refresh-token-rot…
BYK eb0ce89
:hammer_and_wrench: apply pre-commit fixes
getsantry[bot] f65c630
refactor(oauth): Use empty string for public clients instead of null
BYK e8562e7
chore: Remove verbose comments from oauth_token.py
BYK 0665bed
fix: Revert migration lockfile to 1018
BYK 502ef17
chore: Remove unnecessary assertion in SentryApp.build_signature
BYK 82f62be
fix: Rename misleading test to test_public_client_with_wrong_secret_f…
BYK 0c6552e
feat: Support is_public=True in ApiApplication constructor
BYK fc4edd0
test: Add confidential client refresh token tests
BYK 2c05929
refactor: Unify refresh token handling for public and confidential cl…
BYK 5605642
:hammer_and_wrench: apply pre-commit fixes
getsantry[bot] a26feaf
Merge branch 'master' into feat/oauth-public-client-refresh-token-rot…
BYK 8f53c1d
chore: Add migration for ApiApplication.client_secret blank=True
BYK fde3c2e
:hammer_and_wrench: apply pre-commit fixes
getsantry[bot] be8239d
test: Add test for empty string client_secret bypass attempt
BYK 5368b05
fix: Revert is_public=True parameter to fix mypy typing errors
BYK 1f17a52
chore: Use NULL instead of empty string for public client_secret
BYK 21f2304
fix: Add assertion for client_secret in SentryApp.build_signature
BYK File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
src/sentry/migrations/1020_alter_apiapplication_client_secret_nullable.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| # Generated by Django 5.2.8 on 2026-01-20 21:29 | ||
|
|
||
| from django.db import migrations, models | ||
|
|
||
| import sentry.models.apiapplication | ||
| from sentry.new_migrations.migrations import CheckedMigration | ||
|
|
||
|
|
||
| class Migration(CheckedMigration): | ||
| # This flag is used to mark that a migration shouldn't be automatically run in production. | ||
| # This should only be used for operations where it's safe to run the migration after your | ||
| # code has deployed. So this should not be used for most operations that alter the schema | ||
| # of a table. | ||
| # Here are some things that make sense to mark as post deployment: | ||
| # - Large data migrations. Typically we want these to be run manually so that they can be | ||
| # monitored and not block the deploy for a long period of time while they run. | ||
| # - Adding indexes to large tables. Since this can take a long time, we'd generally prefer to | ||
| # run this outside deployments so that we don't block them. Note that while adding an index | ||
| # is a schema change, it's completely safe to run the operation after the code has deployed. | ||
| # Once deployed, run these manually via: https://develop.sentry.dev/database-migrations/#migration-deployment | ||
|
|
||
| is_post_deployment = False | ||
|
|
||
| dependencies = [ | ||
| ("sentry", "1019_add_integration_debug_json"), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.AlterField( | ||
| model_name="apiapplication", | ||
| name="client_secret", | ||
| field=models.TextField(null=True, default=sentry.models.apiapplication.generate_token), | ||
| ), | ||
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.