diff --git a/site/src/components/UpdateRepository.vue b/site/src/components/UpdateRepository.vue index 5fae4f1b..e2ce3cb6 100644 --- a/site/src/components/UpdateRepository.vue +++ b/site/src/components/UpdateRepository.vue @@ -41,7 +41,7 @@ - Update Settings @@ -66,8 +66,8 @@ - - + + @@ -84,7 +84,7 @@ - Update Frontend Settings @@ -106,7 +106,7 @@ - Update Security Settings @@ -167,7 +167,7 @@ export default defineComponent({ const activeName = ref("first"); const error = ref(""); let storage = ref(DEFAULT_STORAGE); - const exampleBadgeURL = ref(""); + const exampleBadgeURL = ref(""); const getStorageByID = async () => { isLoading.value = true; @@ -178,7 +178,7 @@ export default defineComponent({ ); storage.value = value; exampleBadgeURL.value = - baseURL + + baseURL + "/badge/" + storage.value.name + "/" + @@ -218,7 +218,100 @@ export default defineComponent({ this.storage.name + "/" + this.repo.name + - "/modify/settings", + "/modify/settings/general", + body, + { + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + this.$cookie.getCookie("token"), + }, + } + ); + if (res.status != 200) { + console.log("Data" + res.data); + return; + } + const result = res.data; + let value = JSON.stringify(result); + console.log(value); + + let response: BasicResponse = JSON.parse(value); + + if (response.success) { + this.$notify({ + title: "Updated Repository", + type: "success", + }); + } else { + this.settingForm.error = "Unable to Update Storage"; + } + }, + async submitSecurity() { + if (this.storage.id == 0) { + return; + } + let newUser = { + active: this.settingForm.active, + policy: this.settingForm.policy, + }; + let body = JSON.stringify(newUser); + console.log(body); + const res = await http.post( + "/api/admin/repository/" + + this.storage.name + + "/" + + this.repo.name + + "/modify/settings/general", + body, + { + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + this.$cookie.getCookie("token"), + }, + } + ); + if (res.status != 200) { + console.log("Data" + res.data); + return; + } + const result = res.data; + let value = JSON.stringify(result); + console.log(value); + + let response: BasicResponse = JSON.parse(value); + + if (response.success) { + this.$notify({ + title: "Updated Repository", + type: "success", + }); + } else { + this.settingForm.error = "Unable to Update Storage"; + } + }, + async submitFrontend() { + if (this.storage.id == 0) { + return; + } + let newUser = { + frontend: { + enabled: this.frontendForm.frontend_enabled, + page_provider: this.frontendForm.frontend_page_provider + }, + badge: { + style: this.frontendForm.badge_style, + label_color: this.frontendForm.badge_label_color, + color: this.frontendForm.badge_color + }, + }; + let body = JSON.stringify(newUser); + console.log(body); + const res = await http.post( + "/api/admin/repository/" + + this.storage.name + + "/" + + this.repo.name + + "/modify/settings/frontend", body, { headers: { @@ -238,7 +331,10 @@ export default defineComponent({ let response: BasicResponse = JSON.parse(value); if (response.success) { - router.push("/"); + this.$notify({ + title: "Updated Repository", + type: "success", + }); } else { this.settingForm.error = "Unable to Update Storage"; } diff --git a/src/repository/admin/controller.rs b/src/repository/admin/controller.rs index 5b89b35b..db6ee242 100644 --- a/src/repository/admin/controller.rs +++ b/src/repository/admin/controller.rs @@ -8,7 +8,7 @@ use crate::error::request_error::RequestError::{NotAuthorized, NotFound}; use crate::repository::action::{ add_new_repository, get_repo_by_name_and_storage, get_repositories, update_repo, }; -use crate::repository::models::{Repository, RepositorySettings, SecurityRules, Visibility}; +use crate::repository::models::{Repository, RepositorySettings, SecurityRules, UpdateFrontend, UpdateSettings, Visibility}; use crate::storage::action::get_storage_by_name; use crate::system::utils::get_user_by_header; use crate::utils::{get_current_time, installed}; @@ -96,12 +96,12 @@ pub async fn add_repo( return Ok(APIResponse::new(true, Some(option))); } -#[post("/api/admin/repository/{storage}/{repo}/modify/settings")] -pub async fn modify_settings( +#[post("/api/admin/repository/{storage}/{repo}/modify/settings/general")] +pub async fn modify_general_settings( pool: web::Data, r: HttpRequest, path: web::Path<(String, String)>, - nc: web::Json, + nc: web::Json, ) -> Result, RequestError> { let connection = pool.get()?; installed(&connection)?; @@ -109,11 +109,32 @@ pub async fn modify_settings( if !admin.permissions.admin { return Err(NotAuthorized); } - let string = path.0 .1.clone(); + let string = path.0 .0.clone(); + let storage = get_storage_by_name(string, &connection)?.ok_or(NotFound)?; + let mut repository = get_repo_by_name_and_storage(path.0 .1.clone(), storage.id, &connection)? + .ok_or(NotFound)?; + repository.settings.update_general(nc.0); + update_repo(&repository, &connection)?; + return Ok(APIResponse::new(true, Some(repository))); +} +#[post("/api/admin/repository/{storage}/{repo}/modify/settings/frontend")] +pub async fn modify_frontend_settings( + pool: web::Data, + r: HttpRequest, + path: web::Path<(String, String)>, + nc: web::Json, +) -> Result, RequestError> { + let connection = pool.get()?; + installed(&connection)?; + let admin = get_user_by_header(r.headers(), &connection)?.ok_or_else(|| NotAuthorized)?; + if !admin.permissions.admin { + return Err(NotAuthorized); + } + let string = path.0 .0.clone(); let storage = get_storage_by_name(string, &connection)?.ok_or(NotFound)?; let mut repository = get_repo_by_name_and_storage(path.0 .1.clone(), storage.id, &connection)? .ok_or(NotFound)?; - repository.settings.update(nc.0.clone()); + repository.settings.update_frontend(nc.0); update_repo(&repository, &connection)?; return Ok(APIResponse::new(true, Some(repository))); } diff --git a/src/repository/admin/mod.rs b/src/repository/admin/mod.rs index 1f041ec0..e34594b4 100644 --- a/src/repository/admin/mod.rs +++ b/src/repository/admin/mod.rs @@ -5,5 +5,6 @@ pub fn init(cfg: &mut web::ServiceConfig) { cfg.service(controller::add_repo) .service(controller::list_repos) .service(controller::modify_security) - .service(controller::modify_settings); + .service(controller::modify_frontend_settings) + .service(controller::modify_general_settings); } diff --git a/src/repository/badge.rs b/src/repository/badge.rs index 306eae10..95e8da71 100644 --- a/src/repository/badge.rs +++ b/src/repository/badge.rs @@ -2,7 +2,7 @@ use crate::error::request_error::RequestError; use crate::repository::action::get_repo_by_name_and_storage; use crate::repository::maven::MavenHandler; -use crate::repository::models::Repository; +use crate::repository::models::{BadgeSettings, Repository}; use crate::repository::repository::{RepositoryRequest, RepositoryType}; use crate::storage::action::get_storage_by_name; @@ -28,7 +28,9 @@ use usvg::Options; pub struct ListRepositories { pub repositories: Vec, } - +fn file_name(b_s: &BadgeSettings, version: &String, t: &str)->String{ + return format!("badge-{}-{}-{}-{}.{}", b_s.style.to_badge_maker_style(), b_s.color, b_s.label_color, version.clone(), t); +} fn load_fonts() -> usvg::fontdb::Database { let mut fontdb = usvg::fontdb::Database::new(); fontdb.load_system_fonts(); @@ -84,22 +86,23 @@ pub async fn badge( create_dir_all(&buf1)?; } let typ = path.0.3.clone(); + let b_s = repository.settings.badge; let buf = buf1 .clone() - .join(format!("badge-{}.{}", x.clone(), typ.clone())); + .join(file_name(&b_s, &x, typ.as_str())); if buf.exists() { return Ok(NamedFile::open(buf)?.into_response(&r)?); } - let svg_file = buf1.clone().join(format!("badge-{}.svg", x.clone())); + let svg_file = buf1.clone().join(file_name(&b_s, &x, typ.as_str())); if !svg_file.exists() { let svg: String = BadgeBuilder::new() .style(Style::Flat) .label(repository.name.as_str()) .message(x.as_str()) - .style(repository.settings.badge.style.to_badge_maker_style()) - .color_parse(repository.settings.badge.color.as_str()) - .label_color_parse(repository.settings.badge.label_color.as_str()) + .style(b_s.style.to_badge_maker_style()) + .color_parse(b_s.color.as_str()) + .label_color_parse(b_s.label_color.as_str()) .build() .unwrap() .svg(); @@ -130,7 +133,7 @@ pub async fn badge( let mut pixmap1 = tiny_skia::Pixmap::new(size.width(), size.height()).unwrap(); let pixmap = pixmap1.as_mut(); resvg::render(&result, fit_to, pixmap).unwrap(); - let svg_file = buf1.clone().join(format!("badge-{}.png", x.clone())); + let svg_file = buf1.clone().join(file_name(&b_s, &x, typ.as_str())); pixmap1.save_png(svg_file).unwrap(); } diff --git a/src/repository/models.rs b/src/repository/models.rs index c036ccc7..4b093386 100644 --- a/src/repository/models.rs +++ b/src/repository/models.rs @@ -161,12 +161,25 @@ pub struct RepositorySettings { #[serde(default = "BadgeSettings::default")] pub badge: BadgeSettings, } - +#[derive(Debug, Serialize, Deserialize)] +pub struct UpdateSettings{ + pub active: bool, + pub policy: Policy +} +#[derive(Debug, Serialize, Deserialize)] +pub struct UpdateFrontend{ + pub frontend: Frontend, + pub badge: BadgeSettings +} impl RepositorySettings { - pub fn update(&mut self, settings: RepositorySettings) { + pub fn update_general(&mut self, settings: UpdateSettings) { self.policy = settings.policy; self.active = settings.active; } + pub fn update_frontend(&mut self, settings: UpdateFrontend) { + self.frontend = settings.frontend; + self.badge = settings.badge; + } } impl SecurityRules {