This commit is contained in:
parent
59441f305b
commit
28156bdda4
@ -3,6 +3,8 @@
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: default
|
||||
clone:
|
||||
disable: true
|
||||
|
||||
trigger:
|
||||
event:
|
||||
|
||||
@ -1,93 +0,0 @@
|
||||
use crate::AppModules;
|
||||
use crate::errors::AppError;
|
||||
use context::Context;
|
||||
use models::active_enums::MemberRole;
|
||||
use models::project::{project_history_names, project_members, projects};
|
||||
use models::repos::repo;
|
||||
use sea_orm::*;
|
||||
use uuid::Uuid;
|
||||
|
||||
impl AppModules {
|
||||
pub async fn find_project_by_name(&self, name: String) -> Result<projects::Model, AppError> {
|
||||
match projects::Entity::find()
|
||||
.filter(projects::Column::Name.eq(name.clone()))
|
||||
.one(&self.db.reader())
|
||||
.await
|
||||
.ok()
|
||||
.flatten()
|
||||
{
|
||||
Some(project) => Ok(project),
|
||||
None => match project_history_names::Entity::find()
|
||||
.filter(project_history_names::Column::HistoryName.eq(name))
|
||||
.one(&self.db.reader())
|
||||
.await
|
||||
.ok()
|
||||
.flatten()
|
||||
{
|
||||
Some(project) => self.find_project_by_uid(project.project_uid).await,
|
||||
None => Err(AppError::ProjectNotFound),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn find_project_by_uid(&self, uid: Uuid) -> Result<projects::Model, AppError> {
|
||||
projects::Entity::find_by_id(uid)
|
||||
.one(&self.db.reader())
|
||||
.await
|
||||
.ok()
|
||||
.flatten()
|
||||
.ok_or(AppError::ProjectNotFound)
|
||||
}
|
||||
|
||||
pub async fn check_project_permission(
|
||||
&self,
|
||||
project_id: &Uuid,
|
||||
user_id: Uuid,
|
||||
required_scopes: &[MemberRole],
|
||||
) -> Result<(), AppError> {
|
||||
let member = project_members::Entity::find()
|
||||
.filter(project_members::Column::ProjectId.eq(*project_id))
|
||||
.filter(project_members::Column::UserId.eq(user_id))
|
||||
.one(&self.db.reader())
|
||||
.await?;
|
||||
|
||||
if let Some(member) = member {
|
||||
for scope in required_scopes {
|
||||
if &member.scope == scope {
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Err(AppError::NoPower)
|
||||
}
|
||||
pub async fn project_context_role(
|
||||
&self,
|
||||
context: &Context,
|
||||
project_name: String,
|
||||
) -> Result<MemberRole, AppError> {
|
||||
let user_uid = context.user().ok_or(AppError::Unauthorized)?;
|
||||
let project = self.find_project_by_name(project_name).await?;
|
||||
let members = project_members::Entity::find()
|
||||
.filter(project_members::Column::ProjectId.eq(project.uid))
|
||||
.filter(project_members::Column::UserId.eq(user_uid))
|
||||
.one(&self.db.reader())
|
||||
.await
|
||||
.map_err(|_| AppError::InternalError)?
|
||||
.map(|m| m.scope);
|
||||
members.ok_or(AppError::Unauthorized)
|
||||
}
|
||||
|
||||
pub async fn find_repo_by_name(
|
||||
&self,
|
||||
project_uid: Uuid,
|
||||
repo_name: &str,
|
||||
) -> Result<repo::Model, AppError> {
|
||||
repo::Entity::find()
|
||||
.filter(repo::Column::ProjectUid.eq(project_uid))
|
||||
.filter(repo::Column::RepoName.eq(repo_name))
|
||||
.one(&self.db.reader())
|
||||
.await?
|
||||
.ok_or(AppError::NotFound(format!("Repository '{}' not found", repo_name)))
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user