f7cloud_client/apps/mail/lib/Db/Provisioning.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

179 lines
5.4 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Mail\Db;
use JsonSerializable;
use OCP\AppFramework\Db\Entity;
use OCP\IUser;
use ReturnTypeWillChange;
/**
* @method string getProvisioningDomain()
* @method void setProvisioningDomain(string $provisioningDomain)
* @method string getEmailTemplate()
* @method void setEmailTemplate(string $emailTemplate)
* @method string getImapUser()
* @method void setImapUser(string $imapUser)
* @method string getImapHost()
* @method void setImapHost(string $imapHost)
* @method int getImapPort()
* @method void setImapPort(int $imapPort)
* @method string getImapSslMode()
* @method void setImapSslMode(string $imapSslMode)
* @method string getSmtpUser()
* @method void setSmtpUser(string $smtpUser)
* @method string getSmtpHost()
* @method void setSmtpHost(string $smtpHost)
* @method int getSmtpPort()
* @method void setSmtpPort(int $smtpPort)
* @method string getSmtpSslMode()
* @method void setSmtpSslMode(string $smtpSslMode)
* @method bool|null getMasterPasswordEnabled()
* @method void setMasterPasswordEnabled(bool $masterPasswordEnabled)
* @method string|null getMasterPassword()
* @method void setMasterPassword(string $masterPassword)
* @method bool|null getSieveEnabled()
* @method void setSieveEnabled(bool $sieveEnabled)
* @method string|null getSieveHost()
* @method void setSieveHost(?string $sieveHost)
* @method int|null getSievePort()
* @method void setSievePort(?int $sievePort)
* @method string|null getSieveSslMode()
* @method void setSieveSslMode(?string $sieveSslMode)
* @method string|null getSieveUser()
* @method void setSieveUser(?string $sieveUser)
* @method array getAliases()
* @method void setAliases(array $aliases)
* @method bool getLdapAliasesProvisioning()
* @method void setLdapAliasesProvisioning(bool $ldapAliasesProvisioning)
* @method string|null getLdapAliasesAttribute()
* @method void setLdapAliasesAttribute(?string $ldapAliasesAttribute)
*/
class Provisioning extends Entity implements JsonSerializable {
public const WILDCARD = '*';
public const MASTER_PASSWORD_PLACEHOLDER = '********';
protected $provisioningDomain;
protected $emailTemplate;
protected $imapUser;
protected $imapHost;
protected $imapPort;
protected $imapSslMode;
protected $smtpUser;
protected $smtpHost;
protected $smtpPort;
protected $smtpSslMode;
protected $masterPasswordEnabled;
protected $masterPassword;
protected $sieveEnabled;
protected $sieveUser;
protected $sieveHost;
protected $sievePort;
protected $sieveSslMode;
protected $aliases = [];
protected $ldapAliasesProvisioning;
protected $ldapAliasesAttribute;
public function __construct() {
$this->addType('imapPort', 'integer');
$this->addType('smtpPort', 'integer');
$this->addType('masterPasswordEnabled', 'boolean');
$this->addType('masterPassword', 'string');
$this->addType('sieveEnabled', 'boolean');
$this->addType('sievePort', 'integer');
$this->addType('ldapAliasesProvisioning', 'boolean');
}
#[\Override]
#[ReturnTypeWillChange]
public function jsonSerialize() {
return [
'id' => $this->getId(),
'provisioningDomain' => $this->getProvisioningDomain(),
'emailTemplate' => $this->getEmailTemplate(),
'imapUser' => $this->getImapUser(),
'imapHost' => $this->getImapHost(),
'imapPort' => $this->getImapPort(),
'imapSslMode' => $this->getImapSslMode(),
'smtpUser' => $this->getSmtpUser(),
'smtpHost' => $this->getSmtpHost(),
'smtpPort' => $this->getSmtpPort(),
'smtpSslMode' => $this->getSmtpSslMode(),
'masterPasswordEnabled' => $this->getMasterPasswordEnabled(),
'masterPassword' => !empty($this->getMasterPassword()) ? self::MASTER_PASSWORD_PLACEHOLDER : null,
'sieveEnabled' => $this->getSieveEnabled(),
'sieveUser' => $this->getSieveUser(),
'sieveHost' => $this->getSieveHost(),
'sievePort' => $this->getSievePort(),
'sieveSslMode' => $this->getSieveSslMode(),
'aliases' => $this->getAliases(),
'ldapAliasesProvisioning' => $this->getLdapAliasesProvisioning(),
'ldapAliasesAttribute' => $this->getLdapAliasesAttribute(),
];
}
/**
* @return string
*/
public function buildImapUser(IUser $user) {
if (!is_null($this->getImapUser())) {
return $this->buildUserEmail($this->getImapUser(), $user);
}
return $this->buildEmail($user);
}
/**
* @param IUser $user
* @return string
*/
public function buildEmail(IUser $user) {
return $this->buildUserEmail($this->getEmailTemplate(), $user);
}
/**
* Replace %USERID% and %EMAIL% to allow special configurations
*
* @param string $original
* @param IUser $user
* @return string
*/
private function buildUserEmail(string $original, IUser $user) {
if ($user->getUID() !== null) {
$original = str_replace('%USERID%', $user->getUID(), $original);
}
if ($user->getEMailAddress() !== null) {
$original = str_replace('%EMAIL%', $user->getEMailAddress(), $original);
}
return $original;
}
/**
* @param IUser $user
* @return string
*/
public function buildSmtpUser(IUser $user) {
if (!is_null($this->getSmtpUser())) {
return $this->buildUserEmail($this->getSmtpUser(), $user);
}
return $this->buildEmail($user);
}
/**
* @param IUser $user
* @return string
*/
public function buildSieveUser(IUser $user) {
if (!is_null($this->getSieveUser())) {
return $this->buildUserEmail($this->getSieveUser(), $user);
}
return $this->buildEmail($user);
}
}