1+ use crate :: api:: v1:: util:: auth;
2+ use crate :: config:: Config ;
13use crate :: db:: Pool ;
24use crate :: models:: { NewSourcePackageTagRule , NewTag } ;
35use crate :: schema:: { tag_rules, tags} ;
46use crate :: web;
5- use actix_web:: { delete, get, post, HttpResponse , Responder } ;
7+ use actix_web:: { delete, get, post, HttpRequest , HttpResponse , Responder } ;
68use diesel:: { delete, ExpressionMethods } ;
79use diesel:: { QueryDsl , RunQueryDsl } ;
810use rebuilderd_common:: api:: v1:: { CreateTagRequest , CreateTagRuleRequest , TagRule } ;
@@ -22,9 +24,15 @@ pub async fn get_tags(pool: web::Data<Pool>) -> web::Result<impl Responder> {
2224
2325#[ post( "" ) ]
2426pub async fn create_tag (
27+ req : HttpRequest ,
28+ cfg : web:: Data < Config > ,
2529 pool : web:: Data < Pool > ,
2630 request : web:: Json < CreateTagRequest > ,
2731) -> web:: Result < impl Responder > {
32+ if auth:: admin ( & cfg, & req) . is_err ( ) {
33+ return Ok ( HttpResponse :: Forbidden ( ) . finish ( ) ) ;
34+ }
35+
2836 let mut connection = pool. get ( ) . map_err ( Error :: from) ?;
2937
3038 let tag = NewTag {
@@ -37,9 +45,15 @@ pub async fn create_tag(
3745
3846#[ delete( "/{tag}" ) ]
3947pub async fn delete_tag (
48+ req : HttpRequest ,
49+ cfg : web:: Data < Config > ,
4050 pool : web:: Data < Pool > ,
4151 tag : web:: Path < String > ,
4252) -> web:: Result < impl Responder > {
53+ if auth:: admin ( & cfg, & req) . is_err ( ) {
54+ return Ok ( HttpResponse :: Forbidden ( ) . finish ( ) ) ;
55+ }
56+
4357 let mut connection = pool. get ( ) . map_err ( Error :: from) ?;
4458
4559 delete ( tags:: table. filter ( tags:: tag. eq ( tag. into_inner ( ) ) ) )
@@ -72,10 +86,16 @@ pub async fn get_tag_rules(
7286
7387#[ post( "/{tag}" ) ]
7488pub async fn create_tag_rule (
89+ req : HttpRequest ,
90+ cfg : web:: Data < Config > ,
7591 pool : web:: Data < Pool > ,
7692 tag : web:: Path < String > ,
7793 request : web:: Json < CreateTagRuleRequest > ,
7894) -> web:: Result < impl Responder > {
95+ if auth:: admin ( & cfg, & req) . is_err ( ) {
96+ return Ok ( HttpResponse :: Forbidden ( ) . finish ( ) ) ;
97+ }
98+
7999 let mut connection = pool. get ( ) . map_err ( Error :: from) ?;
80100
81101 let tag_id = tags:: table
@@ -96,9 +116,15 @@ pub async fn create_tag_rule(
96116
97117#[ delete( "/{tag}/{id}" ) ]
98118pub async fn delete_tag_rule (
119+ req : HttpRequest ,
120+ cfg : web:: Data < Config > ,
99121 pool : web:: Data < Pool > ,
100122 parameters : web:: Path < ( String , i32 ) > ,
101123) -> web:: Result < impl Responder > {
124+ if auth:: admin ( & cfg, & req) . is_err ( ) {
125+ return Ok ( HttpResponse :: Forbidden ( ) . finish ( ) ) ;
126+ }
127+
102128 let mut connection = pool. get ( ) . map_err ( Error :: from) ?;
103129 let ( tag, tag_rule_id) = parameters. into_inner ( ) ;
104130
0 commit comments