at 25.11-pre 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 sslCert = "${certs.${domain}.cert}"; 32 sslKey = "${certs.${domain}.key}"; 33 }; 34 services.dovecot2 = { 35 enable = true; 36 enableImap = true; 37 sslCACert = "${certs.ca.cert}"; 38 sslServerCert = "${certs.${domain}.cert}"; 39 sslServerKey = "${certs.${domain}.key}"; 40 }; 41 }; 42 43 client = 44 { nodes, config, ... }: 45 { 46 security.pki.certificateFiles = [ 47 certs.ca.cert 48 ]; 49 networking.extraHosts = '' 50 ${nodes.server.config.networking.primaryIPAddress} ${domain} 51 ''; 52 services.alps = { 53 enable = true; 54 theme = "alps"; 55 imaps = { 56 host = domain; 57 port = 993; 58 }; 59 smtps = { 60 host = domain; 61 port = 465; 62 }; 63 }; 64 environment.systemPackages = [ 65 (pkgs.writers.writePython3Bin "test-alps-login" { } '' 66 from urllib.request import build_opener, HTTPCookieProcessor, Request 67 from urllib.parse import urlencode, urljoin 68 from http.cookiejar import CookieJar 69 70 baseurl = "http://localhost:${toString config.services.alps.port}" 71 username = "alice" 72 password = "${nodes.server.config.users.users.alice.password}" 73 cookiejar = CookieJar() 74 cookieprocessor = HTTPCookieProcessor(cookiejar) 75 opener = build_opener(cookieprocessor) 76 77 data = urlencode({"username": username, "password": password}).encode() 78 req = Request(urljoin(baseurl, "login"), data=data, method="POST") 79 with opener.open(req) as ret: 80 # Check that the alps_session cookie is set 81 print(cookiejar) 82 assert any(cookie.name == "alps_session" for cookie in cookiejar) 83 84 req = Request(baseurl) 85 with opener.open(req) as ret: 86 # Check that the alps_session cookie is still there... 87 print(cookiejar) 88 assert any(cookie.name == "alps_session" for cookie in cookiejar) 89 # ...and that we have not been redirected back to the login page 90 print(ret.url) 91 assert ret.url == urljoin(baseurl, "mailbox/INBOX") 92 93 req = Request(urljoin(baseurl, "logout")) 94 with opener.open(req) as ret: 95 # Check that the alps_session cookie is now gone 96 print(cookiejar) 97 assert all(cookie.name != "alps_session" for cookie in cookiejar) 98 '') 99 ]; 100 }; 101 }; 102 103 testScript = 104 { nodes, ... }: 105 '' 106 server.start() 107 server.wait_for_unit("postfix.service") 108 server.wait_for_unit("dovecot2.service") 109 server.wait_for_open_port(465) 110 server.wait_for_open_port(993) 111 112 client.start() 113 client.wait_for_unit("alps.service") 114 client.wait_for_open_port(${toString nodes.client.config.services.alps.port}) 115 client.succeed("test-alps-login") 116 ''; 117}