authelia/test/suites/NetworkACL/scenarii/NetworkACLs.ts
Clement Michaud a991379a74 Declare suites as Go structs and bootstrap e2e test framework in Go.
Some tests are not fully rewritten in Go, a typescript wrapper is called
instead until we remove the remaining TS tests and dependencies.

Also, dockerize every components (mainly Authelia backend, frontend and kind)
so that the project does not interfere with user host anymore (open ports for instance).
The only remaining intrusive change is the one done during bootstrap to add entries in /etc/hosts.
It will soon be avoided using authelia.com domain that I own.
2019-11-15 20:23:06 +01:00

77 lines
2.9 KiB
TypeScript

import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver";
import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp";
import FillLoginPageAndClick from "../../../helpers/FillLoginPageAndClick";
import ValidateTotp from "../../../helpers/ValidateTotp";
import VerifySecretObserved from "../../../helpers/assertions/VerifySecretObserved";
import VisitPageAndWaitUrlIs from "../../../helpers/behaviors/VisitPageAndWaitUrlIs";
import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs";
import VisitPage from "../../../helpers/VisitPage";
async function createClient(id: number) {
return await StartDriver({
proxyType: "manual",
httpProxy: `http://proxy-client${id}.example.com:3128`
});
}
export default function() {
before(async function() {
const driver = await StartDriver();
this.secret = await LoginAndRegisterTotp(driver, "john", "password", true);
if (!this.secret) throw new Error('No secret!');
await StopDriver(driver);
});
describe("Standard client (from public network)", function() {
before(async function() {
this.driver = await StartDriver();
});
after(async function() {
await StopDriver(this.driver);
});
it("should require two factor", async function() {
await VisitPage(this.driver, "https://secure.example.com:8080/secret.html");
await VerifyUrlIs(this.driver, "https://login.example.com:8080/#/?rd=https://secure.example.com:8080/secret.html");
await FillLoginPageAndClick(this.driver, "john", "password");
await ValidateTotp(this.driver, this.secret);
await VerifyUrlIs(this.driver, "https://secure.example.com:8080/secret.html");
await VerifySecretObserved(this.driver);
});
})
describe("Client 1 (from network 192.168.240.201/32)", function() {
before(async function() {
this.client1 = await createClient(1);
});
after(async function() {
await StopDriver(this.client1);
});
it("should require one factor", async function() {
await VisitPage(this.client1, "https://secure.example.com:8080/secret.html");
await VerifyUrlIs(this.client1, "https://login.example.com:8080/#/?rd=https://secure.example.com:8080/secret.html");
await FillLoginPageAndClick(this.client1, 'john', 'password');
await VerifyUrlIs(this.client1, "https://secure.example.com:8080/secret.html");
await VerifySecretObserved(this.client1);
});
});
describe("Client 2 (from network 192.168.240.202/32)", function() {
before(async function() {
this.client2 = await createClient(2);
});
after(async function() {
await StopDriver(this.client2);
});
it("should bypass", async function() {
await VisitPageAndWaitUrlIs(this.client2, "https://secure.example.com:8080/secret.html");
await VerifyUrlIs(this.client2, "https://secure.example.com:8080/secret.html");
await VerifySecretObserved(this.client2);
});
});
}