mirror of https://github.com/veypi/OneAuth.git
crud macro / login token redirect
parent
5f752ba9ac
commit
521aee9683
@ -0,0 +1,68 @@
|
||||
//
|
||||
// token.rs
|
||||
// Copyright (C) 2023 veypi <i@veypi.com>
|
||||
// 2023-10-13 02:29
|
||||
// Distributed under terms of the MIT license.
|
||||
//
|
||||
|
||||
use actix_web::{get, web, Responder};
|
||||
use proc::access_read;
|
||||
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
|
||||
use std::time::{Duration, Instant};
|
||||
use tokio::{self};
|
||||
|
||||
use crate::{
|
||||
models::{self, AUStatus, Token, UserPlugin},
|
||||
AppState, Error, Result,
|
||||
};
|
||||
|
||||
#[get("/app/{aid}/token/")]
|
||||
#[access_read("app")]
|
||||
pub async fn get(
|
||||
aid: web::Path<String>,
|
||||
stat: web::Data<AppState>,
|
||||
t: web::ReqData<Token>,
|
||||
) -> Result<impl Responder> {
|
||||
let n = aid.into_inner();
|
||||
if !n.is_empty() {
|
||||
let s = models::app_user::Entity::find()
|
||||
.filter(models::app_user::Column::AppId.eq(&n))
|
||||
.filter(models::app_user::Column::UserId.eq(&t.id))
|
||||
.one(stat.db())
|
||||
.await?;
|
||||
if s.is_none() {
|
||||
return Err(Error::NotAuthed);
|
||||
};
|
||||
let s = s.unwrap();
|
||||
if s.status == AUStatus::OK as i32 {
|
||||
let result = sqlx::query_as::<_, models::AccessCore>(
|
||||
"select access.name, access.rid, access.level from access, user_role, role WHERE user_role.user_id = ? && access.role_id=user_role.role_id && role.id=user_role.role_id && role.app_id = ?",
|
||||
)
|
||||
.bind(&t.id)
|
||||
.bind(n)
|
||||
.fetch_all(stat.sqlx())
|
||||
.await?;
|
||||
let u = models::user::Entity::find_by_id(&t.id)
|
||||
.one(stat.db())
|
||||
.await?
|
||||
.unwrap();
|
||||
let str = u.token(result).to_string()?;
|
||||
// tokio::spawn(async move {
|
||||
// let mut interval = tokio::time::interval(Duration::from_secs(5));
|
||||
// interval.tick().await;
|
||||
// let start = Instant::now();
|
||||
// println!("time:{:?}", start);
|
||||
// loop {
|
||||
// interval.tick().await;
|
||||
// println!("time:{:?}", start.elapsed());
|
||||
// }
|
||||
// });
|
||||
|
||||
Ok(str)
|
||||
} else {
|
||||
Err(Error::NotAuthed)
|
||||
}
|
||||
} else {
|
||||
Err(Error::Missing("id".to_string()))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue