Skip to content

Commit e252532

Browse files
feat: allow configurable OIDC scopes (#1363)
enable that the oidc scope can be set by an environment variable P_OIDC_SCOPE, default to "openid profile email". Co-authored-by: Nikhil Sinha <[email protected]>
1 parent 33ed89c commit e252532

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

src/cli.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,16 @@ pub struct Options {
451451
help = "Object store sync threshold in seconds"
452452
)]
453453
pub object_store_sync_threshold: u64,
454+
// the oidc scope
455+
#[arg(
456+
long = "oidc-scope",
457+
name = "oidc-scope",
458+
env = "P_OIDC_SCOPE",
459+
default_value = "openid profile email",
460+
required = false,
461+
help = "OIDC scope to request (default: openid profile email)"
462+
)]
463+
pub scope: String,
454464
}
455465

456466
#[derive(Parser, Debug)]

src/handlers/http/oidc.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use ulid::Ulid;
3232
use url::Url;
3333

3434
use crate::{
35-
handlers::{COOKIE_AGE_DAYS, OIDC_SCOPE, SESSION_COOKIE_NAME, USER_COOKIE_NAME},
35+
handlers::{COOKIE_AGE_DAYS, SESSION_COOKIE_NAME, USER_COOKIE_NAME},
3636
oidc::{Claims, DiscoveredClient},
3737
parseable::PARSEABLE,
3838
rbac::{
@@ -77,7 +77,7 @@ pub async fn login(
7777
let session_key = extract_session_key_from_req(&req).ok();
7878
let (session_key, oidc_client) = match (session_key, oidc_client) {
7979
(None, None) => return Ok(redirect_no_oauth_setup(query.redirect.clone())),
80-
(None, Some(client)) => return Ok(redirect_to_oidc(query, client)),
80+
(None, Some(client)) => return Ok(redirect_to_oidc(query, client, PARSEABLE.options.scope.to_string().as_str())),
8181
(Some(session_key), client) => (session_key, client),
8282
};
8383
// try authorize
@@ -113,7 +113,7 @@ pub async fn login(
113113
} else {
114114
Users.remove_session(&key);
115115
if let Some(oidc_client) = oidc_client {
116-
redirect_to_oidc(query, oidc_client)
116+
redirect_to_oidc(query, oidc_client, PARSEABLE.options.scope.to_string().as_str())
117117
} else {
118118
redirect_to_client(query.redirect.as_str(), None)
119119
}
@@ -226,10 +226,11 @@ fn exchange_basic_for_cookie(user: &User, key: SessionKey) -> Cookie<'static> {
226226
fn redirect_to_oidc(
227227
query: web::Query<RedirectAfterLogin>,
228228
oidc_client: &DiscoveredClient,
229+
scope: &str,
229230
) -> HttpResponse {
230231
let redirect = query.into_inner().redirect.to_string();
231232
let auth_url = oidc_client.auth_url(&Options {
232-
scope: Some(OIDC_SCOPE.into()),
233+
scope: Some(scope.to_string()),
233234
state: Some(redirect),
234235
..Default::default()
235236
});

src/handlers/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ const STATIC_SCHEMA_FLAG: &str = "x-p-static-schema-flag";
3030
const AUTHORIZATION_KEY: &str = "authorization";
3131
const UPDATE_STREAM_KEY: &str = "x-p-update-stream";
3232
pub const STREAM_TYPE_KEY: &str = "x-p-stream-type";
33-
const OIDC_SCOPE: &str = "openid profile email";
3433
const COOKIE_AGE_DAYS: usize = 7;
3534
const SESSION_COOKIE_NAME: &str = "session";
3635
const USER_COOKIE_NAME: &str = "username";

0 commit comments

Comments
 (0)