45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								import ./make-test.nix ({ pkgs, ... }: {
							 | 
						||
| 
								 | 
							
								  name = "nginx-sso";
							 | 
						||
| 
								 | 
							
								  meta = {
							 | 
						||
| 
								 | 
							
								    maintainers = with pkgs.stdenv.lib.maintainers; [ delroth ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  machine = {
							 | 
						||
| 
								 | 
							
								    services.nginx.sso = {
							 | 
						||
| 
								 | 
							
								      enable = true;
							 | 
						||
| 
								 | 
							
								      configuration = {
							 | 
						||
| 
								 | 
							
								        listen = { addr = "127.0.0.1"; port = 8080; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        providers.token.tokens = {
							 | 
						||
| 
								 | 
							
								          myuser = "MyToken";
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        acl = {
							 | 
						||
| 
								 | 
							
								          rule_sets = [
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								              rules = [ { field = "x-application"; equals = "MyApp"; } ];
							 | 
						||
| 
								 | 
							
								              allow = [ "myuser" ];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          ];
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = ''
							 | 
						||
| 
								 | 
							
								    startAll;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $machine->waitForUnit("nginx-sso.service");
							 | 
						||
| 
								 | 
							
								    $machine->waitForOpenPort(8080);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # No valid user -> 401.
							 | 
						||
| 
								 | 
							
								    $machine->fail("curl -sSf http://localhost:8080/auth");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Valid user but no matching ACL -> 403.
							 | 
						||
| 
								 | 
							
								    $machine->fail("curl -sSf -H 'Authorization: Token MyToken' http://localhost:8080/auth");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Valid user and matching ACL -> 200.
							 | 
						||
| 
								 | 
							
								    $machine->succeed("curl -sSf -H 'Authorization: Token MyToken' -H 'X-Application: MyApp' http://localhost:8080/auth");
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |