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 {