-
Notifications
You must be signed in to change notification settings - Fork 316
Expand file tree
/
Copy pathSettingsController.php
More file actions
135 lines (114 loc) Β· 4.03 KB
/
SettingsController.php
File metadata and controls
135 lines (114 loc) Β· 4.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Mail\Controller;
use OCA\Mail\AppInfo\Application;
use OCA\Mail\Exception\ValidationException;
use OCA\Mail\Http\JsonResponse as HttpJsonResponse;
use OCA\Mail\Service\AntiSpamService;
use OCA\Mail\Service\Classification\ClassificationSettingsService;
use OCA\Mail\Service\Provisioning\Manager as ProvisioningManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
use OCP\IRequest;
use Psr\Container\ContainerInterface;
use function array_merge;
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
class SettingsController extends Controller {
private ProvisioningManager $provisioningManager;
private AntiSpamService $antiSpamService;
private ContainerInterface $container;
private IConfig $config;
public function __construct(
IRequest $request,
ProvisioningManager $provisioningManager,
AntiSpamService $antiSpamService,
IConfig $config,
ContainerInterface $container,
private ClassificationSettingsService $classificationSettingsService,
) {
parent::__construct(Application::APP_ID, $request);
$this->provisioningManager = $provisioningManager;
$this->antiSpamService = $antiSpamService;
$this->config = $config;
$this->container = $container;
}
public function index(): JSONResponse {
$provisionings = $this->provisioningManager->getConfigs();
return new JSONResponse($provisionings);
}
public function provision() : JSONResponse {
$count = $this->provisioningManager->provision();
return new JSONResponse(['count' => $count]);
}
public function createProvisioning(array $data): JSONResponse {
try {
return new JSONResponse(
$this->provisioningManager->newProvisioning($data)
);
} catch (ValidationException $e) {
return HttpJsonResponse::fail([$e->getFields()]);
} catch (\Exception $e) {
return HttpJsonResponse::fail([$e->getMessage()]);
}
}
public function updateProvisioning(int $id, array $data): JSONResponse {
try {
$this->provisioningManager->updateProvisioning(array_merge($data, ['id' => $id]));
} catch (ValidationException $e) {
return HttpJsonResponse::fail([$e->getFields()]);
} catch (\Exception $e) {
return HttpJsonResponse::fail([$e->getMessage()]);
}
return new JSONResponse([]);
}
public function deprovision(int $id): JSONResponse {
$provisioning = $this->provisioningManager->getConfigById($id);
if ($provisioning !== null) {
$this->provisioningManager->deprovision($provisioning);
}
return new JSONResponse([]);
}
/**
*
* @return JSONResponse
*/
public function setAntiSpamEmail(string $spam, string $ham): JSONResponse {
$this->antiSpamService->setSpamEmail($spam);
$this->antiSpamService->setHamEmail($ham);
return new JSONResponse([]);
}
/**
* Store the credentials used for SMTP in the config
*
* @return JSONResponse
*/
public function deleteAntiSpamEmail(): JSONResponse {
$this->antiSpamService->deleteConfig();
return new JSONResponse([]);
}
public function setAllowNewMailAccounts(bool $allowed): void {
$this->config->setAppValue('mail', 'allow_new_mail_accounts', $allowed ? 'yes' : 'no');
}
public function setAllowNewMailAliases(bool $allowed): JSONResponse {
$this->config->setAppValue('mail', 'allow_new_mail_aliases', $allowed ? 'yes' : 'no');
return new JSONResponse([]);
}
public function setEnabledLlmProcessing(bool $enabled): JSONResponse {
$this->config->setAppValue('mail', 'llm_processing', $enabled ? 'yes' : 'no');
return new JSONResponse([]);
}
public function setLayoutMessageView(string $value): JSONResponse {
$this->config->setAppValue('mail', 'layout_message_view', $value);
return new JSONResponse([]);
}
public function setImportanceClassificationEnabledByDefault(bool $enabledByDefault): JSONResponse {
$this->classificationSettingsService->setClassificationEnabledByDefault($enabledByDefault);
return new JSONResponse([]);
}
}