Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 16 additions & 11 deletions apps/settings/lib/Controller/MailSettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,10 @@ public function setMailSettings(
string $mail_smtpmode,
string $mail_smtpsecure,
string $mail_smtphost,
?string $mail_smtpauth,
?bool $mail_smtpauth,
string $mail_smtpport,
string $mail_sendmailmode,
?bool $mail_noverify = null,
): DataResponse {
$mail_smtpauth = $mail_smtpauth == '1';

Expand All @@ -76,6 +77,15 @@ public function setMailSettings(
$configs[$key] = empty($value) ? null : $value;
}

if ($mail_noverify !== null) {
$options = $this->config->getSystemValue('mail_smtpstreamoptions', []);
$options['ssl'] ??= [];
$options['ssl']['allow_self_signed'] = $mail_noverify;
$options['ssl']['verify_peer'] = !$mail_noverify;
$options['ssl']['verify_peer_name'] = !$mail_noverify;
$configs['mail_smtpstreamoptions'] = $options;
}

// Delete passwords from config in case no auth is specified
if (!$mail_smtpauth) {
$configs['mail_smtpname'] = null;
Expand All @@ -91,23 +101,18 @@ public function setMailSettings(

/**
* Store the credentials used for SMTP in the config
*
* @param string $mail_smtpname
* @param string $mail_smtppassword
* @return DataResponse
*/
#[AuthorizedAdminSetting(settings: Overview::class)]
#[PasswordConfirmationRequired]
public function storeCredentials($mail_smtpname, $mail_smtppassword) {
public function storeCredentials(string $mail_smtpname, ?string $mail_smtppassword): DataResponse {
if ($mail_smtppassword === '********') {
return new DataResponse($this->l10n->t('Invalid SMTP password.'), Http::STATUS_BAD_REQUEST);
}

$this->config->setSystemValues([
'mail_smtpname' => $mail_smtpname,
'mail_smtppassword' => $mail_smtppassword,
]);

if ($mail_smtppassword !== null) {
$this->config->setSystemValue('mail_smtppassword', $mail_smtppassword);
}
$this->config->setSystemValue('mail_smtpname', $mail_smtpname);
$this->config->setAppValue('core', 'emailTestSuccessful', '0');

return new DataResponse();
Expand Down
67 changes: 49 additions & 18 deletions apps/settings/lib/Settings/Admin/Mail.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,22 @@
namespace OCA\Settings\Settings\Admin;

use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
use OCP\IBinaryFinder;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\Server;
use OCP\Settings\IDelegatedSettings;
use OCP\Util;

class Mail implements IDelegatedSettings {
/**
* @param IConfig $config
* @param IL10N $l
*/

public function __construct(
private IConfig $config,
private IL10N $l,
private IInitialState $initialState,
private IURLGenerator $urlGenerator,
) {
}

Expand All @@ -30,30 +32,59 @@ public function __construct(
public function getForm() {
$finder = Server::get(IBinaryFinder::class);

$parameters = [
// Mail
'sendmail_is_available' => $finder->findBinaryPath('sendmail') !== false,
$smtpModeOptions = [
['label' => 'SMTP', 'id' => 'smtp'],
];
if ($finder->findBinaryPath('sendmail') !== false) {
$smtpModeOptions[] = ['label' => 'Sendmail', 'id' => 'sendmail'];
}
if ($finder->findBinaryPath('qmail') !== false) {
$smtpModeOptions[] = ['label' => 'qmail', 'id' => 'qmail'];
}

$this->initialState->provideInitialState('settingsAdminMail', [
'configIsReadonly' => $this->config->getSystemValueBool('config_is_read_only', false),
'docUrl' => $this->urlGenerator->linkToDocs('admin-email'),

'smtpModeOptions' => $smtpModeOptions,
'smtpEncryptionOptions' => [
['label' => $this->l->t('None / STARTTLS'), 'id' => ''],
['label' => 'SSL/TLS', 'id' => 'ssl'],
],
'smtpSendmailModeOptions' => [
['label' => 'smtp (-bs)', 'id' => 'smtp'],
['label' => 'pipe (-t -i)', 'id' => 'pipe'],
],
]);

$smtpPassword = $this->config->getSystemValue('mail_smtppassword', '');
if ($smtpPassword !== '') {
$smtpPassword = '********';
}

$smtpMode = $this->config->getSystemValue('mail_smtpmode', '');
if ($smtpMode === '' || $smtpMode === 'php') {
$smtpMode = 'smtp';
}

$smtpOptions = $this->config->getSystemValue('mail_smtpstreamoptions', []);
$this->initialState->provideInitialState('settingsAdminMailConfig', [
'mail_domain' => $this->config->getSystemValue('mail_domain', ''),
'mail_from_address' => $this->config->getSystemValue('mail_from_address', ''),
'mail_smtpmode' => $this->config->getSystemValue('mail_smtpmode', ''),
'mail_smtpmode' => $smtpMode,
'mail_smtpsecure' => $this->config->getSystemValue('mail_smtpsecure', ''),
'mail_smtphost' => $this->config->getSystemValue('mail_smtphost', ''),
'mail_smtpport' => $this->config->getSystemValue('mail_smtpport', ''),
'mail_smtpauth' => $this->config->getSystemValue('mail_smtpauth', false),
'mail_smtpname' => $this->config->getSystemValue('mail_smtpname', ''),
'mail_smtppassword' => $this->config->getSystemValue('mail_smtppassword', ''),
'mail_smtppassword' => $smtpPassword,
'mail_sendmailmode' => $this->config->getSystemValue('mail_sendmailmode', 'smtp'),
];

if ($parameters['mail_smtppassword'] !== '') {
$parameters['mail_smtppassword'] = '********';
}

if ($parameters['mail_smtpmode'] === '' || $parameters['mail_smtpmode'] === 'php') {
$parameters['mail_smtpmode'] = 'smtp';
}
'mail_noverify' => $smtpOptions['ssl']['allow_self_signed'] ?? false,
]);

return new TemplateResponse('settings', 'settings/admin/additional-mail', $parameters, '');
Util::addScript('settings', 'vue-settings-admin-mail');
return new TemplateResponse('settings', 'settings/admin/additional-mail', renderAs: '');
}

/**
Expand Down
10 changes: 10 additions & 0 deletions apps/settings/src/admin-settings-mail.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import Vue from 'vue'
import AdminSettingsMailServer from './views/AdminSettingsMailServer.vue'

const app = new Vue(AdminSettingsMailServer)
app.$mount('#vue-admin-settings-mail')
3 changes: 2 additions & 1 deletion apps/settings/src/admin-settings-sharing.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/**
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import Vue from 'vue'
import AdminSettingsSharing from './views/AdminSettingsSharing.vue'

Expand Down
95 changes: 0 additions & 95 deletions apps/settings/src/admin.js

This file was deleted.

Loading
Loading