Skip to content

Commit

Permalink
You can now change frontend and general settings in the repo
Browse files Browse the repository at this point in the history
  • Loading branch information
Wyatt Jacob Herkamp committed Oct 27, 2021
1 parent e5a9d02 commit ba82b8a
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 26 deletions.
114 changes: 105 additions & 9 deletions site/src/components/UpdateRepository.vue
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
</el-select>
</el-form-item>
<!--Yeah, I know. But please don't judge -->
<el-button disabled type="primary" @click="onSettingSubmit"
<el-button type="primary" @click="onSettingSubmit"
>Update Settings</el-button
>
</el-form-item>
Expand All @@ -66,8 +66,8 @@
</el-select>
</el-form-item>
<el-divider></el-divider>
<img :src="exampleBadgeURL" />

<img :src="exampleBadgeURL" />
<el-divider></el-divider>
<el-form-item label="Badge Style ">
<el-select v-model="frontendForm.badge_style">
Expand All @@ -84,7 +84,7 @@
</el-form-item>

<!--Yeah, I know. But please don't judge -->
<el-button disabled type="primary" @click="onSettingSubmit"
<el-button type="primary" @click="submitFrontend"
>Update Frontend Settings</el-button
>
</el-form-item>
Expand All @@ -106,7 +106,7 @@
</el-select>

<!--Yeah, I know. But please don't judge -->
<el-button disabled type="primary" @click="onSettingSubmit"
<el-button disabled type="primary" @click="submitSecurity"
>Update Security Settings</el-button
>
</el-form-item>
Expand Down Expand Up @@ -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;
Expand All @@ -178,7 +178,7 @@ export default defineComponent({
);
storage.value = value;
exampleBadgeURL.value =
baseURL +
baseURL +
"/badge/" +
storage.value.name +
"/" +
Expand Down Expand Up @@ -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<unknown> = 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<unknown> = 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: {
Expand All @@ -238,7 +331,10 @@ export default defineComponent({
let response: BasicResponse<unknown> = JSON.parse(value);
if (response.success) {
router.push("/");
this.$notify({
title: "Updated Repository",
type: "success",
});
} else {
this.settingForm.error = "Unable to Update Storage";
}
Expand Down
33 changes: 27 additions & 6 deletions src/repository/admin/controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -96,24 +96,45 @@ 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<DbPool>,
r: HttpRequest,
path: web::Path<(String, String)>,
nc: web::Json<RepositorySettings>,
nc: web::Json<UpdateSettings>,
) -> Result<APIResponse<Repository>, 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 .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<DbPool>,
r: HttpRequest,
path: web::Path<(String, String)>,
nc: web::Json<UpdateFrontend>,
) -> Result<APIResponse<Repository>, 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)));
}
Expand Down
3 changes: 2 additions & 1 deletion src/repository/admin/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
19 changes: 11 additions & 8 deletions src/repository/badge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,7 +28,9 @@ use usvg::Options;
pub struct ListRepositories {
pub repositories: Vec<Repository>,
}

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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
}
Expand Down
17 changes: 15 additions & 2 deletions src/repository/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit ba82b8a

Please sign in to comment.