@@ -2,26 +2,34 @@ use actix_auth::{AuthStatus, RequestAuth, RequestAuthExt};
2
2
use actix_proxy:: { ClientRequest , HeaderName , HeaderValue , WebsocketsRequest } ;
3
3
use actix_web:: error:: ErrorForbidden ;
4
4
5
- fn check_auth ( request_auth : & RequestAuth ) -> Result < String , actix_web:: Error > {
5
+ struct UserInformation {
6
+ identity : String ,
7
+ name : String ,
8
+ }
9
+
10
+ fn check_auth ( request_auth : & RequestAuth ) -> Result < UserInformation , actix_web:: Error > {
6
11
match request_auth. status ( ) {
7
12
AuthStatus :: Unknown => Err ( ErrorForbidden ( "authentication required" ) ) ,
8
13
AuthStatus :: Error ( _) => Err ( ErrorForbidden ( "authentication error" ) ) ,
9
14
AuthStatus :: Known {
10
15
provider_handler,
11
16
user_id,
12
- ..
17
+ username ,
13
18
} => {
14
19
let provider_id = request_auth. context ( ) . get_provider_id ( * provider_handler) ;
15
- let remote_user = format ! ( "{provider_id}/{user_id}" ) ;
16
- Ok ( remote_user)
20
+ Ok ( UserInformation {
21
+ identity : format ! ( "{provider_id}/{user_id}" ) ,
22
+ name : username. clone ( ) . unwrap_or_default ( ) ,
23
+ } )
17
24
}
18
25
}
19
26
}
20
27
21
28
#[ derive( Clone ) ]
22
29
pub struct ProxyAuthAdapter ;
23
30
24
- static AUTH_USER_ID : HeaderName = HeaderName :: from_static ( "x-remote-user" ) ;
31
+ static AUTH_USER_ID : HeaderName = HeaderName :: from_static ( "x-remote-user-identity" ) ;
32
+ static AUTH_USER_NAME : HeaderName = HeaderName :: from_static ( "x-remote-user-name" ) ;
25
33
26
34
impl actix_proxy:: RequestModifier for ProxyAuthAdapter {
27
35
fn modify_http_request (
@@ -34,7 +42,15 @@ impl actix_proxy::RequestModifier for ProxyAuthAdapter {
34
42
} ;
35
43
let remote_user = check_auth ( & request_auth) ?;
36
44
let headers = back_request. headers_mut ( ) ;
37
- headers. insert ( AUTH_USER_ID . clone ( ) , HeaderValue :: from_str ( & remote_user) ?) ;
45
+ headers. insert (
46
+ AUTH_USER_ID . clone ( ) ,
47
+ HeaderValue :: from_str ( & remote_user. identity ) ?,
48
+ ) ;
49
+ headers. insert (
50
+ AUTH_USER_NAME . clone ( ) ,
51
+ HeaderValue :: from_str ( & remote_user. name ) ?,
52
+ ) ;
53
+
38
54
Ok ( ( ) )
39
55
}
40
56
@@ -47,6 +63,8 @@ impl actix_proxy::RequestModifier for ProxyAuthAdapter {
47
63
return Err ( ErrorForbidden ( "missing authentication data" ) ) ;
48
64
} ;
49
65
let remote_user = check_auth ( & request_auth) ?;
50
- Ok ( back_request. set_header ( AUTH_USER_ID . clone ( ) , remote_user) )
66
+ Ok ( back_request
67
+ . set_header ( AUTH_USER_ID . clone ( ) , remote_user. identity )
68
+ . set_header ( AUTH_USER_NAME . clone ( ) , remote_user. name ) )
51
69
}
52
70
}
0 commit comments