2020-11-10 04:49:18 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
use RainLoop\Enumerations\PluginPropertyType;
|
|
|
|
use RainLoop\Plugins\AbstractPlugin;
|
|
|
|
use RainLoop\Plugins\Property;
|
|
|
|
|
|
|
|
class LdapIdentitiesPlugin extends AbstractPlugin
|
|
|
|
{
|
2021-02-10 16:50:20 +08:00
|
|
|
const
|
|
|
|
NAME = 'LDAP Identities',
|
|
|
|
VERSION = '2.0',
|
|
|
|
AUTHOR = 'FWest98',
|
|
|
|
URL = 'https://github.com/FWest98',
|
|
|
|
RELEASE = '2020-11-11',
|
|
|
|
REQUIRED = '2.1.0',
|
|
|
|
CATEGORY = 'Accounts',
|
2021-08-28 05:49:03 +08:00
|
|
|
DESCRIPTION = 'Adds functionality to import account identities from LDAP.';
|
2021-02-10 16:50:20 +08:00
|
|
|
|
2020-11-10 17:19:07 +08:00
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
include_once __DIR__ . '/LdapIdentities.php';
|
|
|
|
include_once __DIR__ . '/LdapConfig.php';
|
|
|
|
include_once __DIR__ . '/LdapException.php';
|
2020-11-27 06:56:36 +08:00
|
|
|
|
|
|
|
parent::__construct();
|
2020-11-10 17:19:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public function Init(): void
|
|
|
|
{
|
|
|
|
$this->addHook("main.fabrica", 'MainFabrica');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function MainFabrica(string $name, &$result)
|
|
|
|
{
|
|
|
|
if ($name !== 'identities') return;
|
|
|
|
|
|
|
|
if (!is_array($result))
|
|
|
|
$result = [];
|
|
|
|
|
|
|
|
// Set up config
|
|
|
|
$config = LdapConfig::MakeConfig($this->Config());
|
|
|
|
|
|
|
|
$ldap = new LdapIdentities($config, $this->Manager()->Actions()->Logger());
|
|
|
|
|
|
|
|
$result[] = $ldap;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function configMapping(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_SERVER)
|
|
|
|
->SetLabel("LDAP Server URL")
|
|
|
|
->SetPlaceholder("ldap://server:port")
|
|
|
|
->SetType(PluginPropertyType::STRING),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_PROTOCOL_VERSION)
|
|
|
|
->SetLabel("LDAP Protocol Version")
|
|
|
|
->SetType(PluginPropertyType::SELECTION)
|
|
|
|
->SetDefaultValue([2, 3]),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_BIND_USER)
|
|
|
|
->SetLabel("Bind User DN")
|
|
|
|
->SetDescription("The user to use for binding to the LDAP server. Should be a DN or RDN. Leave empty for anonymous bind")
|
|
|
|
->SetType(PluginPropertyType::STRING),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_BIND_PASSWORD)
|
|
|
|
->SetLabel("Bind User Password")
|
|
|
|
->SetDescription("Leave empty for anonymous bind")
|
|
|
|
->SetType(PluginPropertyType::PASSWORD),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_USER_OBJECTCLASS)
|
|
|
|
->SetLabel("User object class")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDefaultValue("user"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_USER_FIELD_SEARCH)
|
|
|
|
->SetLabel("User search field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the user object to search using the email the user logged in with")
|
|
|
|
->SetDefaultValue("mail"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_USER_FIELD_MAIL)
|
|
|
|
->SetLabel("User mail field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the user object listing all identities (email addresses) of the user")
|
|
|
|
->SetDefaultValue("mail"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_USER_FIELD_NAME)
|
|
|
|
->SetLabel("User name field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the user object with their default sender name")
|
|
|
|
->SetDefaultValue("cn"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_USER_BASE)
|
|
|
|
->SetLabel("User base DN")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The base DN to search in for users"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_GET)
|
|
|
|
->SetLabel("Find groups?")
|
|
|
|
->SetType(PluginPropertyType::BOOL)
|
|
|
|
->SetDescription("Whether or not to search for groups")
|
|
|
|
->SetDefaultValue(true),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_OBJECTCLASS)
|
|
|
|
->SetLabel("Group object class")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDefaultValue("group"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_FIELD_MAIL)
|
|
|
|
->SetLabel("Group mail field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the group object listing all identities (email addresses) of the group")
|
|
|
|
->SetDefaultValue("mail"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_FIELD_NAME)
|
|
|
|
->SetLabel("Group name field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the group object with the name")
|
|
|
|
->SetDefaultValue("cn"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_FIELD_MEMBER)
|
|
|
|
->SetLabel("Group member field")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The field in the group object with all member DNs")
|
|
|
|
->SetDefaultValue("member"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_SENDER_FORMAT)
|
|
|
|
->SetLabel("Group mail sender format")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The sender name format for group addresses. Available template values: #USER# for the user name and #GROUP# for the group name")
|
|
|
|
->SetDefaultValue("#USER# || #GROUP#"),
|
|
|
|
|
|
|
|
Property::NewInstance(LdapConfig::CONFIG_GROUP_BASE)
|
|
|
|
->SetLabel("Group base DN")
|
|
|
|
->SetType(PluginPropertyType::STRING)
|
|
|
|
->SetDescription("The base DN to search in for groups")
|
|
|
|
];
|
|
|
|
}
|
2021-02-10 16:50:20 +08:00
|
|
|
}
|