nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 119 lines 3.7 kB view raw
1let 2 certs = import ./common/acme/server/snakeoil-certs.nix; 3 domain = certs.domain; 4in 5{ pkgs, ... }: 6{ 7 name = "alps"; 8 meta = with pkgs.lib.maintainers; { 9 maintainers = [ hmenke ]; 10 }; 11 12 nodes = { 13 server = { 14 imports = [ ./common/user-account.nix ]; 15 security.pki.certificateFiles = [ 16 certs.ca.cert 17 ]; 18 networking.extraHosts = '' 19 127.0.0.1 ${domain} 20 ''; 21 networking.firewall.allowedTCPPorts = [ 22 25 23 465 24 993 25 ]; 26 services.postfix = { 27 enable = true; 28 enableSubmission = true; 29 enableSubmissions = true; 30 tlsTrustedAuthorities = "${certs.ca.cert}"; 31 config.smtpd_tls_chain_files = [ 32 "${certs.${domain}.key}" 33 "${certs.${domain}.cert}" 34 ]; 35 }; 36 services.dovecot2 = { 37 enable = true; 38 enableImap = true; 39 sslCACert = "${certs.ca.cert}"; 40 sslServerCert = "${certs.${domain}.cert}"; 41 sslServerKey = "${certs.${domain}.key}"; 42 }; 43 }; 44 45 client = 46 { nodes, config, ... }: 47 { 48 security.pki.certificateFiles = [ 49 certs.ca.cert 50 ]; 51 networking.extraHosts = '' 52 ${nodes.server.config.networking.primaryIPAddress} ${domain} 53 ''; 54 services.alps = { 55 enable = true; 56 theme = "alps"; 57 imaps = { 58 host = domain; 59 port = 993; 60 }; 61 smtps = { 62 host = domain; 63 port = 465; 64 }; 65 }; 66 environment.systemPackages = [ 67 (pkgs.writers.writePython3Bin "test-alps-login" { } '' 68 from urllib.request import build_opener, HTTPCookieProcessor, Request 69 from urllib.parse import urlencode, urljoin 70 from http.cookiejar import CookieJar 71 72 baseurl = "http://localhost:${toString config.services.alps.port}" 73 username = "alice" 74 password = "${nodes.server.config.users.users.alice.password}" 75 cookiejar = CookieJar() 76 cookieprocessor = HTTPCookieProcessor(cookiejar) 77 opener = build_opener(cookieprocessor) 78 79 data = urlencode({"username": username, "password": password}).encode() 80 req = Request(urljoin(baseurl, "login"), data=data, method="POST") 81 with opener.open(req) as ret: 82 # Check that the alps_session cookie is set 83 print(cookiejar) 84 assert any(cookie.name == "alps_session" for cookie in cookiejar) 85 86 req = Request(baseurl) 87 with opener.open(req) as ret: 88 # Check that the alps_session cookie is still there... 89 print(cookiejar) 90 assert any(cookie.name == "alps_session" for cookie in cookiejar) 91 # ...and that we have not been redirected back to the login page 92 print(ret.url) 93 assert ret.url == urljoin(baseurl, "mailbox/INBOX") 94 95 req = Request(urljoin(baseurl, "logout")) 96 with opener.open(req) as ret: 97 # Check that the alps_session cookie is now gone 98 print(cookiejar) 99 assert all(cookie.name != "alps_session" for cookie in cookiejar) 100 '') 101 ]; 102 }; 103 }; 104 105 testScript = 106 { nodes, ... }: 107 '' 108 server.start() 109 server.wait_for_unit("postfix.service") 110 server.wait_for_unit("dovecot2.service") 111 server.wait_for_open_port(465) 112 server.wait_for_open_port(993) 113 114 client.start() 115 client.wait_for_unit("alps.service") 116 client.wait_for_open_port(${toString nodes.client.config.services.alps.port}) 117 client.succeed("test-alps-login") 118 ''; 119}