@@ -2,16 +2,20 @@ use actix_web::{web, HttpRequest, HttpResponse, Responder};
22
33use crate :: common:: WebAppData ;
44use crate :: config;
5- use crate :: errors:: { ServiceError , ServiceResult } ;
5+ use crate :: errors:: ServiceResult ;
66use crate :: models:: response:: OkResponse ;
77use crate :: routes:: API_VERSION ;
88
99pub fn init ( cfg : & mut web:: ServiceConfig ) {
1010 cfg. service (
1111 web:: scope ( & format ! ( "/{API_VERSION}/settings" ) )
12- . service ( web:: resource ( "" ) . route ( web:: get ( ) . to ( get) ) . route ( web:: post ( ) . to ( update) ) )
13- . service ( web:: resource ( "/name" ) . route ( web:: get ( ) . to ( site_name) ) )
14- . service ( web:: resource ( "/public" ) . route ( web:: get ( ) . to ( get_public) ) ) ,
12+ . service (
13+ web:: resource ( "" )
14+ . route ( web:: get ( ) . to ( get_all_handler) )
15+ . route ( web:: post ( ) . to ( update_handler) ) ,
16+ )
17+ . service ( web:: resource ( "/name" ) . route ( web:: get ( ) . to ( get_site_name_handler) ) )
18+ . service ( web:: resource ( "/public" ) . route ( web:: get ( ) . to ( get_public_handler) ) ) ,
1519 ) ;
1620}
1721
@@ -20,42 +24,12 @@ pub fn init(cfg: &mut web::ServiceConfig) {
2024/// # Errors
2125///
2226/// This function will return an error if unable to get user from database.
23- pub async fn get ( req : HttpRequest , app_data : WebAppData ) -> ServiceResult < impl Responder > {
24- // check for user
25- let user = app_data. auth . get_user_compact_from_request ( & req) . await ?;
27+ pub async fn get_all_handler ( req : HttpRequest , app_data : WebAppData ) -> ServiceResult < impl Responder > {
28+ let user_id = app_data. auth . get_user_id_from_request ( & req) . await ?;
2629
27- // check if user is administrator
28- if !user. administrator {
29- return Err ( ServiceError :: Unauthorized ) ;
30- }
30+ let all_settings = app_data. settings_service . get_all ( & user_id) . await ?;
3131
32- let settings: tokio:: sync:: RwLockReadGuard < config:: TorrustBackend > = app_data. cfg . settings . read ( ) . await ;
33-
34- Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : & * settings } ) )
35- }
36-
37- /// Get Public Settings
38- ///
39- /// # Errors
40- ///
41- /// This function should not return an error.
42- pub async fn get_public ( app_data : WebAppData ) -> ServiceResult < impl Responder > {
43- let public_settings = app_data. cfg . get_public ( ) . await ;
44-
45- Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : public_settings } ) )
46- }
47-
48- /// Get Name of Website
49- ///
50- /// # Errors
51- ///
52- /// This function should not return an error.
53- pub async fn site_name ( app_data : WebAppData ) -> ServiceResult < impl Responder > {
54- let settings = app_data. cfg . settings . read ( ) . await ;
55-
56- Ok ( HttpResponse :: Ok ( ) . json ( OkResponse {
57- data : & settings. website . name ,
58- } ) )
32+ Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : all_settings } ) )
5933}
6034
6135/// Update the settings
@@ -67,22 +41,36 @@ pub async fn site_name(app_data: WebAppData) -> ServiceResult<impl Responder> {
6741/// - There is no logged-in user.
6842/// - The user is not an administrator.
6943/// - The settings could not be updated because they were loaded from env vars.
70- pub async fn update (
44+ pub async fn update_handler (
7145 req : HttpRequest ,
7246 payload : web:: Json < config:: TorrustBackend > ,
7347 app_data : WebAppData ,
7448) -> ServiceResult < impl Responder > {
75- // check for user
76- let user = app_data. auth . get_user_compact_from_request ( & req) . await ?;
49+ let user_id = app_data. auth . get_user_id_from_request ( & req) . await ?;
50+
51+ let new_settings = app_data. settings_service . update_all ( payload. into_inner ( ) , & user_id) . await ?;
52+
53+ Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : new_settings } ) )
54+ }
7755
78- // check if user is administrator
79- if !user. administrator {
80- return Err ( ServiceError :: Unauthorized ) ;
81- }
56+ /// Get Public Settings
57+ ///
58+ /// # Errors
59+ ///
60+ /// This function should not return an error.
61+ pub async fn get_public_handler ( app_data : WebAppData ) -> ServiceResult < impl Responder > {
62+ let public_settings = app_data. settings_service . get_public ( ) . await ;
8263
83- let _ = app_data. cfg . update_settings ( payload. into_inner ( ) ) . await ;
64+ Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : public_settings } ) )
65+ }
8466
85- let settings = app_data. cfg . settings . read ( ) . await ;
67+ /// Get Name of Website
68+ ///
69+ /// # Errors
70+ ///
71+ /// This function should not return an error.
72+ pub async fn get_site_name_handler ( app_data : WebAppData ) -> ServiceResult < impl Responder > {
73+ let site_name = app_data. settings_service . get_site_name ( ) . await ;
8674
87- Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : & * settings } ) )
75+ Ok ( HttpResponse :: Ok ( ) . json ( OkResponse { data : site_name } ) )
8876}
0 commit comments