 478e7184f8
			
		
	
	
		478e7184f8
		
			
		
	
	
	
	
		
			
			And replace them with a more appropriate type Also fix up some minor module problems along the way
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, ... }:
 | |
| with lib;
 | |
| let
 | |
|   cfg = config.services.oauth2_proxy.nginx;
 | |
| in
 | |
| {
 | |
|   options.services.oauth2_proxy.nginx = {
 | |
|     proxy = mkOption {
 | |
|       type = types.str;
 | |
|       default = config.services.oauth2_proxy.httpAddress;
 | |
|       description = ''
 | |
|         The address of the reverse proxy endpoint for oauth2_proxy
 | |
|       '';
 | |
|     };
 | |
|     virtualHosts = mkOption {
 | |
|       type = types.listOf types.str;
 | |
|       default = [];
 | |
|       description = ''
 | |
|         A list of nginx virtual hosts to put behind the oauth2 proxy
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
|   config.services.oauth2_proxy = mkIf (cfg.virtualHosts != [] && (hasPrefix "127.0.0.1:" cfg.proxy)) {
 | |
|     enable = true;
 | |
|   };
 | |
|   config.services.nginx = mkMerge ((optional (cfg.virtualHosts != []) {
 | |
|     recommendedProxySettings = true; # needed because duplicate headers
 | |
|   }) ++ (map (vhost: {
 | |
|     virtualHosts.${vhost} = {
 | |
|       locations."/oauth2/" = {
 | |
|         proxyPass = cfg.proxy;
 | |
|         extraConfig = ''
 | |
|           proxy_set_header X-Scheme                $scheme;
 | |
|           proxy_set_header X-Auth-Request-Redirect $request_uri;
 | |
|         '';
 | |
|       };
 | |
|       locations."/oauth2/auth" = {
 | |
|         proxyPass = cfg.proxy;
 | |
|         extraConfig = ''
 | |
|           proxy_set_header X-Scheme         $scheme;
 | |
|           # nginx auth_request includes headers but not body
 | |
|           proxy_set_header Content-Length   "";
 | |
|           proxy_pass_request_body           off;
 | |
|         '';
 | |
|       };
 | |
|       locations."/".extraConfig = ''
 | |
|         auth_request /oauth2/auth;
 | |
|         error_page 401 = /oauth2/sign_in;
 | |
| 
 | |
|         # pass information via X-User and X-Email headers to backend,
 | |
|         # requires running with --set-xauthrequest flag
 | |
|         auth_request_set $user   $upstream_http_x_auth_request_user;
 | |
|         auth_request_set $email  $upstream_http_x_auth_request_email;
 | |
|         proxy_set_header X-User  $user;
 | |
|         proxy_set_header X-Email $email;
 | |
| 
 | |
|         # if you enabled --cookie-refresh, this is needed for it to work with auth_request
 | |
|         auth_request_set $auth_cookie $upstream_http_set_cookie;
 | |
|         add_header Set-Cookie $auth_cookie;
 | |
|       '';
 | |
| 
 | |
|     };
 | |
|   }) cfg.virtualHosts));
 | |
| }
 |