Compare commits

..

19 Commits

Author SHA1 Message Date
Package Updates
d9420c319d Update package version to 1.104.0 2025-02-13 14:40:58 +00:00
Vladimir D
050f4d8a26 tests updated 2025-02-13 18:21:36 +04:00
Renovate Bot
e6d1f16b1d chore(deps): update dependency element-hq/synapse to v1.124.0
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.123.0 | 1.124.0 |
2025-02-12 07:19:36 +00:00
Package Updates
3991b28ba5 Update package version to 1.103.0 2025-01-29 08:44:31 +00:00
Renovate Bot
467685dee3 chore(deps): update dependency element-hq/synapse to v1.123.0
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.122.0 | 1.123.0 |
2025-01-29 07:19:27 +00:00
Package Updates
5a60a8b057 Update package version to 1.102.0 2025-01-15 09:15:08 +00:00
Renovate Bot
c8ed7b7882 chore(deps): update dependency element-hq/synapse to v1.122.0
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.121.1 | 1.122.0 |
2025-01-15 07:19:59 +00:00
Package Updates
3b5069dd3e Update package version to 1.101.1 2024-12-25 09:27:06 +00:00
Vladimir D
bb28b946d2 CLOUDRON_OIDC_PROVIDER_NAME implemented, tests updated and fixed 2024-12-24 23:27:38 +04:00
Girish Ramakrishnan
99117698a6 Version 1.101.0 2024-12-22 20:42:34 +01:00
Girish Ramakrishnan
b279638c84 no session 2024-12-22 18:45:56 +01:00
Girish Ramakrishnan
c9c9259808 clear cache after update 2024-12-22 18:25:13 +01:00
Girish Ramakrishnan
91b6c529e3 try to fix tests 2024-12-22 18:02:29 +01:00
Girish Ramakrishnan
d2bfffb179 Update test packages 2024-12-22 16:36:54 +01:00
Renovate Bot
4692c12d60 chore(deps): update dependency element-hq/synapse to v1.121.1
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.120.2 | 1.121.1 |
2024-12-12 07:19:54 +00:00
Package Updates
6bcfb0a0c6 Update package version to 1.100.1 2024-12-03 17:54:25 +00:00
Renovate Bot
f6997147c6 chore(deps): update dependency element-hq/synapse to v1.120.2
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.120.0 | 1.120.2 |
2024-12-03 16:50:28 +00:00
Package Updates
e4a405a5f1 Update package version to 1.100.0 2024-11-27 11:04:27 +00:00
Renovate Bot
e475e1ec34 chore(deps): update dependency element-hq/synapse to v1.120.0
| datasource      | package            | from    | to      |
| --------------- | ------------------ | ------- | ------- |
| github-releases | element-hq/synapse | 1.119.0 | 1.120.0 |
2024-11-27 07:19:53 +00:00
7 changed files with 921 additions and 1375 deletions

View File

@@ -1316,3 +1316,36 @@
* Add an index to `current_state_delta_stream` table. ([#​17912](https://github.com/element-hq/synapse/issues/17912)) * Add an index to `current_state_delta_stream` table. ([#​17912](https://github.com/element-hq/synapse/issues/17912))
* Fix building and attaching release artifacts during the release process. ([#​17921](https://github.com/element-hq/synapse/issues/17921)) * Fix building and attaching release artifacts during the release process. ([#​17921](https://github.com/element-hq/synapse/issues/17921))
[1.100.0]
* Update synapse to 1.120.0
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.118.0)
* Fix a bug introduced in Synapse v1.120rc1 which would cause the newly-introduced `delete_old_otks` job to fail in worker-mode deployments. ([#​17960](https://github.com/element-hq/synapse/issues/17960))
[1.100.1]
* Update synapse to 1.120.2
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.118.0)
[1.101.0]
* Update synapse to 1.121.1
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.121.0)
* Support for MSC4190: device management for Application Services. (#17705)
* Update MSC4186 Sliding Sync to include invite, ban, kick, targets when $LAZY-loading room members. (#17947)
* Use stable M_USER_LOCKED error code for locked accounts, as per Matrix 1.12. (#17965)
* MSC4076: Add disable_badge_count to pusher configuration. (#17975)
[1.101.1]
* CLOUDRON_OIDC_PROVIDER_NAME implemented
[1.102.0]
* Update synapse to 1.122.0
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.122.0)
[1.103.0]
* Update synapse to 1.123.0
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.123.0)
[1.104.0]
* Update synapse to 1.124.0
* [Full Changelog](https://github.com/element-hq/synapse/releases/tag/v1.124.0)

View File

@@ -5,8 +5,8 @@
"description": "file://DESCRIPTION.md", "description": "file://DESCRIPTION.md",
"changelog": "file://CHANGELOG.md", "changelog": "file://CHANGELOG.md",
"tagline": "Secure & decentralized communication", "tagline": "Secure & decentralized communication",
"version": "1.99.0", "version": "1.104.0",
"upstreamVersion": "1.119.0", "upstreamVersion": "1.124.0",
"healthCheckPath": "/", "healthCheckPath": "/",
"httpPort": 8008, "httpPort": 8008,
"memoryLimit": 536870912, "memoryLimit": 536870912,

View File

@@ -10,7 +10,7 @@ ENV VIRTUAL_ENV=/app/code/env
ENV PATH="$VIRTUAL_ENV/bin:$PATH" ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# renovate: datasource=github-releases depName=element-hq/synapse versioning=semver extractVersion=^v(?<version>.+)$ # renovate: datasource=github-releases depName=element-hq/synapse versioning=semver extractVersion=^v(?<version>.+)$
ARG SYNAPSE_VERSION=1.119.0 ARG SYNAPSE_VERSION=1.124.0
# renovate: datasource=github-releases depName=matrix-org/synapse-s3-storage-provider versioning=semver extractVersion=^v(?<version>.+)$ # renovate: datasource=github-releases depName=matrix-org/synapse-s3-storage-provider versioning=semver extractVersion=^v(?<version>.+)$
ARG S3PROVIDER_VERSION=1.5.0 ARG S3PROVIDER_VERSION=1.5.0

View File

@@ -70,7 +70,7 @@ if [[ -n "${CLOUDRON_OIDC_ISSUER:-}" ]]; then
yq eval -i "del(.password_providers)" /app/data/configs/homeserver.yaml # remove old ldap config yq eval -i "del(.password_providers)" /app/data/configs/homeserver.yaml # remove old ldap config
echo " ==> Configuring OIDC auth" echo " ==> Configuring OIDC auth"
yq eval -i ".oidc_providers[0].idp_id=\"cloudron\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].idp_id=\"cloudron\"" /app/data/configs/homeserver.yaml
yq eval -i ".oidc_providers[0].idp_name=\"Cloudron\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].idp_name=\"${CLOUDRON_OIDC_PROVIDER_NAME:-Cloudron}\"" /app/data/configs/homeserver.yaml
yq eval -i ".oidc_providers[0].issuer=\"${CLOUDRON_OIDC_ISSUER}\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].issuer=\"${CLOUDRON_OIDC_ISSUER}\"" /app/data/configs/homeserver.yaml
yq eval -i ".oidc_providers[0].client_id=\"${CLOUDRON_OIDC_CLIENT_ID}\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].client_id=\"${CLOUDRON_OIDC_CLIENT_ID}\"" /app/data/configs/homeserver.yaml
yq eval -i ".oidc_providers[0].client_secret=\"${CLOUDRON_OIDC_CLIENT_SECRET}\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].client_secret=\"${CLOUDRON_OIDC_CLIENT_SECRET}\"" /app/data/configs/homeserver.yaml

2129
test/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,9 +9,9 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"chromedriver": "^129.0.2", "chromedriver": "^133.0.0",
"expect.js": "^0.3.1", "expect.js": "^0.3.1",
"mocha": "^10.7.3", "mocha": "^11.1.0",
"selenium-webdriver": "^4.25.0" "selenium-webdriver": "^4.28.1"
} }
} }

View File

@@ -91,6 +91,7 @@ describe('Application life cycle test', function () {
async function updateSynapseConfig() { async function updateSynapseConfig() {
console.log(`Setting Synapse Matrix server location to "https://${app.fqdn}"`); console.log(`Setting Synapse Matrix server location to "https://${app.fqdn}"`);
execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`); execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`);
execSync(`cloudron restart --app ${ELEMENT_LOCATION}`); execSync(`cloudron restart --app ${ELEMENT_LOCATION}`);
// wait when all services are up and running // wait when all services are up and running
@@ -106,61 +107,91 @@ describe('Application life cycle test', function () {
await browser.get(`https://${elementApp.fqdn}/#/register`); await browser.get(`https://${elementApp.fqdn}/#/register`);
await waitForElement(By.xpath('//input[@label="Username"]')); await waitForElement(By.xpath('//input[@label="Username"]'));
await browser.findElement(By.xpath('//input[@label="Username"]')).sendKeys(USERNAME); await browser.findElement(By.xpath('//input[@label="Username"]')).sendKeys(USERNAME);
await browser.sleep(2000);
await browser.findElement(By.xpath('//input[@label="Password"]')).sendKeys(PASSWORD); await browser.findElement(By.xpath('//input[@label="Password"]')).sendKeys(PASSWORD);
await browser.sleep(2000);
await browser.findElement(By.xpath('//input[@label="Confirm password"]')).sendKeys(PASSWORD); await browser.findElement(By.xpath('//input[@label="Confirm password"]')).sendKeys(PASSWORD);
await browser.sleep(2000);
await browser.findElement(By.xpath('//input[@value="Register"]')).click(); await browser.findElement(By.xpath('//input[@value="Register"]')).click();
await browser.sleep(2000);
await waitForElement(By.xpath('//h1[text()="You\'re in"]')); await waitForElement(By.xpath('//h1[text()="You\'re in"] | //h1[contains(., "Welcome")]'));
await browser.sleep(2000); if (await browser.findElements(By.xpath('//div[@role="button" and text()="Skip"]')).then(found => !!found.length)) {
await browser.findElement(By.xpath('//div[@role="button" and text()="Skip"]')).click(); await browser.findElement(By.xpath('//div[@role="button" and text()="Skip"]')).click();
await browser.sleep(2000); }
await waitForElement(By.xpath(`//h1[contains(., "Welcome")]`)); await waitForElement(By.xpath(`//h1[contains(., "Welcome")]`));
} }
async function loginOIDC(username, password, hasSession, proceedWithReset) { async function loginOIDC(username, password, alreadyAuthenticated, proceedWithReset) {
browser.manage().deleteAllCookies(); browser.manage().deleteAllCookies();
await browser.get(`https://${elementApp.fqdn}/#/login`); await browser.get(`https://${elementApp.fqdn}/#/login`);
await browser.sleep(6000);
await waitForElement(By.xpath('//div[@role="button" and contains(., "Continue with Cloudron")]'));
await browser.findElement(By.xpath('//div[@role="button" and contains(., "Continue with Cloudron")]')).click();
await browser.sleep(2000); await browser.sleep(2000);
if (!hasSession) { await waitForElement(By.css('.mx_Dropdown_arrow'));
await browser.findElement(By.css('.mx_Dropdown_arrow')).click();
await waitForElement(By.id('mx_LanguageDropdown__en'));
await browser.findElement(By.id('mx_LanguageDropdown__en')).click();
await browser.sleep(3000);
await waitForElement(By.xpath('//div[@role="button" and contains(., "Continue with")]'));
await browser.findElement(By.xpath('//div[@role="button" and contains(., "Continue with")]')).click();
if (!alreadyAuthenticated) {
await waitForElement(By.xpath('//input[@name="username"]')); await waitForElement(By.xpath('//input[@name="username"]'));
await browser.findElement(By.xpath('//input[@name="username"]')).sendKeys(username); await browser.findElement(By.xpath('//input[@name="username"]')).sendKeys(username);
await browser.findElement(By.xpath('//input[@name="password"]')).sendKeys(password); await browser.findElement(By.xpath('//input[@name="password"]')).sendKeys(password);
await browser.sleep(2000);
await browser.findElement(By.id('loginSubmitButton')).click(); await browser.findElement(By.id('loginSubmitButton')).click();
await browser.sleep(2000);
} }
await waitForElement(By.xpath('//p[@class="confirm-trust" and contains(., "Continuing will grant ")]')); await waitForElement(By.xpath('//p[@class="confirm-trust" and contains(., "Continuing will grant ")]'));
await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click(); await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click();
await browser.sleep(2000);
if (proceedWithReset) { if (proceedWithReset) {
await waitForElement(By.xpath('//div[text()="Proceed with reset" or text()="Reset all"]'));
if (await browser.findElements(By.xpath('//div[text()="Reset all"]')).then(found => !!found.length)) {
await browser.findElement(By.xpath('//div[text()="Reset all"]')).click();
}
await waitForElement(By.xpath('//div[text()="Proceed with reset"]'));
await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click(); await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click();
await waitForElement(By.xpath('//button[text()="Continue"]')); await waitForElement(By.xpath('//button[@class="mx_Dialog_primary" and text()="Continue"]'));
await browser.findElement(By.xpath('//button[text()="Continue"]')).click(); await browser.findElement(By.xpath('//button[@class="mx_Dialog_primary" and text()="Continue"]')).click();
await waitForElement(By.xpath('//div[text()="Copy"]')); await waitForElement(By.xpath('//div[text()="Copy"]'));
await browser.findElement(By.xpath('//div[text()="Copy"]')).click(); await browser.findElement(By.xpath('//div[text()="Copy"]')).click();
await browser.sleep(1000); await waitForElement(By.xpath('//button[@class="mx_Dialog_primary" and text()="Continue"]'));
await browser.findElement(By.xpath('//button[@class="mx_Dialog_primary" and text()="Continue"]')).click();
await waitForElement(By.xpath('//button[text()="Done"] | //div[text()="Single Sign On"]'));
await waitForElement(By.xpath('//button[text()="Continue"]')); if (await browser.findElements(By.xpath('//div[text()="Single Sign On"]')).then(found => !!found.length)) {
await browser.findElement(By.xpath('//button[text()="Continue"]')).click();
await browser.findElement(By.xpath('//div[text()="Single Sign On"]')).click();
const originalWindowHandle = await browser.getWindowHandle();
await browser.wait(async () => (await browser.getAllWindowHandles()).length === 2, 10000);
//Loop through until we find a new window handle
const windows = await browser.getAllWindowHandles();
windows.forEach(async handle => {
if (handle !== originalWindowHandle) {
await browser.switchTo().window(handle);
}
});
await waitForElement(By.xpath('//a[contains(., "Continue with")]'));
await browser.findElement(By.xpath('//a[contains(., "Continue with")]')).click();
// switch back to the main window
await browser.switchTo().window(originalWindowHandle);
await waitForElement(By.xpath('//div[text()="Confirm"]'));
await browser.findElement(By.xpath('//div[text()="Confirm"]')).click();
}
await waitForElement(By.xpath('//button[text()="Done"]')); await waitForElement(By.xpath('//button[text()="Done"]'));
await browser.findElement(By.xpath('//button[text()="Done"]')).click(); await browser.findElement(By.xpath('//button[text()="Done"]')).click();
await waitForElement(By.xpath('//div[text()="Cancel"]')); await waitForElement(By.xpath('//div[text()="Cancel"] | //h1[contains(., "Welcome")]'));
await browser.findElement(By.xpath('//div[text()="Cancel"]')).click(); if (await browser.findElements(By.xpath('//div[text()="Cancel"]')).then(found => !!found.length)) {
await browser.findElement(By.xpath('//div[text()="Cancel"]')).click();
}
} }
await browser.sleep(3000); await browser.sleep(3000);
@@ -214,18 +245,23 @@ describe('Application life cycle test', function () {
async function createRoom() { async function createRoom() {
await browser.get(`https://${elementApp.fqdn}/#/home`); await browser.get(`https://${elementApp.fqdn}/#/home`);
await browser.sleep(4000); await browser.sleep(2000);
await waitForElement(By.xpath('//div[@role="button" and @aria-label="Add room"]')); await waitForElement(By.xpath('//div[@role="button" and @aria-label="Add room"]'));
await browser.findElement(By.xpath('//div[@role="button" and @aria-label="Add room"]')).click(); await browser.findElement(By.xpath('//div[@role="button" and @aria-label="Add room"]')).click();
await browser.sleep(2000); await browser.sleep(1000);
await waitForElement(By.xpath('//li[@role="menuitem" and @aria-label="New room"]'));
await browser.findElement(By.xpath('//li[@role="menuitem" and @aria-label="New room"]')).click(); await browser.findElement(By.xpath('//li[@role="menuitem" and @aria-label="New room"]')).click();
await browser.sleep(2000); await browser.sleep(1000);
await waitForElement(By.xpath('//input[@label="Name"]'));
await browser.findElement(By.xpath('//input[@label="Name"]')).sendKeys(ROOM_NAME); await browser.findElement(By.xpath('//input[@label="Name"]')).sendKeys(ROOM_NAME);
await browser.sleep(2000);
await browser.sleep(1000);
await waitForElement(By.xpath('//button[text()="Create room"]'));
await browser.findElement(By.xpath('//button[text()="Create room"]')).click(); await browser.findElement(By.xpath('//button[text()="Create room"]')).click();
await browser.sleep(2000);
await browser.sleep(1000);
await waitForElement(By.xpath('//div[@role="button" and @aria-label="Add room"]')); await waitForElement(By.xpath('//div[@role="button" and @aria-label="Add room"]'));
@@ -263,6 +299,7 @@ describe('Application life cycle test', function () {
it('can get Element app info', getElementAppInfo); it('can get Element app info', getElementAppInfo);
it('can register new user', registerUser); it('can register new user', registerUser);
it('create room', createRoom); it('create room', createRoom);
it('can send message', sendMessage); it('can send message', sendMessage);
it('can logout', logout); // from auto-login it('can logout', logout); // from auto-login
@@ -285,7 +322,7 @@ describe('Application life cycle test', function () {
it('can get Element app info', getElementAppInfo); it('can get Element app info', getElementAppInfo);
it('update element-app config', updateSynapseConfig); it('update element-app config', updateSynapseConfig);
it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, false, false /* proceedWithReset */)); it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, false, false));
it('create room', createRoom); it('create room', createRoom);
it('can send message', sendMessage); it('can send message', sendMessage);
it('can get app info', getAppInfo); it('can get app info', getAppInfo);
@@ -315,7 +352,8 @@ describe('Application life cycle test', function () {
it('can logout', logout); it('can logout', logout);
it('can get app info', getAppInfo); it('can get app info', getAppInfo);
it('move to different location', async function () { // web ui also throws random errors after changing domain
xit('move to different location (skipped since no matrix support)', async function () {
browser.manage().deleteAllCookies(); browser.manage().deleteAllCookies();
await browser.get('about:blank'); await browser.get('about:blank');
@@ -323,13 +361,11 @@ describe('Application life cycle test', function () {
getAppInfo(); getAppInfo();
await browser.sleep(15000); await browser.sleep(15000);
}); });
xit('update element-app config', updateSynapseConfig);
it('update element-app config', updateSynapseConfig); xit('can get Element app info', getElementAppInfo);
xit('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, true, true));
it('can get Element app info', getElementAppInfo); xit('check room', checkRoom);
it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, true, true /* proceedWithReset */)); xit('can send message', sendMessage);
it('check room', checkRoom);
it('can send message', sendMessage);
it('uninstall app', async function () { it('uninstall app', async function () {
await browser.get('about:blank'); await browser.get('about:blank');
@@ -347,14 +383,14 @@ describe('Application life cycle test', function () {
it('can install element-web app (update)', function () { execSync('cloudron install --appstore-id im.riot.cloudronapp --location ' + ELEMENT_LOCATION, EXEC_ARGS); }); it('can install element-web app (update)', function () { execSync('cloudron install --appstore-id im.riot.cloudronapp --location ' + ELEMENT_LOCATION, EXEC_ARGS); });
it('can get Element app info', getElementAppInfo); it('can get Element app info', getElementAppInfo);
it('update element-app config', updateSynapseConfig); it('update element-app config', updateSynapseConfig);
it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, false, false /* proceedWithReset */)); it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, false, false));
it('is logged in', isLoggedIn); it('is logged in', isLoggedIn);
it('create room', createRoom); it('create room', createRoom);
it('can send message', sendMessage); it('can send message', sendMessage);
it('can logout', logout); it('can logout', logout);
it('clear cache', clearCache);
it('can update', async function () { it('can update', async function () {
await browser.get('about:blank'); await browser.get('about:blank');
@@ -363,9 +399,11 @@ describe('Application life cycle test', function () {
}); });
it('can get Element app info', getElementAppInfo); it('can get Element app info', getElementAppInfo);
it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, true, true /* proceedWithReset */)); it('can login via OIDC', loginOIDC.bind(null, USERNAME, PASSWORD, false, true));
it('is logged in', isLoggedIn); it('is logged in', isLoggedIn);
it('check room', checkRoom); it('check room', checkRoom);
it('can send message', sendMessage); it('can send message', sendMessage);
it('can get app info', getAppInfo); it('can get app info', getAppInfo);