share funxtions
This commit is contained in:
+9
-6
@@ -295,9 +295,9 @@ pub async fn authorized_workspace(
|
||||
let workspace = db::find_workspace(&state.db, slug)
|
||||
.await?
|
||||
.ok_or_else(ApiError::not_found_workspace)?;
|
||||
if workspace.password_hash.is_some()
|
||||
&& !db::verify_workspace_password(&workspace, password)
|
||||
&& !verify_resource_access_token(state, "workspace", slug, access_token).await? {
|
||||
let token_access = verify_resource_access_token(state, "workspace", slug, access_token).await?;
|
||||
if workspace.is_private != 0 && !token_access { return Err(ApiError::forbidden("This workspace is private.")); }
|
||||
if workspace.password_hash.is_some() && !db::verify_workspace_password(&workspace, password) && !token_access {
|
||||
return Err(ApiError::unauthorized());
|
||||
}
|
||||
Ok(workspace)
|
||||
@@ -566,9 +566,9 @@ async fn authorized_pad(
|
||||
let pad = db::find_pad(&state.db, slug)
|
||||
.await?
|
||||
.ok_or_else(ApiError::not_found_note)?;
|
||||
if pad.password_hash.is_some()
|
||||
&& !db::verify_pad_password(&pad, password)
|
||||
&& !verify_resource_access_token(state, "pad", slug, access_token).await? {
|
||||
let token_access = verify_resource_access_token(state, "pad", slug, access_token).await?;
|
||||
if pad.is_private != 0 && !token_access { return Err(ApiError::forbidden("This note is private.")); }
|
||||
if pad.password_hash.is_some() && !db::verify_pad_password(&pad, password) && !token_access {
|
||||
return Err(ApiError::unauthorized());
|
||||
}
|
||||
Ok(pad)
|
||||
@@ -872,6 +872,9 @@ pub async fn verify_resource_access_token(
|
||||
let Some(token) = token.map(str::trim).filter(|value| !value.is_empty()) else {
|
||||
return Ok(false);
|
||||
};
|
||||
if crate::auth::resource_permission(state, kind, slug, Some(token)).await.map_err(|error| ApiError::forbidden(&error.message))?.is_some() {
|
||||
return Ok(true);
|
||||
}
|
||||
let count: i64 = sqlx::query_scalar(queries::get(state.db.kind(), "SELECT COUNT(*) FROM resource_access_tokens WHERE token_hash = ? AND resource_kind = ? AND resource_slug = ? AND expires_at > ?"))
|
||||
.bind(hash_access_token(token))
|
||||
.bind(kind)
|
||||
|
||||
Reference in New Issue
Block a user