Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117764522
D5718.1775227308.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
20 KB
Referenced Files
None
Subscribers
None
D5718.1775227308.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Fri, Apr 3, 2:41 PM (16 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18815316
Default Alt Text
D5718.1775227308.diff (20 KB)
Attached To
Mode
D5718: Remove Guam proxy option
Attached
Detach File
Event Timeline