* @author Morris Jobke * * @copyright Copyright (c) 2016, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ namespace OCA\User_LDAP\Mapping; /** * Class AbstractMapping * @package OCA\User_LDAP\Mapping */ abstract class AbstractMapping { /** * @var \OCP\IDBConnection $dbc */ protected $dbc; /** * returns the DB table name which holds the mappings * @return string */ abstract protected function getTableName(); /** * @param \OCP\IDBConnection $dbc */ public function __construct(\OCP\IDBConnection $dbc) { $this->dbc = $dbc; } /** * checks whether a provided string represents an existing table col * @param string $col * @return bool */ public function isColNameValid($col) { switch($col) { case 'ldap_dn': case 'owncloud_name': case 'directory_uuid': return true; default: return false; } } /** * Gets the value of one column based on a provided value of another column * @param string $fetchCol * @param string $compareCol * @param string $search * @throws \Exception * @return string|false */ protected function getXbyY($fetchCol, $compareCol, $search) { if(!$this->isColNameValid($fetchCol)) { //this is used internally only, but we don't want to risk //having SQL injection at all. throw new \Exception('Invalid Column Name'); } $query = $this->dbc->prepare(' SELECT `' . $fetchCol . '` FROM `'. $this->getTableName() .'` WHERE `' . $compareCol . '` = ? '); $res = $query->execute(array($search)); if($res !== false) { return $query->fetchColumn(); } return false; } /** * Performs a DELETE or UPDATE query to the database. * @param \Doctrine\DBAL\Driver\Statement $query * @param array $parameters * @return bool true if at least one row was modified, false otherwise */ protected function modify($query, $parameters) { $result = $query->execute($parameters); return ($result === true && $query->rowCount() > 0); } /** * Gets the LDAP DN based on the provided name. * Replaces Access::ocname2dn * @param string $name * @return string|false */ public function getDNByName($name) { return $this->getXbyY('ldap_dn', 'owncloud_name', $name); } /** * Updates the DN based on the given UUID * @param string $fdn * @param string $uuid * @return bool */ public function setDNbyUUID($fdn, $uuid) { $query = $this->dbc->prepare(' UPDATE `' . $this->getTableName() . '` SET `ldap_dn` = ? WHERE `directory_uuid` = ? '); return $this->modify($query, array($fdn, $uuid)); } /** * Gets the name based on the provided LDAP DN. * @param string $fdn * @return string|false */ public function getNameByDN($fdn) { return $this->getXbyY('owncloud_name', 'ldap_dn', $fdn); } /** * Searches mapped names by the giving string in the name column * @param string $search * @return string[] */ public function getNamesBySearch($search) { $query = $this->dbc->prepare(' SELECT `owncloud_name` FROM `'. $this->getTableName() .'` WHERE `owncloud_name` LIKE ? '); $res = $query->execute(array($search)); $names = array(); if($res !== false) { while($row = $query->fetch()) { $names[] = $row['owncloud_name']; } } return $names; } /** * Gets the name based on the provided LDAP UUID. * @param string $uuid * @return string|false */ public function getNameByUUID($uuid) { return $this->getXbyY('owncloud_name', 'directory_uuid', $uuid); } /** * Gets the UUID based on the provided LDAP DN * @param string $dn * @return false|string * @throws \Exception */ public function getUUIDByDN($dn) { return $this->getXbyY('directory_uuid', 'ldap_dn', $dn); } /** * gets a piece of the mapping list * @param int $offset * @param int $limit * @return array */ public function getList($offset = null, $limit = null) { $query = $this->dbc->prepare(' SELECT `ldap_dn` AS `dn`, `owncloud_name` AS `name`, `directory_uuid` AS `uuid` FROM `' . $this->getTableName() . '`', $limit, $offset ); $query->execute(); return $query->fetchAll(); } /** * attempts to map the given entry * @param string $fdn fully distinguished name (from LDAP) * @param string $name * @param string $uuid a unique identifier as used in LDAP * @return bool */ public function map($fdn, $name, $uuid) { $row = array( 'ldap_dn' => $fdn, 'owncloud_name' => $name, 'directory_uuid' => $uuid ); try { $result = $this->dbc->insertIfNotExist($this->getTableName(), $row); // insertIfNotExist returns values as int return (bool)$result; } catch (\Exception $e) { return false; } } /** * removes a mapping based on the owncloud_name of the entry * @param string $name * @return bool */ public function unmap($name) { $query = $this->dbc->prepare(' DELETE FROM `'. $this->getTableName() .'` WHERE `owncloud_name` = ?'); return $this->modify($query, array($name)); } /** * Truncate's the mapping table * @return bool */ public function clear() { $sql = $this->dbc ->getDatabasePlatform() ->getTruncateTableSQL('`' . $this->getTableName() . '`'); return $this->dbc->prepare($sql)->execute(); } } warning Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
blob: b53ecd4cb1d49ef1f2e199d6ee50ce189b91e35a (plain)
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
136
137
138
139
140
OC.L10N.register(
    "files_external",
    {
    "External storages" : "Almacenamiento externo",
    "Personal" : "Personal",
    "System" : "Sistema",
    "Grant access" : "Conceder acceso",
    "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
    "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
    "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
    "Generate keys" : "Generar llaves",
    "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
    "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
    "(group)" : "(grupo)",
    "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
    "Enable encryption" : "Habilitar encripción",
    "Enable previews" : "Habilitar vistas previas",
    "Enable sharing" : "Habilitar compartir",
    "Check for changes" : "Verificar si hay cambios",
    "Never" : "Nunca",
    "Once every direct access" : "Una vez cada acceso directo",
    "Read only" : "Sólo lectura",
    "Delete" : "Borrar",
    "Admin defined" : "Administrador definido",
    "Are you sure you want to delete this external storage?" : "¿Estás seguro que quieres borrar este almacenamiento externo?",
    "Delete storage?" : "¿Borrar almacenamiento?",
    "Saved" : "Guardado",
    "Saving..." : "Guardando...",
    "Save" : "Guardar",
    "Empty response from the server" : "Respuesta del servidor vacía",
    "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
    "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
    "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
    "There was an error with message: " : "Se presentó un problema con el mensaje:",
    "External mount error" : "Error de montaje externo",
    "external-storage" : "almacenamiento externo",
    "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
    "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
    "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
    "Username" : "Usuario",
    "Password" : "Contraseña",
    "Credentials saved" : "Credenciales guardadas",
    "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
    "Credentials required" : "Se requieren credenciales",
    "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
    "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
    "Invalid mount point" : "Punto de montaje inválido",
    "Objectstore forbidden" : "Objectstore prohibido",
    "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
    "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
    "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
    "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
    "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
    "Insufficient data: %s" : "Datos insuficientes: %s",
    "%s" : "%s",
    "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
    "Access key" : "Llave de acceso",
    "Secret key" : "Llave secreta",
    "Builtin" : "Integrado",
    "None" : "Ninguno",
    "OAuth1" : "OAuth1",
    "App key" : "Llave de la aplicación",
    "App secret" : "Secreto de la aplicación",
    "OAuth2" : "OAuth2",
    "Client ID" : "ID del cliente",
    "Client secret" : "Secreto del cliente",
    "OpenStack v2" : "OpenStack v2",
    "Tenant name" : "Nombre de inquilino",
    "Identity endpoint URL" : "URL del punto de enlace de Identidad",
    "OpenStack v3" : "OpenStack v3",
    "Domain" : "Dominio",
    "Rackspace" : "Rackspace",
    "API key" : "Llave de API",
    "Global credentials" : "Credenciales globales",
    "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
    "Username and password" : "Usuario y contraseña",
    "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
    "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
    "RSA public key" : "Llave pública RSA",
    "Public key" : "Llave pública",
    "Amazon S3" : "Amazon S3",
    "Bucket" : "Bucket",
    "Hostname" : "Nombre del servidor",
    "Port" : "Puerto",
    "Region" : "Región",
    "Enable SSL" : "Habilitar SSL",
    "Enable Path Style" : "Habilitar Estilo de Ruta",
    "Legacy (v2) authentication" : "Autenticación legada (v2)",
    "WebDAV" : "WebDAV",
    "URL" : "URL",
    "Remote subfolder" : "Subcarpeta remota",
    "Secure https://" : "https:// seguro",
    "FTP" : "FTP",
    "Host" : "Servidor",
    "Secure ftps://" : "ftps:// seguro",
    "Local" : "Local",
    "Location" : "Ubicación",
    "Nextcloud" : "Nextcloud",
    "SFTP" : "SFTP",
    "Root" : "Raíz",
    "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
    "SMB / CIFS" : "SMB / CIFS",
    "Share" : "Compartir",
    "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
    "Username as share" : "Usuario como elemento compartido",
    "OpenStack Object Storage" : "OpenStack Object Storage",
    "Service name" : "Nombre del servicio",
    "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
    "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
    "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
    "External storage support" : "Soporte de almacenamiento externo",
    "No external storage configured or you don't have the permission to configure them" : "No se ha configurado almacenamiento externo o bien no cuentas con los permisos para configurarlos",
    "Name" : "Nombre",
    "Storage type" : "Tipo de almacenamiento",
    "Scope" : "Alcance",
    "Folder name" : "Nombre de la carpeta",
    "External storage" : "Almacenamiento externo",
    "Authentication" : "Autenticación",
    "Configuration" : "Configuración",
    "Available for" : "Disponible para",
    "Click to recheck the configuration" : "Haz click para volver a marcar la configuración",
    "Add storage" : "Agregar almacenamiento",
    "Advanced settings" : "Configuraciones avanzadas",
    "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
    "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
    "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
    "Step 1 failed. Exception: %s" : "Paso 1 falló. Excepción: %s",
    "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
    "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
    "Google Drive App Configuration" : "Configuración de la Aplicación de Google Drive",
    "OpenStack" : "OpenStack",
    "Dropbox" : "Dropbox",
    "Google Drive" : "Google Drive",
    "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación.  ",
    "No external storage configured" : "No se ha configurado el almacenamiento externo",
    "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
    "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
    "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?"
},
"nplurals=2; plural=(n != 1);");