Support for slack auth
This commit is contained in:
parent
820f619aeb
commit
d60b70ffb4
4 changed files with 13 additions and 6 deletions
|
|
@ -49,7 +49,7 @@ pub fn init_db() -> Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn store_connection(
|
pub fn store_connection(
|
||||||
openid_user: super::providers::OpenIdUser,
|
openid_user: &super::providers::OpenIdUser,
|
||||||
openid_provider: &str,
|
openid_provider: &str,
|
||||||
access_token: &str,
|
access_token: &str,
|
||||||
refresh_token: Option<&str>,
|
refresh_token: Option<&str>,
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ impl BurrowWeb for BurrowGrpcServer {
|
||||||
&self,
|
&self,
|
||||||
request: Request<SlackAuthRequest>,
|
request: Request<SlackAuthRequest>,
|
||||||
) -> Result<Response<JwtInfo>, Status> {
|
) -> Result<Response<JwtInfo>, Status> {
|
||||||
auth(request).await
|
auth(request, &self.jwt_keypair).await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn create_device(
|
async fn create_device(
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ mod tests {
|
||||||
name: "Inquisition".into(),
|
name: "Inquisition".into(),
|
||||||
};
|
};
|
||||||
let encoded = JwtInfo::try_from_oid(sample_usr.clone(), &key_pair)?;
|
let encoded = JwtInfo::try_from_oid(sample_usr.clone(), &key_pair)?;
|
||||||
|
println!("{}", encoded.jwt);
|
||||||
let decoded = OpenIdUser::try_from_jwt(&encoded, &key_pair)?;
|
let decoded = OpenIdUser::try_from_jwt(&encoded, &key_pair)?;
|
||||||
assert_eq!(decoded, sample_usr);
|
assert_eq!(decoded, sample_usr);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,17 @@ use serde::Deserialize;
|
||||||
|
|
||||||
use super::db::store_connection;
|
use super::db::store_connection;
|
||||||
use super::grpc_defs::{JwtInfo, SlackAuthRequest};
|
use super::grpc_defs::{JwtInfo, SlackAuthRequest};
|
||||||
|
use super::KeypairT;
|
||||||
use tonic::{Request as TRequest, Response as TResponse, Result as TResult, Status as TStatus};
|
use tonic::{Request as TRequest, Response as TResponse, Result as TResult, Status as TStatus};
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct SlackToken {
|
pub struct SlackToken {
|
||||||
slack_token: String,
|
slack_token: String,
|
||||||
}
|
}
|
||||||
pub async fn auth(request: TRequest<SlackAuthRequest>) -> TResult<TResponse<JwtInfo>, TStatus> {
|
pub async fn auth(
|
||||||
|
request: TRequest<SlackAuthRequest>,
|
||||||
|
key_pair: &KeypairT,
|
||||||
|
) -> TResult<TResponse<JwtInfo>, TStatus> {
|
||||||
let slack_token = request.into_inner().slack_token;
|
let slack_token = request.into_inner().slack_token;
|
||||||
let slack_user = match fetch_slack_user(&slack_token).await {
|
let slack_user = match fetch_slack_user(&slack_token).await {
|
||||||
Ok(user) => user,
|
Ok(user) => user,
|
||||||
|
|
@ -31,7 +35,7 @@ pub async fn auth(request: TRequest<SlackAuthRequest>) -> TResult<TResponse<JwtI
|
||||||
slack_user.sub
|
slack_user.sub
|
||||||
);
|
);
|
||||||
|
|
||||||
let conn = match store_connection(slack_user, "slack", &slack_token, None) {
|
let _conn = match store_connection(&slack_user, "slack", &slack_token, None) {
|
||||||
Ok(user) => user,
|
Ok(user) => user,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("Failed to fetch Slack user: {:?}", e);
|
log::error!("Failed to fetch Slack user: {:?}", e);
|
||||||
|
|
@ -39,8 +43,10 @@ pub async fn auth(request: TRequest<SlackAuthRequest>) -> TResult<TResponse<JwtI
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO
|
Ok(TResponse::new(
|
||||||
Ok(TResponse::new(JwtInfo { jwt: "TODO".into() }))
|
JwtInfo::try_from_oid(slack_user, &key_pair)
|
||||||
|
.map_err(|e| TStatus::unauthenticated(format!("JWT Generation failed: {e}")))?,
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn fetch_slack_user(access_token: &str) -> Result<super::OpenIdUser> {
|
async fn fetch_slack_user(access_token: &str) -> Result<super::OpenIdUser> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue