Page MenuHomePhorge

D5718.1774884631.diff
No OneTemporary

Authored By
Unknown
Size
20 KB
Referenced Files
None
Subscribers
None

D5718.1774884631.diff

diff --git a/config.demo/src/database/seeds/UserSeeder.php b/config.demo/src/database/seeds/UserSeeder.php
--- a/config.demo/src/database/seeds/UserSeeder.php
+++ b/config.demo/src/database/seeds/UserSeeder.php
@@ -132,7 +132,6 @@
'last_name' => 'Flanders',
'currency' => 'USD',
'country' => 'US',
- 'guam_enabled' => false,
]
);
diff --git a/src/app/Http/Controllers/API/V4/NGINXController.php b/src/app/Http/Controllers/API/V4/NGINXController.php
--- a/src/app/Http/Controllers/API/V4/NGINXController.php
+++ b/src/app/Http/Controllers/API/V4/NGINXController.php
@@ -229,7 +229,7 @@
// All checks passed
switch ($request->headers->get('Auth-Protocol')) {
case 'imap':
- return $this->authenticateIMAP($request, (bool) $user->getSetting('guam_enabled'), $password);
+ return $this->authenticateIMAP($request, $password);
case 'smtp':
return $this->authenticateSMTP($request, $password);
default:
@@ -273,7 +273,7 @@
// All checks passed
switch ($request->headers->get('Auth-Protocol')) {
case 'imap':
- return $this->authenticateIMAP($request, false, $password);
+ return $this->authenticateIMAP($request, $password);
default:
return $this->byebye($request, "unknown protocol in request");
}
@@ -283,22 +283,15 @@
* Create an imap authentication response.
*
* @param Request $request the API request
- * @param bool $prefGuam whether or not Guam is enabled
* @param string $password the password to include in the response
*/
- private function authenticateIMAP(Request $request, $prefGuam, $password): Response
+ private function authenticateIMAP(Request $request, $password): Response
{
- if ($prefGuam) {
- $port = \config('services.imap.guam_port');
- } else {
- $port = \config('services.imap.imap_port');
- }
-
$response = response('')->withHeaders(
[
"Auth-Status" => "OK",
"Auth-Server" => gethostbyname(\config('services.imap.host')),
- "Auth-Port" => $port,
+ "Auth-Port" => \config('services.imap.imap_port'),
"Auth-Pass" => $password,
]
);
diff --git a/src/app/Http/Controllers/API/V4/UsersController.php b/src/app/Http/Controllers/API/V4/UsersController.php
--- a/src/app/Http/Controllers/API/V4/UsersController.php
+++ b/src/app/Http/Controllers/API/V4/UsersController.php
@@ -271,6 +271,7 @@
'enableWalletMandates' => $isOwner,
'enableCompanionapps' => $hasBeta && \config('app.with_companion_app'),
'enableLoginAs' => $isController && \config('app.with_loginas'),
+ 'enableGeoLockin' => $isController && $hasBeta && \config('app.with_geolockin'),
];
return array_merge($process, $result);
diff --git a/src/app/Traits/UserConfigTrait.php b/src/app/Traits/UserConfigTrait.php
--- a/src/app/Traits/UserConfigTrait.php
+++ b/src/app/Traits/UserConfigTrait.php
@@ -22,7 +22,6 @@
'externalsender_policy_domains',
'greylist_enabled',
'greylist_policy',
- 'guam_enabled',
'itip_config',
'itip_policy',
'limit_geo',
@@ -46,7 +45,6 @@
$config[$key] = $value !== 'false';
break;
case 'externalsender_policy':
- case 'guam_enabled':
case 'itip_policy':
$config[$key] = $value === 'true';
break;
@@ -87,8 +85,6 @@
$this->setSetting($key, $value ? 'true' : 'false');
} elseif (in_array($key, ['greylist_enabled', 'itip_config', 'externalsender_config'])) {
$this->setSetting($key, $value === null ? null : ($value ? 'true' : 'false'));
- } elseif ($key == 'guam_enabled') {
- $this->setSetting($key, $value ? 'true' : null);
} elseif ($key == 'limit_geo') {
if ($error = $this->validateLimitGeo($value)) {
$errors[$key] = $error;
diff --git a/src/app/User.php b/src/app/User.php
--- a/src/app/User.php
+++ b/src/app/User.php
@@ -824,6 +824,10 @@
*/
public function validateLocation($ip): bool
{
+ if (!\config('app.with_geolockin')) {
+ return true;
+ }
+
$countryCodes = json_decode($this->getSetting('limit_geo', "[]"));
if (empty($countryCodes)) {
diff --git a/src/config/app.php b/src/config/app.php
--- a/src/config/app.php
+++ b/src/config/app.php
@@ -255,6 +255,7 @@
'with_subscriptions' => (bool) env('APP_WITH_SUBSCRIPTIONS', true),
'with_wallet' => (bool) env('APP_WITH_WALLET', true),
'with_delegation' => (bool) env('APP_WITH_DELEGATION', true),
+ 'with_geolockin' => (bool) env('APP_WITH_GEOLOCKIN', true),
'with_loginas' => (bool) env('APP_WITH_LOGINAS', false),
'with_distlists' => (bool) env('APP_WITH_DISTLISTS', true),
'with_shared_folders' => (bool) env('APP_WITH_SHARED_FOLDERS', true),
diff --git a/src/config/services.php b/src/config/services.php
--- a/src/config/services.php
+++ b/src/config/services.php
@@ -72,7 +72,6 @@
'verify_host' => env('IMAP_VERIFY_HOST', true),
'host' => env('IMAP_HOST', '172.18.0.5'),
'imap_port' => env('IMAP_PORT', 12143),
- 'guam_port' => env('IMAP_GUAM_PORT', 9143),
'default_folders' => Helper::defaultImapFolders(),
],
diff --git a/src/resources/lang/en/ui.php b/src/resources/lang/en/ui.php
--- a/src/resources/lang/en/ui.php
+++ b/src/resources/lang/en/ui.php
@@ -547,8 +547,6 @@
'finances' => "Finances",
'geolimit' => "Geo-lockin",
'geolimit-text' => "Defines a list of locations that are allowed for logon. You will not be able to login from a country that is not listed here.",
- 'imapproxy' => "IMAP proxy",
- 'imapproxy-text' => "Enables IMAP proxy that filters out non-mail groupware folders, so your IMAP clients do not see them.",
'list-title' => "User accounts",
'list-empty' => "There are no users in this account.",
'login-as' => "Log into webmail",
diff --git a/src/resources/vue/Admin/User.vue b/src/resources/vue/Admin/User.vue
--- a/src/resources/vue/Admin/User.vue
+++ b/src/resources/vue/Admin/User.vue
@@ -219,15 +219,6 @@
</span>
</div>
</div>
- <div class="row plaintext">
- <label for="guam_enabled" class="col-sm-4 col-form-label">{{ $t('user.imapproxy') }}</label>
- <div class="col-sm-8">
- <span class="form-control-plaintext" id="guam_enabled">
- <span v-if="user.config.guam_enabled" class="text-success">{{ $t('form.enabled') }}</span>
- <span v-else class="text-danger">{{ $t('form.disabled') }}</span>
- </span>
- </div>
- </div>
<div class="row plaintext">
<label for="limit_geo" class="col-sm-4 col-form-label">{{ $t('user.geolimit') }}</label>
<div class="col-sm-8">
diff --git a/src/resources/vue/User/Info.vue b/src/resources/vue/User/Info.vue
--- a/src/resources/vue/User/Info.vue
+++ b/src/resources/vue/User/Info.vue
@@ -104,19 +104,7 @@
<accordion class="mt-3" id="settings-all" :names="settingsSections" :buttons="settingsButtons">
<template #options v-if="settingsSections.options">
<form @submit.prevent="submitSettings">
- <div v-if="$root.hasPermission('beta')" class="row checkbox mb-3">
- <label for="guam_enabled" class="col-sm-4 col-form-label">
- {{ $t('user.imapproxy') }}
- <sup class="badge bg-primary">{{ $t('dashboard.beta') }}</sup>
- </label>
- <div class="col-sm-8 pt-2">
- <input type="checkbox" id="guam_enabled" name="guam_enabled" value="1" class="form-check-input d-block mb-2" :checked="user.config.guam_enabled">
- <small id="guam-hint" class="text-muted">
- {{ $t('user.imapproxy-text') }}
- </small>
- </div>
- </div>
- <div v-if="$root.hasPermission('beta')" class="row mb-3">
+ <div v-if="$root.hasPermission('geoLockin')" class="row mb-3">
<label for="limit_geo" class="col-sm-4 col-form-label">
{{ $t('user.geolimit') }}
<sup class="badge bg-primary">{{ $t('dashboard.beta') }}</sup>
@@ -386,7 +374,7 @@
settingsSections: function () {
let opts = {}
if (this.isController) {
- if (this.$root.hasPermission('beta')) {
+ if (this.$root.hasPermission('geoLockin')) {
opts.options = this.$t('form.mainopts')
}
opts.maildelivery = this.$t('policies.mailDelivery')
@@ -639,14 +627,8 @@
submitSettings() {
this.$root.clearFormValidation($('#settings form'))
- let post = this.$root.pick(this.user.config, ['limit_geo'])
- const names = ['guam_enabled']
-
- names.forEach(name => {
- if ($('#' + name).length) {
- post[name] = $('#' + name).prop('checked') ? 1 : 0
- }
- })
+ let opts = this.$root.hasPermission('geoLockin') ? ['limit_geo'] : []
+ let post = this.$root.pick(this.user.config, opts)
axios.post('/api/v4/users/' + this.user_id + '/config', post)
.then(response => {
diff --git a/src/tests/Browser/Admin/UserTest.php b/src/tests/Browser/Admin/UserTest.php
--- a/src/tests/Browser/Admin/UserTest.php
+++ b/src/tests/Browser/Admin/UserTest.php
@@ -92,7 +92,6 @@
$jack->setSettings([
'limit_geo' => null,
'organization' => null,
- 'guam_enabled' => null,
'greylist_enabled' => null,
'greylist_policy' => null,
]);
@@ -765,8 +764,8 @@
$browser->visit(new UserPage($user->id))
->click('@nav #tab-settings')
->whenAvailable('@user-settings form', static function (Browser $browser) {
- $browser->assertSeeIn('.row:nth-child(3) label', 'Geo-lockin')
- ->assertSeeIn('.row:nth-child(3) #limit_geo', 'Poland, Germany')
+ $browser->assertSeeIn('.row:nth-child(2) label', 'Geo-lockin')
+ ->assertSeeIn('.row:nth-child(2) #limit_geo', 'Poland, Germany')
->assertSeeIn('#limit_geo + button', 'Reset')
->click('#limit_geo + button');
})
diff --git a/src/tests/Browser/UsersTest.php b/src/tests/Browser/UsersTest.php
--- a/src/tests/Browser/UsersTest.php
+++ b/src/tests/Browser/UsersTest.php
@@ -431,7 +431,6 @@
$john = $this->getTestUser('john@kolab.org');
$john->setSetting('greylist_enabled', null);
$john->setSetting('greylist_policy', null);
- $john->setSetting('guam_enabled', null);
$john->setSetting('limit_geo', null);
$john->setSetting('externalsender_config', 'false');
@@ -477,32 +476,26 @@
->click('@nav #tab-settings')
->assertSeeIn('@setting-options-head', 'Main options')
->with('@setting-options', function (Browser $browser) use ($john) {
- $browser->assertSeeIn('div.row:nth-child(1) label', 'IMAP proxy')
- ->assertNotChecked('div.row:nth-child(1) input')
- ->assertSeeIn('div.row:nth-child(2) label', 'Geo-lockin')
+ $browser->assertSeeIn('div.row:nth-child(1) label', 'Geo-lockin')
->with(new CountrySelect('#limit_geo'), static function ($browser) {
$browser->assertCountries([])
->setCountries(['CH', 'PL'])
->assertCountries(['CH', 'PL']);
})
- ->click('div.row:nth-child(1) input')
->click('button[type=submit]')
->assertToast(Toast::TYPE_SUCCESS, 'User settings updated successfully.');
$this->assertSame('["CH","PL"]', $john->getSetting('limit_geo'));
- $this->assertSame('true', $john->getSetting('guam_enabled'));
$browser
->with(new CountrySelect('#limit_geo'), static function ($browser) {
$browser->setCountries([])
->assertCountries([]);
})
- ->click('div.row:nth-child(1) input')
->click('button[type=submit]')
->assertToast(Toast::TYPE_SUCCESS, 'User settings updated successfully.');
$this->assertNull($john->getSetting('limit_geo'));
- $this->assertNull($john->getSetting('guam_enabled'));
});
});
}
diff --git a/src/tests/Feature/Controller/NGINXTest.php b/src/tests/Feature/Controller/NGINXTest.php
--- a/src/tests/Feature/Controller/NGINXTest.php
+++ b/src/tests/Feature/Controller/NGINXTest.php
@@ -20,7 +20,6 @@
AuthAttempt::where('user_id', $john->id)->delete();
$john->setSettings([
'limit_geo' => null,
- 'guam_enabled' => null,
'password_expired' => null,
]);
IP4Net::where('net_number', inet_pton('128.0.0.0'))->delete();
@@ -35,7 +34,6 @@
AuthAttempt::where('user_id', $john->id)->delete();
$john->setSettings([
'limit_geo' => null,
- 'guam_enabled' => null,
'password_expired' => null,
]);
IP4Net::where('net_number', inet_pton('128.0.0.0'))->delete();
@@ -130,15 +128,6 @@
$response->assertStatus(200);
$response->assertHeader('auth-status', 'authentication failure');
- // Guam
- $john->setSettings(['guam_enabled' => 'true']);
-
- $response = $this->withHeaders($headers)->get("api/webhooks/nginx");
- $response->assertStatus(200);
- $response->assertHeader('auth-status', 'OK');
- $response->assertHeader('auth-server', gethostbyname(\config('services.imap.host')));
- $response->assertHeader('auth-port', \config('services.imap.guam_port'));
-
$companionApp = $this->getTestCompanionApp(
'testdevice',
$john,
diff --git a/src/tests/Feature/Controller/UsersTest.php b/src/tests/Feature/Controller/UsersTest.php
--- a/src/tests/Feature/Controller/UsersTest.php
+++ b/src/tests/Feature/Controller/UsersTest.php
@@ -48,11 +48,11 @@
$wallet->discount()->dissociate();
$wallet->settings()->whereIn('key', ['mollie_id', 'stripe_id'])->delete();
$wallet->save();
- $user->settings()->whereIn('key', ['greylist_enabled', 'guam_enabled'])->delete();
+ $user->settings()->whereIn('key', ['greylist_enabled'])->delete();
$user->status |= User::STATUS_IMAP_READY | User::STATUS_LDAP_READY | User::STATUS_ACTIVE;
$user->save();
Plan::withEnvTenantContext()->where('title', 'individual')->update(['mode' => 'email']);
- Plan::withEnvTenantContext()->where('name', 'Test')->delete();
+ Plan::withEnvTenantContext()->whereIn('title', ['user-test1', 'user-test2', 'device-test'])->delete();
$user->setSettings(['plan_id' => null]);
}
@@ -79,11 +79,11 @@
$wallet->discount()->dissociate();
$wallet->settings()->whereIn('key', ['mollie_id', 'stripe_id'])->delete();
$wallet->save();
- $user->settings()->whereIn('key', ['greylist_enabled', 'guam_enabled'])->delete();
+ $user->settings()->whereIn('key', ['greylist_enabled'])->delete();
$user->status |= User::STATUS_IMAP_READY | User::STATUS_LDAP_READY | User::STATUS_ACTIVE;
$user->save();
Plan::withEnvTenantContext()->where('title', 'individual')->update(['mode' => 'email']);
- Plan::withEnvTenantContext()->where('name', 'Test')->delete();
+ Plan::withEnvTenantContext()->whereIn('title', ['user-test1', 'user-test2', 'device-test'])->delete();
$user->setSettings(['plan_id' => null]);
$folder = $this->getTestSharedFolder('folder-mail@kolab.org');
$folder->setAliases([]);
@@ -396,7 +396,6 @@
$this->assertTrue(is_array($json['statusInfo']));
$this->assertTrue(is_array($json['settings']));
$this->assertNull($json['config']['greylist_enabled']);
- $this->assertFalse($json['config']['guam_enabled']);
$this->assertSame([], $json['skus']);
$this->assertSame([], $json['aliases']);
// Values below are tested by Unit tests
@@ -782,7 +781,6 @@
$john = $this->getTestUser('john@kolab.org');
$john->setSetting('greylist_enabled', null);
- $john->setSetting('guam_enabled', null);
$john->setSetting('password_policy', null);
$john->setSetting('max_password_age', null);
@@ -831,7 +829,6 @@
// Test some valid data
$post = [
'greylist_enabled' => 1,
- 'guam_enabled' => 1,
'password_policy' => 'min:10,max:255,upper,lower,digit,special',
'max_password_age' => 6,
];
@@ -846,7 +843,6 @@
$this->assertSame('User settings updated successfully.', $json['message']);
$this->assertSame('true', $john->getSetting('greylist_enabled'));
- $this->assertSame('true', $john->getSetting('guam_enabled'));
$this->assertSame('min:10,max:255,upper,lower,digit,special', $john->getSetting('password_policy'));
$this->assertSame('6', $john->getSetting('max_password_age'));
}
diff --git a/src/tests/Feature/UserTest.php b/src/tests/Feature/UserTest.php
--- a/src/tests/Feature/UserTest.php
+++ b/src/tests/Feature/UserTest.php
@@ -564,7 +564,6 @@
{
$user = $this->getTestUser('UserAccountA@UserAccount.com');
$user->setSetting('greylist_enabled', null);
- $user->setSetting('guam_enabled', null);
$user->setSetting('password_policy', null);
$user->setSetting('max_password_age', null);
$user->setSetting('limit_geo', null);
@@ -585,21 +584,6 @@
$this->assertTrue($user->getConfig()['greylist_enabled']);
$this->assertSame('true', $user->getSetting('greylist_enabled'));
- // guam_enabled
- $this->assertFalse($user->getConfig()['guam_enabled']);
-
- $result = $user->setConfig(['guam_enabled' => false]);
-
- $this->assertSame([], $result);
- $this->assertFalse($user->getConfig()['guam_enabled']);
- $this->assertNull($user->getSetting('guam_enabled'));
-
- $result = $user->setConfig(['guam_enabled' => true]);
-
- $this->assertSame([], $result);
- $this->assertTrue($user->getConfig()['guam_enabled']);
- $this->assertSame('true', $user->getSetting('guam_enabled'));
-
// max_apssword_age
$this->assertNull($user->getConfig()['max_password_age']);

File Metadata

Mime Type
text/plain
Expires
Mon, Mar 30, 3:30 PM (2 d, 19 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18815316
Default Alt Text
D5718.1774884631.diff (20 KB)

Event Timeline