at 18.09-beta 2.1 kB view raw
1{ config, lib, ... }: 2with lib; 3let 4 cfg = config.services.oauth2_proxy.nginx; 5in 6{ 7 options.services.oauth2_proxy.nginx = { 8 proxy = mkOption { 9 type = types.string; 10 default = config.services.oauth2_proxy.httpAddress; 11 description = '' 12 The address of the reverse proxy endpoint for oauth2_proxy 13 ''; 14 }; 15 virtualHosts = mkOption { 16 type = types.listOf types.string; 17 default = []; 18 description = '' 19 A list of nginx virtual hosts to put behind the oauth2 proxy 20 ''; 21 }; 22 }; 23 config.services.oauth2_proxy = mkIf (cfg.virtualHosts != [] && (hasPrefix "127.0.0.1:" cfg.proxy)) { 24 enable = true; 25 }; 26 config.services.nginx = mkMerge ((optional (cfg.virtualHosts != []) { 27 recommendedProxySettings = true; # needed because duplicate headers 28 }) ++ (map (vhost: { 29 virtualHosts.${vhost} = { 30 locations."/oauth2/" = { 31 proxyPass = cfg.proxy; 32 extraConfig = '' 33 proxy_set_header X-Scheme $scheme; 34 proxy_set_header X-Auth-Request-Redirect $request_uri; 35 ''; 36 }; 37 locations."/oauth2/auth" = { 38 proxyPass = cfg.proxy; 39 extraConfig = '' 40 proxy_set_header X-Scheme $scheme; 41 # nginx auth_request includes headers but not body 42 proxy_set_header Content-Length ""; 43 proxy_pass_request_body off; 44 ''; 45 }; 46 locations."/".extraConfig = '' 47 auth_request /oauth2/auth; 48 error_page 401 = /oauth2/sign_in; 49 50 # pass information via X-User and X-Email headers to backend, 51 # requires running with --set-xauthrequest flag 52 auth_request_set $user $upstream_http_x_auth_request_user; 53 auth_request_set $email $upstream_http_x_auth_request_email; 54 proxy_set_header X-User $user; 55 proxy_set_header X-Email $email; 56 57 # if you enabled --cookie-refresh, this is needed for it to work with auth_request 58 auth_request_set $auth_cookie $upstream_http_set_cookie; 59 add_header Set-Cookie $auth_cookie; 60 ''; 61 62 }; 63 }) cfg.virtualHosts)); 64}