WIP: feat/automated-account-deletion #174
3 changed files with 27 additions and 29 deletions
8
flake.lock
generated
8
flake.lock
generated
|
@ -335,11 +335,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737810569,
|
||||
"narHash": "sha256-b3ymxmPuMPnAG6Z8FNErmKzjmUcQkXiTs6WkAE1qBkk=",
|
||||
"lastModified": 1737819581,
|
||||
"narHash": "sha256-i9rZSxy33BlDpp4JY9SI2zEFo5EhMnS7cAhqHAPRUZA=",
|
||||
"ref": "main",
|
||||
"rev": "af99e9e38fcbdd691c12aa6044cf831c8eea28b4",
|
||||
"revCount": 6,
|
||||
"rev": "bb9c6f3e3608f0d342ab74d921caddfe4a8bf5d6",
|
||||
"revCount": 7,
|
||||
"type": "git",
|
||||
"url": "https://git.pub.solar/pub-solar/keycloak-event-listener"
|
||||
},
|
||||
|
|
|
@ -50,26 +50,22 @@ in
|
|||
def puppeteer_execute(cmd):
|
||||
return client.execute(f'puppeteer-run \'{cmd}\' ')
|
||||
|
||||
def puppeteer_scroll_into_view(selector):
|
||||
return puppeteer_succeed(f'(async () => {{ const el = await page.$(`{selector}`); console.log(el); return el.scrollIntoView(); }})()')
|
||||
|
||||
start_all()
|
||||
|
||||
acme_server.wait_for_unit("system.slice")
|
||||
mail_server.wait_for_unit("dovecot2.service")
|
||||
mail_server.wait_for_unit("postfix.service")
|
||||
mail_server.wait_for_unit("nginx.service")
|
||||
mail_server.wait_until_succeeds("curl http://mail.test.pub.solar/")
|
||||
|
||||
auth_server.wait_for_unit("system.slice")
|
||||
auth_server.succeed("ping 127.0.0.1 -c 2")
|
||||
auth_server.wait_for_unit("nginx.service")
|
||||
|
||||
auth_server.wait_for_unit("keycloak.service")
|
||||
auth_server.wait_for_open_port(8080)
|
||||
auth_server.wait_for_open_port(443)
|
||||
auth_server.wait_until_succeeds("curl http://127.0.0.1:8080/")
|
||||
auth_server.wait_until_succeeds("curl https://auth.test.pub.solar/")
|
||||
auth_server.succeed("${pkgs.keycloak}/bin/kcadm.sh create realms -f ${realm-export} --server http://localhost:8080 --realm master --user admin --password password --no-config")
|
||||
auth_server.wait_until_succeeds("curl https://auth.test.pub.solar/")
|
||||
|
||||
client.wait_for_unit("system.slice")
|
||||
client.wait_for_file("/tmp/puppeteer.sock")
|
||||
|
||||
####### Registration #######
|
||||
|
@ -88,6 +84,12 @@ in
|
|||
puppeteer_succeed('page.locator("[name=password]").fill("Password1234")')
|
||||
puppeteer_succeed('page.locator("[name=password-confirm]").fill("Password1234")')
|
||||
client.screenshot("register-filled-in")
|
||||
|
||||
# Make sure the mail server is ready to send
|
||||
mail_server.wait_for_unit("dovecot2.service")
|
||||
mail_server.wait_for_unit("postfix.service")
|
||||
|
||||
mail_server.wait_until_succeeds("curl http://mail.test.pub.solar/")
|
||||
puppeteer_succeed('page.locator("input[type=submit][value=Register]").click()')
|
||||
puppeteer_succeed('page.waitForNetworkIdle()')
|
||||
client.screenshot("before-email-confirm")
|
||||
|
@ -187,10 +189,15 @@ in
|
|||
puppeteer_succeed('page.waitForNetworkIdle()')
|
||||
client.screenshot("TOTP-login-form")
|
||||
|
||||
print("Sleeping 30s to make sure we roll over into the next TOTP token")
|
||||
time.sleep(30)
|
||||
print('Setting all system clocks 30 seconds ahead for next TOTP token')
|
||||
client.execute("date --set='+30 seconds'");
|
||||
auth_server.execute("date --set='+30 seconds'");
|
||||
dns_server.execute("date --set='+30 seconds'");
|
||||
acme_server.execute("date --set='+30 seconds'");
|
||||
mail_server.execute("date --set='+30 seconds'");
|
||||
|
||||
totp = client.execute(f'oathtool --totp -b "{totp_secret_key}"')[1].replace("\n", "")
|
||||
|
||||
puppeteer_succeed(f'page.locator("[name=otp]").fill("{totp}")')
|
||||
puppeteer_succeed('page.locator("::-p-text(Sign In)").click()')
|
||||
|
||||
|
@ -199,10 +206,11 @@ in
|
|||
|
||||
####### Delete TOTP #######
|
||||
|
||||
puppeteer_succeed('page.locator(`[data-testid="otp/credential-list"] button::-p-text(Delete)`).click()')
|
||||
puppeteer_succeed('page.waitForNetworkIdle()')
|
||||
puppeteer_scroll_into_view('[data-testid="otp/credential-list"]')
|
||||
time.sleep(0.2)
|
||||
client.screenshot("TOTP-before-delete")
|
||||
|
||||
puppeteer_succeed('page.locator("main").scroll({ scrollTop: 200 })')
|
||||
client.screenshot("TOTP-deleted")
|
||||
# puppeteer_succeed('page.locator(`[data-testid="otp/credential-list"] button::-p-text(Delete)`).click()')
|
||||
# client.screenshot("TOTP-deleted")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -16,13 +16,6 @@ const EXECUTABLE = process.env.EXECUTABLE || 'firefox';
|
|||
});
|
||||
|
||||
const page = await firefoxBrowser.newPage();
|
||||
// page.on('request', request => {
|
||||
// console.log(`[puppeteer req] ${request.url()}`);
|
||||
// });
|
||||
|
||||
// page.on('response', response => {
|
||||
// console.log(`[puppeteer res] ${response.url()}`);
|
||||
// });
|
||||
|
||||
await page.setViewport({
|
||||
width: 1200,
|
||||
|
@ -41,10 +34,7 @@ const EXECUTABLE = process.env.EXECUTABLE || 'firefox';
|
|||
req.on('end', async () => {
|
||||
try {
|
||||
const content = chunks.join('');
|
||||
|
||||
console.log(`Executing ${content}`);
|
||||
const val = await eval(content);
|
||||
|
||||
const responseText = (() => {
|
||||
try {
|
||||
return val.toString();
|
||||
|
@ -64,6 +54,6 @@ const EXECUTABLE = process.env.EXECUTABLE || 'firefox';
|
|||
});
|
||||
|
||||
server.listen(PUPPETEER_SOCKET, () => {
|
||||
console.log('Listening!');
|
||||
console.log('[puppeteer-socket] Listening!');
|
||||
});
|
||||
})();
|
||||
|
|
Loading…
Add table
Reference in a new issue