issue_access_token/
issue_access_token.rs

1use s2_sdk::{
2    S2,
3    types::{
4        AccessTokenScopeInput, BasinMatcher, BasinName, IssueAccessTokenInput, Operation,
5        OperationGroupPermissions, ReadWritePermissions, S2Config, StreamMatcher,
6    },
7};
8
9#[tokio::main]
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11    let access_token =
12        std::env::var("S2_ACCESS_TOKEN").map_err(|_| "S2_ACCESS_TOKEN env var not set")?;
13    let basin_name: BasinName = std::env::var("S2_BASIN")
14        .map_err(|_| "S2_BASIN env var not set")?
15        .parse()?;
16
17    let config = S2Config::new(access_token);
18    let s2 = S2::new(config)?;
19
20    let input = IssueAccessTokenInput::new(
21        "ro-token".parse()?,
22        AccessTokenScopeInput::from_op_group_perms(
23            OperationGroupPermissions::new().with_account(ReadWritePermissions::read_only()),
24        )
25        .with_ops([Operation::CreateStream])
26        .with_streams(StreamMatcher::Prefix("audit".parse()?))
27        .with_basins(BasinMatcher::Exact(basin_name)),
28    );
29    let issued_token = s2.issue_access_token(input).await?;
30    println!("Issued access token: {issued_token}");
31
32    Ok(())
33}