@@ -31,22 +31,31 @@ impl<T: SlackClientHttpConnector + Send + Sync> Lambda<'_, T> {
3131 }
3232
3333 pub async fn handler ( & self , req : Request ) -> Result < Response < Body > , Error > {
34- let parsed_url = Url :: parse ( & req. uri ( ) . to_string ( ) ) . unwrap ( ) ;
35- let hash_query: HashMap < String , String > = parsed_url. query_pairs ( ) . into_owned ( ) . collect ( ) ;
36- let secret = hash_query. get ( "secret" ) . map ( |x| & * * x) ;
37-
38- // https://vercel.com/docs/cron-jobs#how-to-secure-cron-jobs
39- if secret != Some ( "geheim" ) {
40- return Ok ( Response :: builder ( )
41- . status ( StatusCode :: NOT_FOUND )
42- . body ( ( ) . into ( ) ) ?) ;
43- }
34+ let token_value = std:: env:: var ( "CRON_SECRET" ) ?;
35+ let headers = req. headers ( ) ;
36+
37+ match headers. get ( "authorization" ) {
38+ None => {
39+ return Ok ( Response :: builder ( )
40+ . status ( StatusCode :: NOT_FOUND )
41+ . body ( ( ) . into ( ) ) ?) ;
42+ }
43+ Some ( authorization_header) => {
44+ let authorization_string = authorization_header. to_str ( ) . unwrap ( ) ;
4445
45- let message = SlackMessage { } ;
46+ if authorization_string != format ! ( "Bearer {}" , token_value) {
47+ return Ok ( Response :: builder ( )
48+ . status ( StatusCode :: NOT_FOUND )
49+ . body ( ( ) . into ( ) ) ?) ;
50+ }
4651
47- self . post_message ( & message, "#general" ) . await ? ;
52+ let message = SlackMessage { } ;
4853
49- Ok ( Response :: builder ( ) . status ( StatusCode :: OK ) . body ( ( ) . into ( ) ) ?)
54+ self . post_message ( & message, "#general" ) . await ?;
55+
56+ Ok ( Response :: builder ( ) . status ( StatusCode :: OK ) . body ( ( ) . into ( ) ) ?)
57+ }
58+ }
5059 }
5160}
5261
0 commit comments