diff --git a/.env b/.env index 43bde72aa3..c3a40c900b 100644 --- a/.env +++ b/.env @@ -32,7 +32,7 @@ # # - "docker-compose.limits.yml" : defines containers cpu and memory limits for all Phraseanet and gateway containers only. # -# - "docker-compose.altenatives.yml": all alternative services, used only on evoluation or transition periods +# - "docker-compose.altenatives.yml": all alternative services, used only on evoluation or transition periods # # 2/ "COMPOSE_PROFILES" value define which profiles you want to use # in docker-compose. @@ -49,7 +49,7 @@ # choose to launch only some workers, see worker profile list below. # - "worker" : launch one container worker with all jobs run on it. # - "cmd" : launch a container based on worker image, useful for run cmd manualy. -# - "db" : db profile will launch a mariadb container, +# - "db" : db profile will launch a mariadb container, # because this is the primary datastore, you should use you own SGDD service for production needs. # - "elastisearch" : launch a elasticsearch container. # - "rabbitmq" : launch a rabbitmq container. @@ -143,7 +143,7 @@ PHRASEANET_DOCKER_REGISTRY=local # Docker images tag. # @run -PHRASEANET_DOCKER_TAG=4.1.8-rc11 +PHRASEANET_DOCKER_TAG=4.1.8-rc12 # Stack Name # An optionnal Name for the stack diff --git a/config/configuration.sample.yml b/config/configuration.sample.yml index db9ea7542e..f17f2ad981 100644 --- a/config/configuration.sample.yml +++ b/config/configuration.sample.yml @@ -211,24 +211,24 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea + exclusive: false icon-uri: null + birth-group: _firstlog + everyone-group: _everyone + metamodel: _metamodel + model-gpfx: _M_ + model-upfx: _U_ debug: false - birth-group: '_firstlog' - everyone-group: '_everyone' - metamodel: '_metamodel' - model-gpfx: '_M_' - model-upfx: '_U_' auto-logout: false auto-connect-idp-name: null registration-fields: diff --git a/doc/feedback_report.md b/doc/others/feedback_report.md similarity index 100% rename from doc/feedback_report.md rename to doc/others/feedback_report.md diff --git a/doc/others/openid-sso.md b/doc/others/openid-sso.md new file mode 100644 index 0000000000..a45651178c --- /dev/null +++ b/doc/others/openid-sso.md @@ -0,0 +1,58 @@ +# openid configuration + +#### phraseanet configuration +To connect with an openid with phraseanet, add the following config in the configuration.yml file + + +```yaml +authentication: + providers: + openid-1: + enabled: true + display: true + title: ' openid 1' + type: openid + options: + client-id: 'client-id' + client-secret: 'client-secret' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea + # if true, can only connect with this provider + # the user cannot connect with the default phraseanet login form + exclusive: false + icon-uri: null + birth-group: _firstlog + everyone-group: _everyone + metamodel: _metamodel + # group model prefix + model-gpfx: _M_ + # user model prefix + model-upfx: _U_ + debug: false + # logout with phraseanet and also logout with keycloak + auto-logout: true + auto-connect-idp-name: null + +``` + + +#### keycloak configuration + +- create a new client +- get clien-id and client-secret +- in the client setting: + + set the 'Valid redirect URIs' field with `https://{phraseanet-host}/login/provider/{provider-name}/callback/` + eg: https://phraseanet.phrasea.local/login/provider/openid-1/callback/ + + set the 'Valid post logout redirect URIs' field with `https://{phraseanet-host}/login/logout/` eg: https://phraseanet.phrasea.local/login/logout/ + +- Choose a client > client scopes > '.... dedicated' + + add a 'groups' mapper if not exist, > Add mapper > by configuration + + `Mapper type` => Group Membership + `Name` => groups + `Token Claim Name` => groups + `Full group path` => off + `Add to userinfo` => on diff --git a/doc/stamper.md b/doc/others/stamper.md similarity index 100% rename from doc/stamper.md rename to doc/others/stamper.md diff --git a/lib/Alchemy/Phrasea/Authentication/Provider/Openid.php b/lib/Alchemy/Phrasea/Authentication/Provider/Openid.php new file mode 100644 index 0000000000..d98afd760b --- /dev/null +++ b/lib/Alchemy/Phrasea/Authentication/Provider/Openid.php @@ -0,0 +1,816 @@ +config) && $this->config['debug'] === true) { + $bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + if ($bt[0]['file'] != $lastfile) { + file_put_contents('/var/alchemy/Phraseanet/logs/openid.log', sprintf("FILE %s \n", ($lastfile = $bt[0]['file'])), FILE_APPEND); + } + $s = sprintf("LINE (%d) : %s\n", $bt[0]['line'], $s); + file_put_contents('/var/alchemy/Phraseanet/logs/openid.log', $s, FILE_APPEND); + } + } + + public function __construct(UrlGenerator $urlGenerator, SessionInterface $session, array $config, Guzzle $client) + { + parent::__construct($urlGenerator, $session); + + $this->config = $config; + if(!array_key_exists('model-gpfx', $this->config)) { + $this->config['model-gpfx'] = '_G_'; + } + if(!array_key_exists('model-upfx', $this->config)) { + $this->config['model-upfx'] = '_U_'; + } + if(!array_key_exists('metamodel', $this->config)) { + $this->config['metamodel'] = '_metamodel'; + } + if(!array_key_exists('auto-logout', $this->config)) { + $this->config['auto-logout'] = false; + } + if(!array_key_exists('auto-connect-idp-name', $this->config)) { + $this->config['auto-connect-idp-name'] = null; + } + + $this->client = $client; + $this->iconUri = array_key_exists('icon-uri', $config) ? $config['icon-uri'] : null; // if not set, will fallback on default icon + } + + /** + * {@inheritdoc} + */ + public static function create(UrlGenerator $generator, SessionInterface $session, array $options): AbstractProvider + { + foreach (['client-id', 'client-secret', 'base-url', 'realm-name'] as $parm) { + if (!isset($options[$parm]) || (trim($options[$parm]) == '')) { + throw new InvalidArgumentException(sprintf('Missing Phraseanet "%s" parameter in conf/authentification/providers', $parm)); + } + } + + $guzzle = new Guzzle(); + $guzzle->setSslVerification(false, false, 0); + + return new self($generator, $session, $options, $guzzle); + } + + /** + * {@inheritdoc} + */ + public function getName(): string + { + return 'openid'; + } + + /** + * @param ClientInterface $client + * + * @return self + */ + public function setGuzzleClient(ClientInterface $client): self + { + $this->client = $client; + + return $this; + } + + /** + * @return ClientInterface + */ + public function getGuzzleClient() + { + return $this->client; + } + + /** + * {@inheritdoc} + */ + public function authenticate(array $params = array()): RedirectResponse + { + $this->debug(); + $this->session->invalidate(0); + + /* + * for oauth2 the callback url(s) MUST be fully static. One CAN register multiple possible urls, like + * - one for phraseanet home : already static + * - one for phraseanet oauth api + * - ... ? + * api client may want to include static/variable params to be used for final redirect (eg. parade), + * we pass those in session + * lib/Alchemy/Phrasea/Controller/Api/OAuth2Controller::authorizeCallbackAction(...) will restore params + */ + $this->session->set($this->getId() . ".parms", array_merge(['providerId' => $this->getId()], $params)); + $this->debug(sprintf("authenticate params saved : session[%s] = %s", + $this->getId() . ".parms", + var_export($params, true) + )); + + $params = ['providerId' => $this->getId()]; // the only required parm (constant) + $this->debug(sprintf("redirect_uri params (cleaned) = %s", var_export($params, true))); + + $redirect_uri = $this->generator->generate( + 'login_authentication_provider_callback', + $params, + UrlGeneratorInterface::ABSOLUTE_URL + ); + $this->debug(sprintf("redirect_uri = %s", $redirect_uri)); + + $state = $this->createState(); + + $this->session->set($this->getId() . '.provider.state', $state); + + $parms = [ + 'client_id' => $this->config['client-id'], + 'state' => $state, + 'scope' => 'openid', + 'redirect_uri' => $redirect_uri, + 'response_type' => "code" + ]; + + if($this->config['auto-connect-idp-name']) { + $url = sprintf("%s/realms/%s/protocol/openid-connect/auth?kc_idp_hint=%s&%s", + $this->config['base-url'], + urlencode($this->config['realm-name']), + urlencode($this->config['auto-connect-idp-name']), + http_build_query($parms, '', '&') + ); + } else { + $url = sprintf("%s/realms/%s/protocol/openid-connect/auth?%s", + $this->config['base-url'], + urlencode($this->config['realm-name']), + http_build_query($parms, '', '&') + ); + } + + + + $this->debug(sprintf("go to url = %s", $url)); + + return new RedirectResponse($url); + } + + /** + * {@inheritdoc} + */ + public function logout() + { + $this->debug("logout ?"); + if($this->config['auto-logout']) { + + // too bad: getting the logout page is not enough... +// $url = "/logout"; +// $guzzleRequest = $this->client->get($url); +// $response = $guzzleRequest->send(); +// $this->debug($response->getBody()); +// return null; + + // ... we really need to redirect to it, which will prevent phr to redirect to his home + $url = sprintf("%s/realms/%s/protocol/openid-connect/logout", + $this->config['base-url'], + urlencode($this->config['realm-name']) + ); + + return new RedirectResponse($url); + } + + return null; + } + + public function logoutAndRedirect($redirect_uri) + { + $this->debug("logoutAndRedirect ?"); + if($this->config['auto-logout']) { + $url = sprintf("%s/realms/%s/protocol/openid-connect/logout?post_logout_redirect_uri=%s&id_token_hint=%s", + $this->config['base-url'], + urlencode($this->config['realm-name']), + urlencode($redirect_uri), + $this->session->get($this->getId() . '.provider.id_token') + ); + + return new RedirectResponse($url); + } + + return null; + } + + /** + * {@inheritdoc} + */ + public function onCallback(Request $request) + { + $this->debug(); + if (!$this->session->has($this->getId() . '.provider.state')) { + throw new NotAuthenticatedException('No state value in session ; CSRF try ?'); + } + $this->debug(); + if ($request->query->get('state') !== $this->session->remove($this->getId() . '.provider.state')) { + throw new NotAuthenticatedException('Invalid state value ; CSRF try ?'); + } + $this->debug(); + try { + $url = sprintf("%s/realms/%s/protocol/openid-connect/token", + $this->config['base-url'], + urlencode($this->config['realm-name']) + ); + + $guzzleRequest = $this->client->post($url); + + $guzzleRequest->addPostFields([ + 'grant_type' => "authorization_code", + 'code' => $request->query->get('code'), + 'redirect_uri' => $this->generator->generate( + 'login_authentication_provider_callback', + ['providerId' => $this->getId()], + UrlGeneratorInterface::ABSOLUTE_URL + ), + 'client_id' => $this->config['client-id'], + 'client_secret' => $this->config['client-secret'], + ]); + $guzzleRequest->setHeader('Accept', 'application/json'); + $this->debug(); + $response = $guzzleRequest->send(); + $this->debug(); + } + catch (GuzzleException $e) { + $this->debug($e->getMessage()); + throw new NotAuthenticatedException('Guzzle error while authentication', $e->getCode(), $e); + } + + if (200 !== $response->getStatusCode()) { + $this->debug(); + throw new NotAuthenticatedException('Error while getting access_token'); + } + + $this->debug(); + $data = @json_decode($response->getBody(true), true); + $this->debug(); + + if (JSON_ERROR_NONE !== json_last_error()) { + $this->debug(); + throw new NotAuthenticatedException('Error while decoding token response, unable to parse JSON.'); + } + + $this->debug(var_export($data, true)); + $this->session->remove($this->getId() . '.provider.state'); + $this->session->set($this->getId() . '.provider.access_token', $data['access_token']); + // id_token_hint used when logout + $this->session->set($this->getId() . '.provider.id_token', $data['id_token']); + + try { + $this->debug(); + + $uri = sprintf("%s/realms/%s/protocol/openid-connect/userinfo", + $this->config['base-url'], + urlencode($this->config['realm-name']) + ); + + $request = $this->client->get($uri); + $request->setHeader('Authorization', 'Bearer '. $data['access_token']); + + $this->debug(); + + $response = $request->send(); + $this->debug(); + } + catch (GuzzleException $e) { + $this->debug($e->getMessage()); + throw new NotAuthenticatedException('Guzzle error while authentication', $e->getCode(), $e); + } + + $this->debug(); + $data = @json_decode($response->getBody(true), true); + $this->debug(var_export($data, true)); + + if (200 !== $response->getStatusCode()) { + $this->debug(); + throw new NotAuthenticatedException('Error while retrieving user info, invalid status code.'); + } + + if (JSON_ERROR_NONE !== json_last_error()) { + $this->debug(); + throw new NotAuthenticatedException('Error while retrieving user info, unable to parse JSON.'); + } + + $this->debug(); + + $userName = $data['preferred_username']; + + if (!\Swift_Validate::email($userName) && isset($data['email'])) { + $userName = $data['email'];// login to be an email + } + + $userUA = $this->CreateUser([ + 'id' => $distantUserId = $data['sub'], + 'login' => $userName, + 'firstname' => isset($data['given_name']) ? $data['given_name'] : '', + 'lastname' => isset($data['family_name']) ? $data['family_name'] : '' , + 'email' => isset($data['email']) ? $data['email'] : '', + '_groups' => isset($data['groups']) ? $data['groups'] : '' + ]); + + $userAuthProviderRepository = $this->getUsrAuthProviderRepository(); + $userAuthProvider = $userAuthProviderRepository + ->findWithProviderAndId($this->getId(), $distantUserId); + + if (!$userAuthProvider) { + $manager = $this->getEntityManager(); + + $usrAuthProvider = new UsrAuthProvider(); + $usrAuthProvider->setDistantId($distantUserId); + $usrAuthProvider->setProvider($this->getId()); + $usrAuthProvider->setUser($userUA); + + try { + $manager->persist($usrAuthProvider); + $manager->flush(); + } + catch (\Exception $e) { + // no-op + $this->debug(); + } + } + + $this->session->set($this->getId() . ".provider.id", $distantUserId); + $this->session->set($this->getId() . ".provider.username", $userName); + + $this->debug(sprintf("session->set('%s', '%s')", $this->getId() . ".provider.id", $distantUserId)); + $this->debug(sprintf("session->set('%s', '%s')", $this->getId() . ".provider.username", $userName)); + } + + /** + * {@inheritdoc} + */ + public function getToken(): Token + { + $this->debug(); + $distantUserId = $this->session->get($this->getId() . '.provider.id'); + $this->debug(sprintf("session->get('%s') ==> '%s')", $this->getId() . ".provider.id", $distantUserId)); + + if ('' === trim($distantUserId)) { + $this->debug(); + throw new NotAuthenticatedException($this->getId() . ' has not authenticated'); + } + + $this->debug(); + $token = new Token($this, $distantUserId); + $this->debug(); + + return $token; + } + + /** + * {@inheritdoc} + */ + public function getIdentity(): Identity + { + $this->debug(); + $identity = new Identity(); + + try { + $uri = sprintf("%s/realms/%s/protocol/openid-connect/userinfo", + $this->config['base-url'], + urlencode($this->config['realm-name']) + ); + + $request = $this->client->get($uri); + $request->setHeader('Authorization', 'Bearer '. $this->session->get($this->getId() . '.provider.access_token')); + + $response = $request->send(); + } + catch (GuzzleException $e) { + $this->debug(); + throw new NotAuthenticatedException('Error while retrieving user info', $e->getCode(), $e); + } + + if (200 !== $response->getStatusCode()) { + $this->debug(); + throw new NotAuthenticatedException('Error while retrieving user info'); + } + + $data = @json_decode($response->getBody(true), true); + + if (JSON_ERROR_NONE !== json_last_error()) { + $this->debug(); + throw new NotAuthenticatedException('Error while parsing json'); + } + + $this->debug(); + $identity->set(Identity::PROPERTY_EMAIL, isset($data['email']) ? $data['email'] : ''); + $identity->set(Identity::PROPERTY_ID, $data['sub']); + $identity->set(Identity::PROPERTY_USERNAME, $data['preferred_username']); + + $this->debug(); + return $identity; + } + + /** + * @param array $data + * @return User|null + * @throws Exception + */ + private function CreateUser(Array $data) + { + $userManipulator = $this->getUserManipulator(); + $userRepository = $this->getUserRepository(); + $ACLProvider = $this->getACLProvider(); + + $ret = null; + + $login = trim($data['login']); + + $this->debug(sprintf("login=%s \n", var_export($login, true))); + + if ($login == "") { + $this->debug("login is empty, user not created \n"); + } + + /** @var User $userUA */ + $userUA = $userRepository->findByLogin($login); + + if (!$userUA) { + // need to create the user + $this->debug(sprintf("creating user \"%s\" \n", $login)); + $tmp_email = str_replace(['.', '@'], ['_', '_'], $login) . "@nomail.eu"; + $userUA = $userManipulator->createUser($login, 'user_tmp_pwd', $tmp_email, false); + + + if ($userUA) { + $this->debug(sprintf("found user \"%s\" with id=%s \n", $login, $userUA->getId())); + + // if the id provider does NOT return groups, the new user will get "birth" privileges + if (!is_array($data['_groups']) && array_key_exists('birth-group', $this->config)) { + $data['_groups'] = [$this->config['birth-group']]; + } + } + else { + $this->debug(sprintf("failed to create user \"%s\" \n", $login)); + } + } + else { + // the user already exists + $this->debug(sprintf("found user \"%s\" with id=%s \n", $login, $userUA->getId())); + + // if the id provider does return groups, then revoke privileges + if (is_array($data['_groups'])) { + $appbox = $this->getAppbox(); + $all_base_ids = []; + foreach ($appbox->get_databoxes() as $databox) { + foreach ($databox->get_collections() as $collection) { + $all_base_ids[] = $collection->get_base_id(); + } + } + + $userACL = $ACLProvider->get($userUA); + $userACL->revoke_access_from_bases($all_base_ids)->revoke_unused_sbas_rights(); + $this->debug(sprintf("revoked from=%s \n", var_export($all_base_ids, true))); + } + } + + // here we should have a user + + if ($userUA) { + $this->debug(sprintf("User id=%s \n", $userUA->getId())); + + // apply groups + if (is_array($data['_groups'])) { + + $userACL = $ACLProvider->get($userUA); + + $models = []; + + // change groups to models + foreach ($data['_groups'] as $grp) { + $models[] = ['name' => $this->config['model-gpfx'] . $grp, 'autocreate' => true]; + } + + // add "everyone-group" + if(array_key_exists('everyone-group', $this->config)) { + $models[] = ['name' => $this->config['model-gpfx'] . $this->config['everyone-group'], 'autocreate' => true]; + } + + // add a specific model for the user + $models[] = ['name' => $this->config['model-upfx'] . $login, 'autocreate' => false]; + + $this->debug(sprintf("models=%s \n", var_export($models, true))); + + // if we need those (in case of creation of a model), they will be set only once + $metaModelUA = $metaModelBASES = $metaModelOwnerUA = null; + + foreach ($models as $model) { + + $this->debug(sprintf("searching model '%s' \n", $model['name'])); + + // we check if the model exits + $modelUA = $userRepository->findByLogin($model['name']); + + if (!$modelUA) { + if ($model['autocreate'] == true) { + $this->debug(sprintf("model '%s' not found \n", $model['name'])); + + // the model does not exist, so create it + // + // if not already known, get the metamodel + if ($metaModelUA === null) { + + $this->debug(sprintf("searching metamodel '%s'... \n", $this->config['metamodel'])); + + $metaModelUA = $userRepository->findByLogin($this->config['metamodel']); + + if ($metaModelUA) { + + $this->debug(sprintf("metaModelID=%s \n", print_r($metaModelUA->getId(), true))); + + // metamodel found, get some infos... + // ... get acl + $metaModelACL = $ACLProvider->get($metaModelUA); + // ... then list of bases + $metaModelBASES = $metaModelACL->get_granted_base(); + // ... in fact we simply need an array of base_ids, and base_id is the keys of the array, so switch + $metaModelBASES = array_keys($metaModelBASES); + + if ($metaModelUA->isTemplate()) { + $metaModelOwnerUA = $metaModelUA->getTemplateOwner(); + + $this->debug(sprintf("metamodel is a model, owner_id=%s \n", print_r($metaModelOwnerUA->getId(), true))); + } + + $this->debug(sprintf("metamodel granted on bases '%s' \n", print_r($metaModelBASES, true))); + } + else { + $this->debug("metamodel not found \n"); + + $metaModelUA = false; // don't search again + } + } + + // now we can create the model only if we found the metamodel + if ($metaModelUA) { + + $this->debug(sprintf("creating model '%s'... \n", $model['name'])); + + // create the model user... + $modelUA = $userManipulator->createUser($model['name'], 'model_pwd', null, false); + + $this->debug(sprintf("model '%s' created with modelID=%s... \n", $model['name'], print_r($modelUA->getId(), true))); + + if ($metaModelOwnerUA) { + $modelUA->setTemplateOwner($metaModelOwnerUA); + + $this->debug(sprintf("model '%s' set as model, owner_id=%s... \n", $model['name'], print_r($metaModelOwnerUA->getId(), true))); + } + + // ... then copy acl of every sbas + $modelACL = $ACLProvider->get($modelUA); + $modelACL->apply_model($metaModelUA, $metaModelBASES); + + $this->debug(sprintf(" ... and granted on bases %s \n", print_r($metaModelBASES, true))); + } + } + } + else { + // the model already exists + $this->debug(sprintf("model '%s' already exists, id=%s \n", $model['name'], print_r($modelUA->getId(), true))); + } + + // here we should have the model, except "user" models which are not automatically created + + if ($modelUA) { + $this->debug(sprintf(" ... modelID=%s \n", print_r($modelUA->getId(), true))); + + // here we have the model so get some infos about it + $modelACL = $ACLProvider->get($modelUA); + $modelBASES = $modelACL->get_granted_base(); + // ... in fact we simply need an array of base_ids, and base_id is the keys of the array, so switch + $modelBASES = array_keys($modelBASES); + + $this->debug(sprintf("model granted on bases '%s' \n", print_r($modelBASES, true))); + + // ... then copy acl of every sbas + $userACL->apply_model($modelUA, $modelBASES); + + $this->debug(sprintf("user '%s' granted on bases %s \n", $login, print_r($modelBASES, true))); + } + else { + $this->debug(sprintf("no model '%s' \n", $model['name'])); + } + } + + $userACL->inject_rights(); + } + + // now update infos of the user + if (!is_null($data['firstname']) && ($v = trim($data['firstname'])) != '') { + $userUA->setFirstName($v); + } + if (!is_null($data['firstname']) && ($v = trim($data['lastname'])) != '') { + $userUA->setLastName($v); + } + + $mail = ""; // mail is a special case + try { + if (($v = trim($data['email'])) != '') { + $mail = $v; + } + } + catch (Exception $e) { + // no-op + } + + if ($mail != $userUA->getEmail()) { + try { + $this->debug("unsetting former email of user"); + $userManipulator->setEmail($userUA, null); + if ($mail != "") { + $this->debug(sprintf("setting email '%s' to user", $mail)); + $dupUserUA = $userRepository->findByEmail($mail); + if ($dupUserUA == null) { + // ok we can set the mail + $userManipulator->setEmail($userUA, $mail); + $this->debug(sprintf("email '%s' set to user", $mail)); + } + else { + $this->debug(sprintf("warning : another user (id=%s) already has email '%s', email not set", $dupUserUA->getId(), $mail)); + } + } + } + catch (Exception $e) { + // no-op + $this->debug(var_export($e->getMessage(), true)); + } + } + else { + $this->debug(sprintf("email '%s' does not change\n", $mail)); + } + + // yes we are logged ! + + if (isset($this->config['exclusive']) && $this->config['exclusive'] == true) { + // reset the password + // if it is an existing user, the user cannot login from the default phraseanet login + // cannot renew her password + + /** @var RandomGenerator $randomGenerator */ + $randomGenerator = $this->getRandomGenerator(); + $password = $randomGenerator->generateString(16); + $userUA->setPassword($password); + $userUA->setCanRenewPassword(false); + } + + $this->debug(sprintf("returning user id=%s", $userUA->getId())); + + $ret = $userUA; // ->getId(); + } + + return $ret; + } + + + + /** + * {@inheritdoc} + */ + public function getIconURI() + { + return $this->iconUri ?: 'data:image/png;base64,' + . 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAA' + . 'AJZlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAAB' + . 'AAAAUgExAAIAAAARAAAAWodpAAQAAAABAAAAbAAAAAAAAABIAAAAAQAAAEgAAAAB' + . 'QWRvYmUgSW1hZ2VSZWFkeQAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAADCgAwAE' + . 'AAAAAQAAADAAAAAAXukGzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAActpVFh0WE1M' + . 'OmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6' + . 'bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1s' + . 'bnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgt' + . 'bnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAg' + . 'ICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgog' + . 'ICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYv' + . 'MS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSW1hZ2VSZWFk' + . 'eTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4x' + . 'PC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAg' + . 'PC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KKS7NPQAADE5JREFUaAXtWQuMVcUZ/uY8' + . '7vvui+WNAYHa2oqKiw/SWnaJ0ipqH4ZHmjTVGMFao00LVm2Dl9YXtVETpVYSX6m2' + . 'tYhajU210V0KPqi7CALKrggUWeS9uOzufZzH9PvPvXdZ1t27rJCUpM5y7pyZM2fm' + . '+/7/m3/ODMAX6QsLHJcF1HG9XeJlraEaFsOUJrW3w1MKukTzk+tR4zzYvRHpeli9' + . '605E+YR2Wp+CVbC2o+9DtF1bd6EyodsTiV+qup1p8QpBG/SGdyLAn7A+dAqGgC92' + . '2H4vrubVqpcaWi+v0u1/qWjteC7+o+Jz8QbJGMXy8eTHNQfEok3zYU1ZBkdAtN2L' + . 'WkNhSVkE52VyQE4rB9XlCCe1HU76SDvu24hgQWx6+g1prxsptRq4xzM/uq0mHQ4m' + . 'ic45sAB3Dt2P8crF3VEbs0kA7Wm4nLIG/2yxs+Nq3+30/Xg5LoDlrc6tMv/o2t5t' + . 'agp2ypjiEVXHdz5HGrQH6mup8wZGFY67ewHisSrrNm25N5fFYBG4L3h4BdEHZIjh' + . 'ZTCiZBPyoGzPM8O+ClV7hpfx00rpO40OLBHwBUmpwc6PY9ZhoHOCr2ugywmy7ebk' + . '1eForCUZMm5TviHgxYLSXx58MWiKiVS+oAw+U9pwO+CYpo4aFbjDT2KzXosrCdwX' + . '8CIrGYtvHVOS7ksmDq2a5tVQ5015nV87YpoXcu+tLPfOFcyO4Toq7FnKJi9THFBI' + . 'gln0NFI84AceMEKFPOzBsHyJSa4RosxCgHcYr5kWFqjJWCc9HOv8KElAp1KGSqUC' + . 'VG1zx41zTf+eaNybY1IOncpxKQlDhVyDOZiLRGj/AokCATUq2S2hQEYkYZKAsrrJ' + . 'SkjVRpxRLAP4Hh6m+RdxfuwPiGjNsKu6G0tdz9Svq4rg3wSiu6446zdZL95cZlhz' + . 'utKm39FleBSBxcuAY0E7ZvdFIRzpX26DS/woF/8FubDrTiI5y++E63vUVxl+rFW8' + . 'Jdd4xo3SQsBrneoXZ4/RujuELrD+aO3aKZWrX3mx7MVbR+5PUxFjznJgdNjKygK0' + . 'JGVDy8vkpPwLeXfZIEhKSI1OHOWBQEbiAXneOwWVY1wDO2wk+NBYuGlH1Q2zxw4Z' + . '+34RU+9X+mS2uK4uqP/9jQtOX521R7Ze9XgmcuF8rbeut732PQwzFYyNR6wuHvhM' + . 'ueAJCURi9fzF4QsTujcQqJHwfV8ZLsFH6vw269HM3/wZX1u88tUp0nZxQ0OfWPus' + . 'REND0H+6eUv65YUL8MhjK+y1Y85U6rqlCI/+JvytG+HniEyXUTr8SiuQERI9iUCz' + . 'jVha/BxcQiRPKBgg+BkCX1cD7iew7CgyQ36Hf2RvMua8q+3vNjbhvcO7u6RZw8qV' + . 'R17pcdc3gdraoIkqLzOGTr4A5oZm/eoNP8ELqzag9fzvIzT3bsbDELzWZmivnCEk' + . 'XiCSnw9wC/OCYsh3JCR6EAkqE/TkGE7aA7CM/TAqb8Fa+ync1DwCl6zbhFzmE315' + . 'PI6kbfeNMd/zQPHWh9vRBb8qqSomfx2fPvES/nnNXXhrZxpdM3+FyPSFUAdb4B3c' + . 'zvBRDe2GSMQIPFL0Rn7iitXF9Jw3BqWnBHgHTL0TVvlV2Jb4E+7cWYOaxq1o3P8R' + . 'ZnJJt1RYpX0GnwE++wb8lJBgTXGSSBrhSWMRN018suRhtJ9xNk676jKMnf0oQh+8' + . 'DmfD01BVxJicSAIHKC9a3OYk5ut56wv4EZRLK2yPXxCJ6Thgz8WLe4bgF9tbEXYP' + . '4tJwhN8mUXQGSwRDk7w7QBqQgLwvWCSiaMeF52pEzpkEK5PBfxb8Fu3f+RZOmVmH' + . 'IRPPBdY9A6f1LRjDRwgTzgcSURJxyikXmtIl+MRQZBIL8fqB8bi7ZR9Wd6zDxYkw' + . '14Y40lrCfWAyGfaYUkl9BStMj24CIiz7/NTUlEL4vDPhrWvBtnkPYPPbu9BxzrUI' + . 'X7QYhrsb/r4dbDiMchkOn+WItQ/msFvwjv8g5q2pxMxVa5HrbMXFsRhysoYF4HsM' + . 'doy3x+YBdiZOkNQz97uylE0C9sgKpP/wGpoffxtDbrkEo+qeQGRXI5yWh2DTqKFh' + . '1+BDcxqe3ODhzub3MDySRV1ZElnKsYvytAyDKpM5kh9jML+lCdAF2hLI0rM+CnxQ' + . 'psA1AeiuHIwpwxmZNA4sfhIHp07C6DnTMGr6Q2gbpfD8riSuf+dDTsj9mFpVDicU' + . 'x6eeRogh1mT3RaMMBnixbUkJFRvJAMVBjs5ZEl3JTHU8rg0Edf4ERLv2YuNPF+Hl' + . 'lgTu2jgS1z/9Ciabh3B2sgxtXOAckj7K2MVOiwMOIi/tgV4d5X1wtCdk7Py0I3iq' + . 'OZMJ4f3E6Wg44zyM35eFjnTwa2oiDnQoSqULUUtmFu1W4F7sTfo5ilSvsfsrDkgg' + . 'b5ziMEc8EQAQCXFYWzM6cfStoTFYExqJXaEo/M4OxLkGHabOpW0mV4bOQ2Wo1mmU' + . 'l3XRaR6r5Tvu88A+QmdAAtI0T6KQsyDzTURgMjRavNtjVaMpPAbvW0lEKakK7eEQ' + . '32I4p7EJMhSGHbbY3kRbV4IS8lBV0U6CJCL9ayHy+dKABIrgi93LtknsblMuh1U5' + . '1tLq79pVjPUWyn1uhbnt4naFLfKLmBIP2CFuYLhz4TPLkpU4gkOHy+H5WZSV7UfY' + . '4qcue8xv5nqPWBy577wkAVGr2F3A5JcYDkO5uASw0RyB9+yh6DAiqCJwiUCOMrne' + . '5YVR8BcUtw0IhWBaNmyGS4tlk5cQcbwY2g9XgSdHiMV3wzA4Z7QQCfwSjD7QT0kC' + . '8nJgD5rcDERj4GN+L2w2hmK3iqOS0YTRnNtKERLtJzGNN6TBm7y2xTPiAYtX3gN5' + . 'AiY9Y/ESMo4zGumuEYhEdpPoTr4rpgt398GbflNJAlxeGPR4oqB91YY4tmEItusk' + . 'EqxNqiyxUkjEabIsH2vSWj45fFlVC8t24IGAgM3N2hHQliVE8gQsMjfMMNeUr9AA' + . 'p1COW9nHTpbZTYntpLAqSYCvR3IMjs1uzNmCpEGLqXKdpX19ZBUlUbAyTAHP3sTw' + . 'dJnPWc7NifRPYDKJ6QHOAd0tISFCAkeREDIMtWY164dzA7bXUZGPTTe7MxJ0NC34' + . '/cyPDPnZ1NAQjH5I2f+u74x+sM6NRGzfUSE/62R9VzvUvOdxLvgOL94Hl1fIpezz' + . 'YpikCXt6wBYZ2SQe5LyXeUFiIcmDujClplzbtlTFsHMiMVywNxadtFEA1tbenrdI' + . 'L7R9EkjRiLyMZ7aub9m4682vluvMz3Ke86lLzbiegHbcAHxAgkSCOgEuJLgiS+5K' + . 'nO9BIABbBNqTSKHOCnkk4cUrhlkk5bpdB5fErAnj//69metSPB1J9SOlfiVUJCH5' + . 'ptY37p844sKnckjfYZuheaZvWYTNnbySI4+8EeRzopA8TnlXCNADBqUik1gsbHJN' + . 'OKJ7kRClxAMiw7K8SDxpyzOd63rWsIxbl3/7lC3SXYoHDP2Bl+d9ekAeSEoRPDPF' + . 'vZK9ZfeqfZtb/zXfcbwpWS9Tz7MOHk15BiXk0BtaJNVTSq7j5CVEnUcI3gqkc8QD' + . 'VsjWlmU7oWjMSFQOpXCcd7WXu+jZS8fOEvDzHmm02YEqBV4w9usBeVhIugnBqZxR' + . 'U1NjNjXVN7F++lnjZszxffOeiG2NE9nwkE1O7oL/2DB9A27GDaKReKBCPCCTOIg6' + . 'gRdcy7StaEW17XV17PHSnYtWXH7qMhmvtr7eGrpvn142e4qD+VJTOpX0QK9X/aam' + . 'JmcWZjGspIz12199Jhfb8eWcm77d9XI8KOL88Hk25bvctPHIMSsEuCaTQDyQEK1P' + . 'qeR1PlR07ut0572VVYkvrbhsLMFrJeAb6urc5bNn59fQXgD6Kg6GQPD+cixn5ym/' + . 'trbW2rRpU65p68u/9nx9WtZN/5maN/j9Y9IjdIdLleXnQNQO+ZSQE0lWmNFEuamz' + . 'mecYhU9fcfm4mx/7xtDDgVy4pRHwfYEsVTdoAsXOGhoaZDBFWdlNW1/asebDF37g' + . 'ec60nJt5h9X8aHYNHz4PIC0nFosZcerc8Jz12vdmPH/FqVc+P3NCS01B58vmUy7/' + . '25QyxCNFDDOm/vCaCbh096Kf36d/u+aAnrq8ee/cl7ZdV3w+66/alOhSLJ80eYFE' + . 'MZ7G70gtffCBlduXYslmHlHkk+i8eH/S5jU184Jo1BNgIBdqq2fdSX6fMmbNmmWK' + . 'XMCV9CQH+wW8/18L/BeSV1YkHS6B9wAAAABJRU5ErkJggg=='; + } + + public function getAccessToken() + { + return $this->session->get($this->getId() . '.provider.access_token'); + } + + public function getUserName() + { + return $this->session->get($this->getId() . ".provider.username"); + } + +} diff --git a/lib/Alchemy/Phrasea/Authentication/RecoveryService.php b/lib/Alchemy/Phrasea/Authentication/RecoveryService.php index 5dea04a657..e4a92dad36 100644 --- a/lib/Alchemy/Phrasea/Authentication/RecoveryService.php +++ b/lib/Alchemy/Phrasea/Authentication/RecoveryService.php @@ -122,7 +122,7 @@ class RecoveryService $receiver = Receiver::fromUser($user); $token = $this->tokenManipulator->createResetPasswordToken($user); - if ($notifyUser) { + if ($notifyUser && $user->canRenewPassword()) { $url = $this->urlGenerator->generate('login_renew_password', [ 'token' => $token->getValue() ], true); $mail = MailRequestPasswordUpdate::create($this->application, $receiver); diff --git a/lib/Alchemy/Phrasea/Controller/Admin/UserController.php b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php index 97fa05db04..efaa4457ae 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/UserController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php @@ -191,6 +191,14 @@ class UserController extends Controller return $this->app->json(['success' => true]); } + public function changeCanRenewPasswordAction(Request $request) + { + $helper = $this->getUserManageHelper($request); + $helper->setCanRenewPassword(); + + return $this->app->json(['success' => true]); + } + public function applyRightsAction(Request $request) { $data = ['error' => true]; diff --git a/lib/Alchemy/Phrasea/Controller/Root/LoginController.php b/lib/Alchemy/Phrasea/Controller/Root/LoginController.php index 42c84511cf..37e768620d 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/LoginController.php +++ b/lib/Alchemy/Phrasea/Controller/Root/LoginController.php @@ -508,9 +508,7 @@ class LoginController extends Controller // does the provider provides a logout redirection ? if($providerId && ($provider = $this->findProvider($providerId))) { if(method_exists($provider, 'logoutAndRedirect')) { - $redirectToPhr = $this->app->url('logout', [ - 'redirect' => $request->query->get("redirect") - ]); + $redirectToPhr = $this->app->url('logout'); $response = $provider->logoutAndRedirect($redirectToPhr); } else { diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Admin/Users.php b/lib/Alchemy/Phrasea/ControllerProvider/Admin/Users.php index a9c4494810..9eb1133d86 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Admin/Users.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Admin/Users.php @@ -53,6 +53,7 @@ class Users implements ControllerProviderInterface, ServiceProviderInterface $controllers->post('/delete/', 'controller.admin.users:deleteUserAction'); $controllers->post('/auth-failure/reset/', 'controller.admin.users:resetAuthFailureAction'); $controllers->post('/mail-locked/change/', 'controller.admin.users:changeMailLockedAction'); + $controllers->post('/can-renew-password/change/', 'controller.admin.users:changeCanRenewPasswordAction'); $controllers->post('/rights/apply/', 'controller.admin.users:applyRightsAction') ->bind('admin_users_rights_apply'); $controllers->post('/rights/quotas/', 'controller.admin.users:editQuotasRightsAction'); diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php index bb493d5d38..0084834dce 100644 --- a/lib/Alchemy/Phrasea/Core/Version.php +++ b/lib/Alchemy/Phrasea/Core/Version.php @@ -17,7 +17,7 @@ class Version * @var string */ - private $number = '4.1.8-rc11'; + private $number = '4.1.8-rc12'; /** * @var string diff --git a/lib/Alchemy/Phrasea/Helper/User/Manage.php b/lib/Alchemy/Phrasea/Helper/User/Manage.php index 913810f236..ad1e6e7bc7 100644 --- a/lib/Alchemy/Phrasea/Helper/User/Manage.php +++ b/lib/Alchemy/Phrasea/Helper/User/Manage.php @@ -262,6 +262,17 @@ class Manage extends Helper $this->getObjectManager()->flush(); } + public function setCanRenewPassword() + { + /** @var UserRepository $userRepository */ + $userRepository = $this->app['repo.users']; + $user = $userRepository->find($this->request->request->get('user_id')); + $status = $this->request->request->get('action') == 'can-renew' ? true : false; + $user->setCanRenewPassword($status); + $this->getObjectManager()->persist($user); + $this->getObjectManager()->flush(); + } + /** * @return ObjectManager */ diff --git a/lib/Alchemy/Phrasea/Model/Entities/User.php b/lib/Alchemy/Phrasea/Model/Entities/User.php index 6db15b781f..57f4b9ab3e 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/User.php +++ b/lib/Alchemy/Phrasea/Model/Entities/User.php @@ -276,6 +276,11 @@ class User */ private $lastInactivityEmail; + /** + * @ORM\Column(type="boolean", name="can_renew_password", options={"default" = 1}) + */ + private $canRenewPassword = true; + /** * Constructor */ @@ -740,6 +745,25 @@ class User return $this; } + /** + * @return bool + */ + public function canRenewPassword() + { + return $this->canRenewPassword; + } + + /** + * @param $canRenewPassword + * @return $this + */ + public function setCanRenewPassword($canRenewPassword) + { + $this->canRenewPassword = (Boolean) $canRenewPassword; + + return $this; + } + /** * @return boolean */ diff --git a/lib/Alchemy/Phrasea/PhraseanetService/Controller/PSExposeController.php b/lib/Alchemy/Phrasea/PhraseanetService/Controller/PSExposeController.php index bb9e766492..473d941c8f 100644 --- a/lib/Alchemy/Phrasea/PhraseanetService/Controller/PSExposeController.php +++ b/lib/Alchemy/Phrasea/PhraseanetService/Controller/PSExposeController.php @@ -209,7 +209,8 @@ class PSExposeController extends Controller if (!$session->has($passSessionName) && $providerId != null) { try { $provider = $this->getAuthenticationProviders()->get($providerId); - if ($provider->getType() == 'PsAuth' && $exposeConfiguration['auth_provider_name'] == $providerId) { + // class name + if (($provider->getType() == 'Openid' || $provider->getType() == 'PsAuth') && $exposeConfiguration['auth_provider_name'] == $providerId) { $session->set($passSessionName, ['access_token' => $provider->getAccessToken()]); $session->set($this->getLoginSessionName($exposeName), $provider->getUserName()); diff --git a/lib/Alchemy/Phrasea/PhraseanetService/Form/PSExposeConnectionType.php b/lib/Alchemy/Phrasea/PhraseanetService/Form/PSExposeConnectionType.php index 49ec6f7556..e77b0dd5e0 100644 --- a/lib/Alchemy/Phrasea/PhraseanetService/Form/PSExposeConnectionType.php +++ b/lib/Alchemy/Phrasea/PhraseanetService/Form/PSExposeConnectionType.php @@ -45,7 +45,7 @@ class PSExposeConnectionType extends AbstractType ] ]) ->add('auth_provider_name', ChoiceType::class, [ - 'label' => 'admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth', + 'label' => 'admin:phrasea-service-setting:tab:expose:: auth provider name with type openid', 'required' => false, 'choice_list' => new ArrayChoiceList( $this->getEligibleProvider() @@ -117,7 +117,7 @@ class PSExposeConnectionType extends AbstractType $values = array_keys( array_filter($this->app['conf']->get(['authentication', 'providers'], []), function ($provider) { - return ($provider['type'] == 'ps-auth' || $provider['type'] == 'PsAuth'); + return ($provider['type'] == 'openid' || $provider['type'] == 'ps-auth' || $provider['type'] == 'PsAuth'); }) ); diff --git a/lib/classes/patch/418RC12PHRAS4007.php b/lib/classes/patch/418RC12PHRAS4007.php new file mode 100644 index 0000000000..b7f54b8f74 --- /dev/null +++ b/lib/classes/patch/418RC12PHRAS4007.php @@ -0,0 +1,98 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function apply(base $base, Application $app) + { + if ($base->get_base_type() === base::DATA_BOX) { + $this->patch_databox($base, $app); + } elseif ($base->get_base_type() === base::APPLICATION_BOX) { + $this->patch_appbox($base, $app); + } + + return true; + } + + private function patch_databox(databox $databox, Application $app) + { + } + + private function patch_appbox(base $appbox, Application $app) + { + /** @var PropertyAccess $conf */ + $conf = $app['conf']; + + $providers = $conf->get(['authentication', 'providers']); + $providersType = array_column($app['conf']->get(['authentication', 'providers']), 'type'); + + // set an example of setting if not exist + if (!in_array('openid', $providersType)) { + $providers['openid-1'] = [ + 'enabled' => false, + 'display' => false, + 'title' => 'openid 1', + 'type' => 'openid', + 'options' => [ + 'client-id' => 'client_id', + 'client-secret' => 'client_secret', + 'base-url' => 'https://keycloak.phrasea.local', + 'realm-name' => 'phrasea', + 'exclusive' => false, + 'icon-uri' => null, + 'birth-group' => '_firstlog', + 'everyone-group' => '_everyone', + 'metamodel' => '_metamodel', + 'model-gpfx' => '_M_', + 'model-upfx' => '_U_', + 'auto-logout' => false + ] + ]; + + $conf->set(['authentication', 'providers'], $providers); + } + } +} diff --git a/lib/conf.d/configuration.yml b/lib/conf.d/configuration.yml index 390aebe395..0cf8ff0c80 100644 --- a/lib/conf.d/configuration.yml +++ b/lib/conf.d/configuration.yml @@ -228,24 +228,24 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' - icon-uri: null, - debug: false, - birth-group: '_firstlog' - everyone-group: '_everyone' - metamodel: '_metamodel' - model-gpfx: '_M_' - model-upfx: '_U_' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea + exclusive: false + icon-uri: null + birth-group: _firstlog + everyone-group: _everyone + metamodel: _metamodel + model-gpfx: _M_ + model-upfx: _U_ + debug: false auto-logout: false auto-connect-idp-name: null registration-fields: diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index 844e4af54c..34a941f6cf 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -1098,7 +1098,7 @@ An unexpected error occurred during authentication process, please contact an admin Ein Fehler ist bei Ihre Authentifizierung aufgetreten. Bitte wenden Sie sich an Ihren Systemadministrator - Controller/Root/LoginController.php + Controller/Root/LoginController.php An upload on %bridge_adapter% failed, the resaon is : %reason% @@ -1243,7 +1243,7 @@ Are you sure you want to reset rights? Sind Sie sicher, die Rechte zurückzusetzen? - web/admin/editusers.html.twig + web/admin/editusers.html.twig Attention @@ -2811,7 +2811,7 @@ Email '%email%' for login '%login%' already exists in database Email '%email%' für Login '%login%' existiert schon in der Databank - Controller/Admin/UserController.php + Controller/Admin/UserController.php Email Name @@ -4246,17 +4246,17 @@ Login %login% already exists in database Benutzername %login% existiert schon im Datenbank - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login %login% is already defined in the file at line %line% Benutzername %login% ist schon in Datei in Linie %line% definiert - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login line %line% is empty Benutzername Zeile %line% ist leer - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login to link your account @@ -4278,7 +4278,7 @@ Mail line %line% is empty Email Zeile %line% ist leer - Controller/Admin/UserController.php + Controller/Admin/UserController.php Mail sent @@ -4988,7 +4988,7 @@ Password is empty at line %line% Passwort ist leer in Zeile %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Past year @@ -5054,7 +5054,7 @@ Phraseanet guest-access is disabled Phraseanet Gast Zugriff ist deaktiviert - Controller/Root/LoginController.php + Controller/Root/LoginController.php Phraseanet may require many binaries. @@ -7078,7 +7078,7 @@ Unable to authenticate with %provider_name% Unmöglich, mit %provider_name% zu authentifizieren - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7096,12 +7096,12 @@ Unable to create template, the name is already used. Unmöglich, eine Vorlage zu erstellen; die Name wird schon benutzt. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to create the user. Unmöglich, den Benutzer zu erstellen. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to delete list @@ -7121,7 +7121,7 @@ Unable to retrieve provider identity unmöglich, Provider Identität abzurufen - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7341,7 +7341,7 @@ User's publications in feeds Veröffentlichung(en) des Nutzers in Feeds - web/admin/editusers.html.twig + web/admin/editusers.html.twig Users @@ -7576,7 +7576,7 @@ Vous etes maintenant deconnecte. A bientot. Sie sind nun erfolgreich abgemeldet. Bis bald! - Controller/Root/LoginController.php + Controller/Root/LoginController.php Vous n'avez pas assez de droits sur certains elements selectionnes @@ -7995,7 +7995,7 @@ Your identity is not recognized. Ihre Identität wird nicht erkannt - Controller/Root/LoginController.php + Controller/Root/LoginController.php Your install might need to build some sub-definitions @@ -8187,7 +8187,7 @@ admin :users: user owned api Owner - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin:: La collection n'a pas ete creee : vous devez donner un nom a votre collection @@ -8609,7 +8609,7 @@ admin::compte-utilisateur activite Tätigkeit Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8618,7 +8618,7 @@ admin::compte-utilisateur adresse Adresse Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8633,7 +8633,7 @@ admin::compte-utilisateur code postal PLZ Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8663,7 +8663,7 @@ admin::compte-utilisateur email E-Mail Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8675,7 +8675,7 @@ admin::compte-utilisateur fax Fax Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig web/account/account.html.twig @@ -8711,7 +8711,7 @@ Name Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8726,14 +8726,14 @@ admin::compte-utilisateur pays Land - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/users.html.twig admin::compte-utilisateur poste Beruf Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8744,7 +8744,7 @@ Vorname Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8761,7 +8761,7 @@ admin::compte-utilisateur societe Unternehmen Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8777,7 +8777,7 @@ admin::compte-utilisateur telephone Telefon - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8793,7 +8793,7 @@ admin::compte-utilisateur ville Ort Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9343,12 +9343,12 @@ admin::users: Api id Id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Api name Name - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Auth failure @@ -9358,7 +9358,7 @@ admin::users: api ID API ID - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: api list @@ -9368,27 +9368,27 @@ admin::users: api oauth code list Oauth requests - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure locked list Authentifizierungsfehler - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure unlocked list Verlauf der fehlgeschlagenen Authentifizierungen (letzte 2 Monate) - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: creation date Erstellungsdatum web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: delete auth failure @@ -9398,7 +9398,7 @@ admin::users: distance_id IDP Id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: erase auth failure table @@ -9408,24 +9408,24 @@ admin::users: grant password info Password Granted - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: ip IP-Adresse web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user api application API Anwendung - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user providers Auth Provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: locked @@ -9435,72 +9435,72 @@ admin::users: modification date Änderungsdatum - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: no api defined for this user Keine API für diesen Benutzer wurde definiert - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password granted Ja admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password not granted Nein admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: provider Autorisierungsanbieter - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: redirect uri Redirect uri - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: reset auth failure Zurücksetzen des Fehlerzählers - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: scope Scope - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: type info Typ - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: user api use Benutzt - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: username Benutzername web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook activation Webhook activation - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook url Webhook URL - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users:edit: Manage inline selection @@ -10062,9 +10062,9 @@ Expose Service in Prod aktivieren PhraseanetService/Form/PSExposeConfigurationType.php - - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - Name des Authentifizierungsanbieters mit Typ ps-auth + + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid PhraseanetService/Form/PSExposeConnectionType.php @@ -10501,7 +10501,7 @@ Bridge/Dailymotion/playlist_createcontainer.html.twig admin/collection/details.html.twig admin/publications/fiche.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig user/import/file.html.twig admin/databox/details.html.twig admin/statusbit/edit.html.twig @@ -10615,7 +10615,7 @@ admin/publications/fiche.html.twig admin/publications/list.html.twig web/admin/subdefs.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig web/admin/setup.html.twig web/admin/structure.html.twig web/admin/dashboard.html.twig @@ -10649,13 +10649,13 @@ Alle Databox admin/worker-manager/worker_info.html.twig admin/inspector/record-index.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig button::choose type Typ auswählen - web/admin/editusers.html.twig + web/admin/editusers.html.twig button::no @@ -11725,18 +11725,18 @@ login::erreur: Erreur d'authentification Anmeldefehler - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php login::erreur: No available connection - Please contact sys-admin Fehler: Keine verfügbare Verbindung - Bitte kontaktieren Sie den Administrator - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::erreur: Vous n'avez pas confirme votre email Zugriff nicht möglich. Sie haben Ihre E-Mail Adresse noch nicht bestätigt - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::notification: Changements enregistres @@ -11785,12 +11785,12 @@ login::register:email: Vous avez ete accepte sur les collections suivantes : Ihr Zugriff wurde für die folgende Kollektionen genehmigt : - Controller/Admin/UserController.php + Controller/Admin/UserController.php login::register:email: Vous avez ete refuse sur les collections suivantes : Ihr Zugriff wurde für die folgende Kollektionen abgelehnt : - Controller/Admin/UserController.php + Controller/Admin/UserController.php mai diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 6f180623d9..fd59680723 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -1099,7 +1099,7 @@ An unexpected error occurred during authentication process, please contact an admin An unexpected error has occured during authentication process. Please contact an admin - Controller/Root/LoginController.php + Controller/Root/LoginController.php An upload on %bridge_adapter% failed, the resaon is : %reason% @@ -1244,7 +1244,7 @@ Are you sure you want to reset rights? Are you sure you want to reset the user rights? - web/admin/editusers.html.twig + web/admin/editusers.html.twig Attention @@ -2813,7 +2813,7 @@ Email '%email%' for login '%login%' already exists in database E-mail '%email%' for login '%login%' already exists in database - Controller/Admin/UserController.php + Controller/Admin/UserController.php Email Name @@ -4248,17 +4248,17 @@ Login %login% already exists in database Login %login% already exists in database - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login %login% is already defined in the file at line %line% Login %login% already exists in the file line %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login line %line% is empty Login line %line% is empty - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login to link your account @@ -4280,7 +4280,7 @@ Mail line %line% is empty E-mail line %line% is empty - Controller/Admin/UserController.php + Controller/Admin/UserController.php Mail sent @@ -4990,7 +4990,7 @@ Password is empty at line %line% Password is empty in line %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Past year @@ -5056,7 +5056,7 @@ Phraseanet guest-access is disabled Phraseanet guest-access is disabled. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Phraseanet may require many binaries. @@ -7080,7 +7080,7 @@ Unable to authenticate with %provider_name% Unable to authenticate with %provider_name% - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7098,12 +7098,12 @@ Unable to create template, the name is already used. Unable to create template, the name is already used. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to create the user. Unable to create the user. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to delete list @@ -7123,7 +7123,7 @@ Unable to retrieve provider identity Unable to retrieve provider identity. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7343,7 +7343,7 @@ User's publications in feeds User's publication(s) in feeds - web/admin/editusers.html.twig + web/admin/editusers.html.twig Users @@ -7578,7 +7578,7 @@ Vous etes maintenant deconnecte. A bientot. You are now disconnected. See you soon. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Vous n'avez pas assez de droits sur certains elements selectionnes @@ -7997,7 +7997,7 @@ Your identity is not recognized. Your identity is not recognized. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Your install might need to build some sub-definitions @@ -8189,7 +8189,7 @@ admin :users: user owned api Owner - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin:: La collection n'a pas ete creee : vous devez donner un nom a votre collection @@ -8611,7 +8611,7 @@ admin::compte-utilisateur activite Activity Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8620,7 +8620,7 @@ admin::compte-utilisateur adresse Address Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8635,7 +8635,7 @@ admin::compte-utilisateur code postal Zip code Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8665,7 +8665,7 @@ admin::compte-utilisateur email E-mail Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8677,7 +8677,7 @@ admin::compte-utilisateur fax Fax Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig web/account/account.html.twig @@ -8713,7 +8713,7 @@ Last name Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8728,14 +8728,14 @@ admin::compte-utilisateur pays Country - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/users.html.twig admin::compte-utilisateur poste Job Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8746,7 +8746,7 @@ First name Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8763,7 +8763,7 @@ admin::compte-utilisateur societe Company Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8779,7 +8779,7 @@ admin::compte-utilisateur telephone Phone - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8795,7 +8795,7 @@ admin::compte-utilisateur ville City Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9345,12 +9345,12 @@ admin::users: Api id Api id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Api name Name - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Auth failure @@ -9360,7 +9360,7 @@ admin::users: api ID API ID - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: api list @@ -9370,27 +9370,27 @@ admin::users: api oauth code list Oauth requests - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure locked list auth failure locked - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure unlocked list Auth failure history (2 months retention ) - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: creation date Creation date web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: delete auth failure @@ -9400,7 +9400,7 @@ admin::users: distance_id IDP Id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: erase auth failure table @@ -9410,24 +9410,24 @@ admin::users: grant password info Password Granted - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: ip Ip adress web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user api application API application - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user providers Auth Provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: locked @@ -9437,72 +9437,72 @@ admin::users: modification date Modification date - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: no api defined for this user No API for this user - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password granted Yes admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password not granted No admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: provider Auth provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: redirect uri Redirect uri - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: reset auth failure Reset auth failures counter - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: scope Scope - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: type info Application Type - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: user api use Used - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: username Username web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook activation Webhook activation - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook url Webhook URL - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users:edit: Manage inline selection @@ -10064,9 +10064,9 @@ Display Expose Service in Production PhraseanetService/Form/PSExposeConfigurationType.php - - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - Auth provider name with type ps-auth + + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid PhraseanetService/Form/PSExposeConnectionType.php @@ -10503,7 +10503,7 @@ Bridge/Dailymotion/playlist_createcontainer.html.twig admin/collection/details.html.twig admin/publications/fiche.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig user/import/file.html.twig admin/databox/details.html.twig admin/statusbit/edit.html.twig @@ -10617,7 +10617,7 @@ admin/publications/fiche.html.twig admin/publications/list.html.twig web/admin/subdefs.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig web/admin/setup.html.twig web/admin/structure.html.twig web/admin/dashboard.html.twig @@ -10651,13 +10651,13 @@ All Databox admin/worker-manager/worker_info.html.twig admin/inspector/record-index.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig button::choose type Choose type - web/admin/editusers.html.twig + web/admin/editusers.html.twig button::no @@ -11727,18 +11727,18 @@ login::erreur: Erreur d'authentification Authentication error - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php login::erreur: No available connection - Please contact sys-admin No available connection. Please contact system administrator - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::erreur: Vous n'avez pas confirme votre email Access denied, you have not confirmed your e-mail address. - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::notification: Changements enregistres @@ -11787,12 +11787,12 @@ login::register:email: Vous avez ete accepte sur les collections suivantes : Your access has been granted on these bases and collections: - Controller/Admin/UserController.php + Controller/Admin/UserController.php login::register:email: Vous avez ete refuse sur les collections suivantes : Your access has been denied to the following databases and collections: - Controller/Admin/UserController.php + Controller/Admin/UserController.php mai diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index f0bd245974..c6b4a5c168 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -1098,7 +1098,7 @@ An unexpected error occurred during authentication process, please contact an admin Une erreur est survenue lors de l'authentification. Veuillez contacter un Administrateur - Controller/Root/LoginController.php + Controller/Root/LoginController.php An upload on %bridge_adapter% failed, the resaon is : %reason% @@ -1243,7 +1243,7 @@ Are you sure you want to reset rights? Etes-vous sûr de vouloir réinitialiser les droits ? - web/admin/editusers.html.twig + web/admin/editusers.html.twig Attention @@ -2811,7 +2811,7 @@ Email '%email%' for login '%login%' already exists in database L'adresse e-mail '%email%' pour l'identifiant '%login%' existe déjà dans la base - Controller/Admin/UserController.php + Controller/Admin/UserController.php Email Name @@ -4246,17 +4246,17 @@ Login %login% already exists in database L'identifiant %login% existe déjà dans la base de données - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login %login% is already defined in the file at line %line% L'identifiant %login% est déjà mentionné dans le fichier à la ligne %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login line %line% is empty L'identifiant n'est pas renseigné à la ligne %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login to link your account @@ -4278,7 +4278,7 @@ Mail line %line% is empty L'adresse e-mail n'est pas renseignée à la ligne %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Mail sent @@ -4988,7 +4988,7 @@ Password is empty at line %line% Le mot de passe est vide à la ligne %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Past year @@ -5054,7 +5054,7 @@ Phraseanet guest-access is disabled L'accès invité de Phraseanet est désactivé. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Phraseanet may require many binaries. @@ -7078,7 +7078,7 @@ Unable to authenticate with %provider_name% Impossible de s'authentifier avec %provider_name% - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7096,12 +7096,12 @@ Unable to create template, the name is already used. Impossible le créer le modèle, le nom donné est déjà utilisé. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to create the user. Impossible de créer l'utilisateur. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to delete list @@ -7121,7 +7121,7 @@ Unable to retrieve provider identity Impossible de récupérer l'identité auprès du fournisseur. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7341,7 +7341,7 @@ User's publications in feeds Publication(s) de l'utilisateur - web/admin/editusers.html.twig + web/admin/editusers.html.twig Users @@ -7576,7 +7576,7 @@ Vous etes maintenant deconnecte. A bientot. Vous êtes maintenant déconnecté. A bientôt. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Vous n'avez pas assez de droits sur certains elements selectionnes @@ -7995,7 +7995,7 @@ Your identity is not recognized. Votre identité n'est pas reconnue. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Your install might need to build some sub-definitions @@ -8187,7 +8187,7 @@ admin :users: user owned api Propriétaire - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin:: La collection n'a pas ete creee : vous devez donner un nom a votre collection @@ -8609,7 +8609,7 @@ admin::compte-utilisateur activite Activité Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8618,7 +8618,7 @@ admin::compte-utilisateur adresse Adresse Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8633,7 +8633,7 @@ admin::compte-utilisateur code postal Code postal Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8663,7 +8663,7 @@ admin::compte-utilisateur email E-mail Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8675,7 +8675,7 @@ admin::compte-utilisateur fax Fax Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig web/account/account.html.twig @@ -8711,7 +8711,7 @@ Nom Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8726,14 +8726,14 @@ admin::compte-utilisateur pays Pays - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/users.html.twig admin::compte-utilisateur poste Poste Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8744,7 +8744,7 @@ Prénom Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8761,7 +8761,7 @@ admin::compte-utilisateur societe Société Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8777,7 +8777,7 @@ admin::compte-utilisateur telephone Téléphone - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8793,7 +8793,7 @@ admin::compte-utilisateur ville Ville Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9344,12 +9344,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: Api id Id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Api name Nom - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Auth failure @@ -9359,7 +9359,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: api ID API ID - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: api list @@ -9369,27 +9369,27 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: api oauth code list Requêtes Oauth - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure locked list Echecs d'authentification - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure unlocked list Historique des échecs d'authentification (2 derniers mois) - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: creation date Date de création web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: delete auth failure @@ -9399,7 +9399,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: distance_id IDP Id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: erase auth failure table @@ -9409,24 +9409,24 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: grant password info Password Granted - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: ip Adresse IP web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user api application Application API - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user providers Auth Provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: locked @@ -9436,72 +9436,72 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: modification date Date de modification - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: no api defined for this user Aucune API pour cet utilisateur - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password granted Oui admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password not granted Non admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: provider Auth provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: redirect uri Uri de redirection - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: reset auth failure RAZ du compteur d'échec - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: scope Scope - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: type info Type de l'application - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: user api use Utilisée - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: username Nom d'utilisateur web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook activation Webhook activation - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook url Webhook URL - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users:edit: Manage inline selection @@ -10063,9 +10063,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Activer Expose Service dans Production PhraseanetService/Form/PSExposeConfigurationType.php - - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - Nom du Auth provider de type ps-auth + + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid PhraseanetService/Form/PSExposeConnectionType.php @@ -10502,7 +10502,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Bridge/Dailymotion/playlist_createcontainer.html.twig admin/collection/details.html.twig admin/publications/fiche.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig user/import/file.html.twig admin/databox/details.html.twig admin/statusbit/edit.html.twig @@ -10616,7 +10616,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin/publications/fiche.html.twig admin/publications/list.html.twig web/admin/subdefs.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig web/admin/setup.html.twig web/admin/structure.html.twig web/admin/dashboard.html.twig @@ -10650,13 +10650,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Toutes les Databox admin/worker-manager/worker_info.html.twig admin/inspector/record-index.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig button::choose type Choisir le type - web/admin/editusers.html.twig + web/admin/editusers.html.twig button::no @@ -11726,18 +11726,18 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login::erreur: Erreur d'authentification Erreur d'authentification - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php login::erreur: No available connection - Please contact sys-admin Connexion impossible, contactez un administrateur système - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::erreur: Vous n'avez pas confirme votre email Accès impossible, vous n'avez pas confirmé votre adresse e-mail. - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::notification: Changements enregistres @@ -11786,12 +11786,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login::register:email: Vous avez ete accepte sur les collections suivantes : Votre accès a été validé pour les collections suivantes : - Controller/Admin/UserController.php + Controller/Admin/UserController.php login::register:email: Vous avez ete refuse sur les collections suivantes : Votre accès a été refusé pour les collections suivantes : - Controller/Admin/UserController.php + Controller/Admin/UserController.php mai diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index 25d5ca02ee..fa1c6825c3 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -1099,7 +1099,7 @@ An unexpected error occurred during authentication process, please contact an admin An unexpected error occurred during authentication process, please contact an admin - Controller/Root/LoginController.php + Controller/Root/LoginController.php An upload on %bridge_adapter% failed, the resaon is : %reason% @@ -1244,7 +1244,7 @@ Are you sure you want to reset rights? Bent u zeker om de rechten te herstellen? - web/admin/editusers.html.twig + web/admin/editusers.html.twig Attention @@ -2815,7 +2815,7 @@ Email '%email%' for login '%login%' already exists in database Email '%email%' for login '%login%' already exists in database - Controller/Admin/UserController.php + Controller/Admin/UserController.php Email Name @@ -4253,17 +4253,17 @@ Login %login% already exists in database Login %login% already exists in database - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login %login% is already defined in the file at line %line% Login %login% is already defined in the file at line %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login line %line% is empty Login line %line% is empty - Controller/Admin/UserController.php + Controller/Admin/UserController.php Login to link your account @@ -4285,7 +4285,7 @@ Mail line %line% is empty Mail line %line% is empty - Controller/Admin/UserController.php + Controller/Admin/UserController.php Mail sent @@ -4995,7 +4995,7 @@ Password is empty at line %line% Password is empty at line %line% - Controller/Admin/UserController.php + Controller/Admin/UserController.php Past year @@ -5061,7 +5061,7 @@ Phraseanet guest-access is disabled Gast toegang voor Phraseanet is niet actief - Controller/Root/LoginController.php + Controller/Root/LoginController.php Phraseanet may require many binaries. @@ -7085,7 +7085,7 @@ Unable to authenticate with %provider_name% Unable to authenticate with %provider_name% - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7103,12 +7103,12 @@ Unable to create template, the name is already used. Unable to create template, the name is already used. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to create the user. Unable to create the user. - Controller/Admin/UserController.php + Controller/Admin/UserController.php Unable to delete list @@ -7128,7 +7128,7 @@ Unable to retrieve provider identity Het is niet mogelijk om de identiteit van de provider te ontvangen - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php @@ -7348,7 +7348,7 @@ User's publications in feeds User's publications in feeds - web/admin/editusers.html.twig + web/admin/editusers.html.twig Users @@ -7583,7 +7583,7 @@ Vous etes maintenant deconnecte. A bientot. U bent nu uitgelogd. Tot later. - Controller/Root/LoginController.php + Controller/Root/LoginController.php Vous n'avez pas assez de droits sur certains elements selectionnes @@ -8002,7 +8002,7 @@ Your identity is not recognized. Uw identiteit werd niet herkend - Controller/Root/LoginController.php + Controller/Root/LoginController.php Your install might need to build some sub-definitions @@ -8194,7 +8194,7 @@ admin :users: user owned api admin :users: user owned api - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin:: La collection n'a pas ete creee : vous devez donner un nom a votre collection @@ -8616,7 +8616,7 @@ admin::compte-utilisateur activite Activiteit Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8625,7 +8625,7 @@ admin::compte-utilisateur adresse Adres Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8640,7 +8640,7 @@ admin::compte-utilisateur code postal Postcode Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8670,7 +8670,7 @@ admin::compte-utilisateur email Email Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8682,7 +8682,7 @@ admin::compte-utilisateur fax Fax Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/editusers.html.twig web/account/account.html.twig @@ -8718,7 +8718,7 @@ Naam Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8733,14 +8733,14 @@ admin::compte-utilisateur pays Land - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/admin/users.html.twig admin::compte-utilisateur poste Postcode Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8751,7 +8751,7 @@ Voornaam Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8768,7 +8768,7 @@ admin::compte-utilisateur societe Bedrijf Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig @@ -8784,7 +8784,7 @@ admin::compte-utilisateur telephone Telefoon - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8800,7 +8800,7 @@ admin::compte-utilisateur ville Star Core/Provider/RegistrationServiceProvider.php - Controller/Admin/UserController.php + Controller/Admin/UserController.php web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9350,12 +9350,12 @@ admin::users: Api id admin::users: Api id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Api name admin::users: Api name - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: Auth failure @@ -9365,7 +9365,7 @@ admin::users: api ID admin::users: api ID - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: api list @@ -9375,27 +9375,27 @@ admin::users: api oauth code list admin::users: api oauth code list - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure locked list admin::users: auth failure locked list - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: auth failure unlocked list admin::users: auth failure unlocked list - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: creation date admin::users: creation date web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: delete auth failure @@ -9405,7 +9405,7 @@ admin::users: distance_id admin::users: distance_id - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: erase auth failure table @@ -9415,24 +9415,24 @@ admin::users: grant password info admin::users: grant password info - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: ip admin::users: ip web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user api application admin::users: list user api application - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: list user providers admin::users: list user providers - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: locked @@ -9442,72 +9442,72 @@ admin::users: modification date admin::users: modification date - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: no api defined for this user admin::users: no api defined for this user - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password granted admin::users: password granted admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: password not granted admin::users: password not granted admin/inspector/record-index.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: provider admin::users: provider - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: redirect uri admin::users: redirect uri - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: reset auth failure admin::users: reset auth failure - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: scope admin::users: scope - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: type info admin::users: type info - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: user api use admin::users: user api use - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: username admin::users: username web/admin/auth-failure.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook activation admin::users: webhook activation - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users: webhook url admin::users: webhook url - web/admin/editusers.html.twig + web/admin/editusers.html.twig admin::users:edit: Manage inline selection @@ -10069,9 +10069,9 @@ admin:phrasea-service-setting:tab:expose:: activate Phraseanet-service expose PhraseanetService/Form/PSExposeConfigurationType.php - - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth + + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid + admin:phrasea-service-setting:tab:expose:: auth provider name with type openid PhraseanetService/Form/PSExposeConnectionType.php @@ -10508,7 +10508,7 @@ Bridge/Dailymotion/playlist_createcontainer.html.twig admin/collection/details.html.twig admin/publications/fiche.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig user/import/file.html.twig admin/databox/details.html.twig admin/statusbit/edit.html.twig @@ -10622,7 +10622,7 @@ admin/publications/fiche.html.twig admin/publications/list.html.twig web/admin/subdefs.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig web/admin/setup.html.twig web/admin/structure.html.twig web/admin/dashboard.html.twig @@ -10656,13 +10656,13 @@ button::choose databox admin/worker-manager/worker_info.html.twig admin/inspector/record-index.html.twig - web/admin/editusers.html.twig - web/admin/editusers.html.twig + web/admin/editusers.html.twig + web/admin/editusers.html.twig button::choose type button::choose type - web/admin/editusers.html.twig + web/admin/editusers.html.twig button::no @@ -11732,18 +11732,18 @@ login::erreur: Erreur d'authentification Verificatiefout - Controller/Root/LoginController.php + Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php login::erreur: No available connection - Please contact sys-admin Geen beschikbare verbinding - Neem contact op met sys-admin - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::erreur: Vous n'avez pas confirme votre email U hebt uw email adres niet bevestigd - Controller/Root/LoginController.php + Controller/Root/LoginController.php login::notification: Changements enregistres @@ -11792,12 +11792,12 @@ login::register:email: Vous avez ete accepte sur les collections suivantes : login::register:email: Vous avez ete accepte sur les collections suivantes : - Controller/Admin/UserController.php + Controller/Admin/UserController.php login::register:email: Vous avez ete refuse sur les collections suivantes : login::register:email: Vous avez ete refuse sur les collections suivantes : - Controller/Admin/UserController.php + Controller/Admin/UserController.php mai diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index f1bb0c039b..dfa494a2d4 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index 7c71b6dbf5..9a6a94f2d5 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 5423249be8..fabf6a0867 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index 500b909c1f..492c6a35bb 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/templates/web/admin/editusers.html.twig b/templates/web/admin/editusers.html.twig index 56743c3996..bd71bcdc28 100644 --- a/templates/web/admin/editusers.html.twig +++ b/templates/web/admin/editusers.html.twig @@ -582,7 +582,7 @@
- + Email unlocked
+
+ + + + +
+
{% set usrProviders = app['repo.usr-auth-providers'].findByUser(main_user) %} {% if usrProviders|length > 0 %} @@ -1508,6 +1517,21 @@ }); }); + $('input[type=radio][name="can-renew-password"]').change( function() { + let $this = $(this); + $.ajax({ + type: 'POST', + url: '/admin/users/can-renew-password/change/', + dataType: 'json', + data: { + user_id: {{ main_user.getId() }}, + action: $this.val() + }, + success: function (data) { + } + }); + }); + function listRecordAcl() { let expiredRight = 0; if ($("#expired-right").is(":checked")) diff --git a/tests/Alchemy/Tests/Phrasea/Authentication/Provider/FactoryTest.php b/tests/Alchemy/Tests/Phrasea/Authentication/Provider/FactoryTest.php index 8bbfd4e19b..a197c58409 100644 --- a/tests/Alchemy/Tests/Phrasea/Authentication/Provider/FactoryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Authentication/Provider/FactoryTest.php @@ -98,16 +98,15 @@ class FactoryTest extends \PhraseanetTestCase 'Alchemy\Phrasea\Authentication\Provider\Viadeo' ], [ - 'ps-auth-foo', - 'ps-auth', + 'openid-foo', + 'openid', [ 'client-id' => 'id', 'client-secret' => 'secret', 'base-url' => 'https://api-auth.phrasea.local', - 'provider-type' => 'oauth', - 'provider-name' => 'v2', + 'realm-name' => 'phrasea', ], - 'Alchemy\Phrasea\Authentication\Provider\PsAuth' + 'Alchemy\Phrasea\Authentication\Provider\Openid' ] ]; } diff --git a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-setup.yml b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-setup.yml index a8640ec782..361cc8135d 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-setup.yml +++ b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-setup.yml @@ -168,17 +168,16 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea icon-uri: null registration-fields: - diff --git a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-with-hosts.yml b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-with-hosts.yml index 361d6e10f7..d36f57991d 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-with-hosts.yml +++ b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration-with-hosts.yml @@ -183,17 +183,16 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea icon-uri: null registration-fields: - diff --git a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration.yml b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration.yml index a8640ec782..361cc8135d 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration.yml +++ b/tests/Alchemy/Tests/Phrasea/Core/Configuration/Fixtures/configuration.yml @@ -168,17 +168,16 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea icon-uri: null registration-fields: - diff --git a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/Fixtures/configuration-maintenance.yml b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/Fixtures/configuration-maintenance.yml index 0462e20ffa..8ee9599766 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/Fixtures/configuration-maintenance.yml +++ b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/Fixtures/configuration-maintenance.yml @@ -133,17 +133,16 @@ authentication: options: client-id: '' client-secret: '' - ps_auth_1: + openid-1: enabled: false display: false - title: 'PS Auth 1' - type: 'ps-auth' + title: 'openid 1' + type: openid options: client-id: '' client-secret: '' - base-url: 'https://api-auth.phrasea.local' - provider-type: 'oauth' - provider-name: 'v2' + base-url: 'https://keycloak.phrasea.local' + realm-name: phrasea icon-uri: null registration-fields: - diff --git a/tests/Alchemy/Tests/Phrasea/Plugin/Fixtures/PluginDir/TestPlugin/composer.lock b/tests/Alchemy/Tests/Phrasea/Plugin/Fixtures/PluginDir/TestPlugin/composer.lock new file mode 100644 index 0000000000..ebf4705ea7 --- /dev/null +++ b/tests/Alchemy/Tests/Phrasea/Plugin/Fixtures/PluginDir/TestPlugin/composer.lock @@ -0,0 +1,18 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "2f3a1ed4816797820ab9fdbc67c25cc8", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.2.0" +}