You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/05/03 14:58:10 UTC

[3/8] syncope git commit: [SYNCOPE-1270] implementation for OpenID Connect for Admin Console and Enduser

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderMappingPanel.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderMappingPanel.java b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderMappingPanel.java
new file mode 100644
index 0000000..d12965e
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderMappingPanel.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.wizards;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wizards.resources.ItemTransformersTogglePanel;
+import org.apache.syncope.client.console.wizards.resources.JEXLTransformersTogglePanel;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.ItemTO;
+import org.apache.syncope.common.lib.to.OIDCProviderTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.MappingPurpose;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+
+public class OIDCProviderMappingPanel extends AbstractMappingPanel {
+
+    private static final long serialVersionUID = -4123879435574382968L;
+
+    public OIDCProviderMappingPanel(
+            final String id,
+            final OIDCProviderTO opTO,
+            final ItemTransformersTogglePanel mapItemTransformers,
+            final JEXLTransformersTogglePanel jexlTransformers) {
+
+        super(id,
+                mapItemTransformers,
+                jexlTransformers,
+                new ListModel<ItemTO>(opTO.getItems()),
+                true,
+                true,
+                MappingPurpose.NONE);
+
+        setOutputMarkupId(true);
+    }
+
+    @Override
+    protected void onBeforeRender() {
+        super.onBeforeRender();
+        purposeLabel.setVisible(false);
+    }
+
+    @Override
+    protected IModel<List<String>> getExtAttrNames() {
+        List<String> extAttrNames = new ArrayList<>();
+        extAttrNames.add("email");
+        extAttrNames.add("family_name");
+        extAttrNames.add("name");
+        extAttrNames.add("middle_name");
+        extAttrNames.add("given_name");
+        extAttrNames.add("preferred_username");
+        extAttrNames.add("nickname");
+        extAttrNames.add("profile");
+        extAttrNames.add("gender");
+        extAttrNames.add("locale");
+        extAttrNames.add("zoneinfo");
+        extAttrNames.add("birthdate");
+        extAttrNames.add("phone_number");
+        extAttrNames.add("address");
+        extAttrNames.add("updated_at");
+
+        return Model.ofList(extAttrNames);
+    }
+
+    @Override
+    protected void setAttrNames(final AjaxTextFieldPanel toBeUpdated) {
+        toBeUpdated.setRequired(true);
+        toBeUpdated.setEnabled(true);
+
+        List<String> choices = new ArrayList<>(USER_FIELD_NAMES);
+
+        for (AnyTypeClassTO anyTypeClassTO : anyTypeClassRestClient.list(
+                anyTypeRestClient.read(AnyTypeKind.USER.name()).getClasses())) {
+
+            choices.addAll(anyTypeClassTO.getPlainSchemas());
+            choices.addAll(anyTypeClassTO.getDerSchemas());
+            choices.addAll(anyTypeClassTO.getVirSchemas());
+        }
+
+        Collections.sort(choices);
+        toBeUpdated.setChoices(choices);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder.java b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder.java
new file mode 100644
index 0000000..2fa465a
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder.java
@@ -0,0 +1,290 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.wizards;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.OIDCProvidersDirectoryPanel;
+import org.apache.syncope.client.console.rest.OIDCProviderRestClient;
+import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wizards.resources.ItemTransformersTogglePanel;
+import org.apache.syncope.client.console.wizards.resources.JEXLTransformersTogglePanel;
+import org.apache.syncope.common.lib.to.OIDCProviderTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.validation.validator.UrlValidator;
+
+public class OIDCProviderWizardBuilder extends AjaxWizardBuilder<OIDCProviderTO> {
+
+    private static final long serialVersionUID = -3310772400714122768L;
+
+    private final OIDCProviderRestClient restClient = new OIDCProviderRestClient();
+
+    private final OIDCProvidersDirectoryPanel directoryPanel;
+
+    private final IModel<List<String>> actionsClasses = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 5275935387613157437L;
+
+        @Override
+        protected List<String> load() {
+            return new ArrayList<>(restClient.getActionsClasses());
+        }
+    };
+
+    public OIDCProviderWizardBuilder(final OIDCProvidersDirectoryPanel directoryPanel, final OIDCProviderTO defaultItem,
+            final PageReference pageRef) {
+        super(defaultItem, pageRef);
+        this.directoryPanel = directoryPanel;
+    }
+
+    @Override
+    protected Serializable onApplyInternal(final OIDCProviderTO modelObject) {
+        if (modelObject.getKey() == null) {
+            if (modelObject.getHasDiscovery()) {
+                restClient.createFromDiscovery(modelObject);
+            } else {
+                restClient.create(modelObject);
+            }
+
+        } else {
+            restClient.update(modelObject);
+        }
+        return modelObject;
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final OIDCProviderTO modelObject, final WizardModel wizardModel) {
+        wizardModel.add(new OP(modelObject));
+        if (modelObject.getKey() == null) {
+            wizardModel.add(new OPContinue(modelObject));
+        } else {
+            wizardModel.add(new OPContinue(modelObject, true));
+        }
+
+        Mapping mapping = new Mapping(modelObject);
+        mapping.setOutputMarkupId(true);
+
+        ItemTransformersTogglePanel mapItemTransformers = new ItemTransformersTogglePanel(mapping, pageRef);
+        addOuterObject(mapItemTransformers);
+        JEXLTransformersTogglePanel jexlTransformers = new JEXLTransformersTogglePanel(mapping, pageRef);
+        addOuterObject(jexlTransformers);
+        mapping.add(new OIDCProviderMappingPanel("mapping", modelObject, mapItemTransformers, jexlTransformers));
+
+        wizardModel.add(mapping);
+
+        return wizardModel;
+    }
+
+    public class OP extends WizardStep {
+
+        private static final long serialVersionUID = 7127421283216134900L;
+
+        public OP(final OIDCProviderTO opTO) {
+            AjaxTextFieldPanel name = new AjaxTextFieldPanel(
+                    "name", "name", new PropertyModel<String>(opTO, "name"), false);
+            name.addRequiredLabel();
+            name.setEnabled(true);
+            add(name);
+
+            AjaxTextFieldPanel clientID = new AjaxTextFieldPanel(
+                    "clientID", "clientID", new PropertyModel<String>(opTO, "clientID"), false);
+            clientID.addRequiredLabel();
+            clientID.setEnabled(true);
+            add(clientID);
+
+            AjaxTextFieldPanel clientSecret = new AjaxTextFieldPanel(
+                    "clientSecret", "clientSecret", new PropertyModel<String>(opTO, "clientSecret"), false);
+            clientSecret.addRequiredLabel();
+            clientSecret.setEnabled(true);
+            add(clientSecret);
+
+            AjaxCheckBoxPanel createUnmatching = new AjaxCheckBoxPanel(
+                    "createUnmatching", "createUnmatching", new PropertyModel<Boolean>(opTO, "createUnmatching"),
+                    false);
+            add(createUnmatching);
+
+            AjaxCheckBoxPanel updateMatching = new AjaxCheckBoxPanel(
+                    "updateMatching", "updateMatching", new PropertyModel<Boolean>(opTO, "updateMatching"), false);
+            add(updateMatching);
+
+            AjaxPalettePanel<String> actionsClassNames = new AjaxPalettePanel.Builder<String>().
+                    setAllowMoveAll(true).setAllowOrder(true).
+                    setName(new StringResourceModel("actionsClassNames", directoryPanel).getString()).
+                    build("actionsClassNames",
+                            new PropertyModel<List<String>>(opTO, "actionsClassNames"),
+                            new ListModel<>(actionsClasses.getObject()));
+            actionsClassNames.setOutputMarkupId(true);
+            add(actionsClassNames);
+        }
+    }
+
+    public class OPContinue extends WizardStep {
+
+        private static final long serialVersionUID = -7087008312629522790L;
+
+        public OPContinue(final OIDCProviderTO opTO) {
+
+            final WebMarkupContainer content = new WebMarkupContainer("content");
+            this.setOutputMarkupId(true);
+            content.setOutputMarkupId(true);
+            add(content);
+
+            UrlValidator urlValidator = new UrlValidator();
+            final AjaxTextFieldPanel issuer = new AjaxTextFieldPanel(
+                    "issuer", "issuer", new PropertyModel<String>(opTO, "issuer"));
+            issuer.addValidator(urlValidator);
+            issuer.addRequiredLabel();
+            content.add(issuer);
+
+            final AjaxCheckBoxPanel hasDiscovery = new AjaxCheckBoxPanel(
+                    "hasDiscovery", "hasDiscovery", new PropertyModel<Boolean>(opTO, "hasDiscovery"));
+            content.add(hasDiscovery);
+
+            final AjaxTextFieldPanel authorizationEndpoint = new AjaxTextFieldPanel("authorizationEndpoint",
+                    "authorizationEndpoint", new PropertyModel<String>(opTO, "authorizationEndpoint"));
+            authorizationEndpoint.addRequiredLabel();
+            authorizationEndpoint.addValidator(urlValidator);
+            content.add(authorizationEndpoint);
+
+            final AjaxTextFieldPanel userinfoEndpoint = new AjaxTextFieldPanel("userinfoEndpoint",
+                    "userinfoEndpoint", new PropertyModel<String>(opTO, "userinfoEndpoint"));
+            userinfoEndpoint.addRequiredLabel();
+            userinfoEndpoint.addValidator(urlValidator);
+            content.add(userinfoEndpoint);
+
+            final AjaxTextFieldPanel tokenEndpoint = new AjaxTextFieldPanel("tokenEndpoint",
+                    "tokenEndpoint", new PropertyModel<String>(opTO, "tokenEndpoint"));
+            tokenEndpoint.addRequiredLabel();
+            tokenEndpoint.addValidator(urlValidator);
+            content.add(tokenEndpoint);
+
+            final AjaxTextFieldPanel jwksUri = new AjaxTextFieldPanel("jwksUri",
+                    "jwksUri", new PropertyModel<String>(opTO, "jwksUri"));
+            jwksUri.addRequiredLabel();
+            jwksUri.addValidator(urlValidator);
+            content.add(jwksUri);
+
+            final WebMarkupContainer visibleParam = new WebMarkupContainer("visibleParams");
+            visibleParam.setOutputMarkupPlaceholderTag(true);
+            visibleParam.add(authorizationEndpoint);
+            visibleParam.add(userinfoEndpoint);
+            visibleParam.add(tokenEndpoint);
+            visibleParam.add(jwksUri);
+            content.add(visibleParam);
+
+            showHide(hasDiscovery, visibleParam);
+
+            hasDiscovery.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = -1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    showHide(hasDiscovery, visibleParam);
+                    target.add(visibleParam);
+                }
+            });
+
+        }
+
+        public OPContinue(final OIDCProviderTO opTO, final boolean readOnly) {
+
+            final WebMarkupContainer content = new WebMarkupContainer("content");
+            this.setOutputMarkupId(true);
+            content.setOutputMarkupId(true);
+            add(content);
+
+            final AjaxTextFieldPanel issuer = new AjaxTextFieldPanel(
+                    "issuer", "issuer", new PropertyModel<String>(opTO, "issuer"));
+            issuer.setReadOnly(readOnly);
+            content.add(issuer);
+
+            final AjaxCheckBoxPanel hasDiscovery = new AjaxCheckBoxPanel(
+                    "hasDiscovery", "hasDiscovery", new PropertyModel<Boolean>(opTO, "hasDiscovery"));
+            hasDiscovery.setReadOnly(readOnly);
+            content.add(hasDiscovery);
+
+            final AjaxTextFieldPanel authorizationEndpoint = new AjaxTextFieldPanel("authorizationEndpoint",
+                    "authorizationEndpoint", new PropertyModel<String>(opTO, "authorizationEndpoint"));
+            authorizationEndpoint.setReadOnly(readOnly);
+            content.add(authorizationEndpoint);
+
+            final AjaxTextFieldPanel userinfoEndpoint = new AjaxTextFieldPanel("userinfoEndpoint",
+                    "userinfoEndpoint", new PropertyModel<String>(opTO, "userinfoEndpoint"));
+            userinfoEndpoint.setReadOnly(readOnly);
+            content.add(userinfoEndpoint);
+
+            final AjaxTextFieldPanel tokenEndpoint = new AjaxTextFieldPanel("tokenEndpoint",
+                    "tokenEndpoint", new PropertyModel<String>(opTO, "tokenEndpoint"));
+            tokenEndpoint.setReadOnly(readOnly);
+            content.add(tokenEndpoint);
+
+            final AjaxTextFieldPanel jwksUri = new AjaxTextFieldPanel("jwksUri",
+                    "jwksUri", new PropertyModel<String>(opTO, "jwksUri"));
+            jwksUri.setReadOnly(readOnly);
+            content.add(jwksUri);
+
+            final WebMarkupContainer visibleParam = new WebMarkupContainer("visibleParams");
+            visibleParam.setOutputMarkupPlaceholderTag(true);
+            visibleParam.add(authorizationEndpoint);
+            visibleParam.add(userinfoEndpoint);
+            visibleParam.add(tokenEndpoint);
+            visibleParam.add(jwksUri);
+            content.add(visibleParam);
+        }
+    }
+
+    private void showHide(final AjaxCheckBoxPanel hasDiscovery, final WebMarkupContainer visibleParams) {
+        if (hasDiscovery.getField().getValue().equals("false")) {
+            visibleParams.setVisible(true);
+        } else {
+            visibleParams.setVisible(false);
+        }
+    }
+
+    /**
+     * Mapping definition step.
+     */
+    private static final class Mapping extends WizardStep {
+
+        private static final long serialVersionUID = 3454904947720856253L;
+
+        Mapping(final OIDCProviderTO item) {
+            setTitleModel(Model.of("Mapping"));
+            setSummaryModel(Model.of(StringUtils.EMPTY));
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.html
new file mode 100644
index 0000000..a1a0aed
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+    <section class="content-header">
+      <h1>&nbsp;</h1>
+      <ol class="breadcrumb">
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
+        <li class="active"><wicket:message key="extensions"/></li>
+        <li class="active">OIDC Client</li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="tabbedPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.properties
new file mode 100644
index 0000000..b34f11c
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.properties
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+op=OIDC Providers

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_it.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_it.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_it.properties
new file mode 100644
index 0000000..b34f11c
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_it.properties
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+op=OIDC Providers

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_pt_BR.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_pt_BR.properties
new file mode 100644
index 0000000..b34f11c
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_pt_BR.properties
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+op=OIDC Providers

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_ru.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_ru.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_ru.properties
new file mode 100644
index 0000000..b34f11c
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient_ru.properties
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+op=OIDC Providers

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.html
new file mode 100644
index 0000000..ce0dbe8
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.html
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.properties
new file mode 100644
index 0000000..569d0dc
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.properties
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+clientID=Client ID
+clientSecret=Client Secret
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+any.new=New Provider
+template.title=user template
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_it.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_it.properties
new file mode 100644
index 0000000..569d0dc
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_it.properties
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+clientID=Client ID
+clientSecret=Client Secret
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+any.new=New Provider
+template.title=user template
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_pt_BR.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_pt_BR.properties
new file mode 100644
index 0000000..569d0dc
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_pt_BR.properties
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+clientID=Client ID
+clientSecret=Client Secret
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+any.new=New Provider
+template.title=user template
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_ru.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_ru.properties
new file mode 100644
index 0000000..569d0dc
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel_ru.properties
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+clientID=Client ID
+clientSecret=Client Secret
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+any.new=New Provider
+template.title=user template
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCSSOLoginFormPanel.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCSSOLoginFormPanel.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCSSOLoginFormPanel.html
new file mode 100644
index 0000000..3b30b4c
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/panels/OIDCSSOLoginFormPanel.html
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="ops"></span>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$Mapping.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$Mapping.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$Mapping.html
new file mode 100644
index 0000000..11b1a52
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$Mapping.html
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="mapping" />
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.html
new file mode 100644
index 0000000..4ad49d8
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.html
@@ -0,0 +1,28 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.  actionsClassNames
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group"><span wicket:id="name">[name]</span></div>
+    <div class="form-group"><span wicket:id="clientID">[clientID]</span></div>
+    <div class="form-group"><span wicket:id="clientSecret">[clientSecret]</span></div>
+    <div class="form-group"><span wicket:id="createUnmatching">[createUnmatching]</span></div>
+    <div class="form-group"><span wicket:id="updateMatching">[updateMatching]</span></div>
+    <div class="form-group"><span wicket:id="actionsClassNames">[actionsClassNames]</span></div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.properties
new file mode 100644
index 0000000..5ed531a
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP.properties
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name=Name
+clientID=Client ID
+clientSecret=Client Secret
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.html
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.html b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.html
new file mode 100644
index 0000000..01da6ec
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.html
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div wicket:id="content">
+      <span wicket:id="issuer">[issuer]</span>
+      <span wicket:id="hasDiscovery">[hasDiscovery]</span>
+
+      <div wicket:id="visibleParams">
+        <span wicket:id="authorizationEndpoint">[authorizationEndpoint]</span>
+        <span wicket:id="tokenEndpoint">[tokenEndpoint]</span>
+        <span wicket:id="jwksUri">[jwksUri]</span>
+        <span wicket:id="userinfoEndpoint">[userinfoEndpoint]</span>
+      </div>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.properties
new file mode 100644
index 0000000..3f1d085
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue.properties
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+tokenEndpoint= Token Endpoint
+jwksUri= JWKS URI
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_it.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_it.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_it.properties
new file mode 100644
index 0000000..3f1d085
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_it.properties
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+tokenEndpoint= Token Endpoint
+jwksUri= JWKS URI
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_pt_BR.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_pt_BR.properties
new file mode 100644
index 0000000..3f1d085
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_pt_BR.properties
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+tokenEndpoint= Token Endpoint
+jwksUri= JWKS URI
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_ru.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_ru.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_ru.properties
new file mode 100644
index 0000000..3f1d085
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OPContinue_ru.properties
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+issuer=Issuer
+hasDiscovery= Has Discovery Document
+authorizationEndpoint= Authorization Endpoint
+userinfoEndpoint= Userinfo Endpoint
+tokenEndpoint= Token Endpoint
+jwksUri= JWKS URI
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_it.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_it.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_it.properties
new file mode 100644
index 0000000..5ed531a
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_it.properties
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name=Name
+clientID=Client ID
+clientSecret=Client Secret
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_pt_BR.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_pt_BR.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_pt_BR.properties
new file mode 100644
index 0000000..5ed531a
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_pt_BR.properties
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name=Name
+clientID=Client ID
+clientSecret=Client Secret
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_ru.properties
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_ru.properties b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_ru.properties
new file mode 100644
index 0000000..5ed531a
--- /dev/null
+++ b/ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/wizards/OIDCProviderWizardBuilder$OP_ru.properties
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name=Name
+clientID=Client ID
+clientSecret=Client Secret
+createUnmatching=Create unmatching users
+updateMatching=Update matching users
+actionsClassNames=Actions
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-enduser/pom.xml
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-enduser/pom.xml b/ext/oidcclient/client-enduser/pom.xml
new file mode 100644
index 0000000..3a86a04
--- /dev/null
+++ b/ext/oidcclient/client-enduser/pom.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.syncope.ext</groupId>
+    <artifactId>syncope-ext-oidcclient</artifactId>
+    <version>2.0.9-SNAPSHOT</version>
+  </parent>
+
+  <name>Apache Syncope Ext: OIDC Client Enduser</name>
+  <description>Apache Syncope Ext: OIDC Client Enduser</description>
+  <groupId>org.apache.syncope.ext.oidcclient</groupId>
+  <artifactId>syncope-ext-oidcclient-client-enduser</artifactId>
+  <packaging>jar</packaging>
+  
+  <properties>
+    <rootpom.basedir>${basedir}/../../..</rootpom.basedir>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.syncope.ext.oidcclient</groupId>
+      <artifactId>syncope-ext-oidcclient-common-lib</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.syncope.ext.oidcclient</groupId>
+      <artifactId>syncope-ext-oidcclient-rest-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.syncope.ext.oidcclient</groupId>
+      <artifactId>syncope-ext-oidcclient-agent</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.syncope.client</groupId>
+      <artifactId>syncope-client-enduser</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+      </plugin>
+    </plugins>
+    
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/OIDCClientLogin.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/OIDCClientLogin.java b/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/OIDCClientLogin.java
new file mode 100644
index 0000000..5aa8578
--- /dev/null
+++ b/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/OIDCClientLogin.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.enduser.pages;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.enduser.SyncopeEnduserSession;
+import org.apache.wicket.authentication.IAuthenticationStrategy;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OIDCClientLogin extends WebPage {
+
+    private static final long serialVersionUID = 8581614051773949262L;
+
+    private static final Logger LOG = LoggerFactory.getLogger(OIDCClientLogin.class);
+
+    private static final String OIDC_ACCESS_ERROR = "OIDC access error";
+
+    public OIDCClientLogin(final PageParameters parameters) {
+        super(parameters);
+
+        String token = (String) ((ServletWebRequest) getRequest()).getContainerRequest().
+                getSession().getAttribute(org.apache.syncope.ext.oidcclient.agent.Constants.OIDCCLIENTJWT);
+        if (StringUtils.isBlank(token)) {
+            LOG.error("No JWT found, redirecting to default greeter");
+
+            PageParameters params = new PageParameters();
+            params.add("errorMessage", OIDC_ACCESS_ERROR);
+            setResponsePage(getApplication().getHomePage(), params);
+        }
+
+        IAuthenticationStrategy strategy = getApplication().getSecuritySettings().getAuthenticationStrategy();
+
+        if (SyncopeEnduserSession.get().authenticate(token)) {
+            setResponsePage(getApplication().getHomePage());
+        } else {
+            PageParameters params = new PageParameters();
+            params.add("errorMessage", OIDC_ACCESS_ERROR);
+            setResponsePage(getApplication().getHomePage(), params);
+        }
+        strategy.remove();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/resources/OIDCProvidersResource.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/resources/OIDCProvidersResource.java b/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/resources/OIDCProvidersResource.java
new file mode 100644
index 0000000..3bb2d63
--- /dev/null
+++ b/ext/oidcclient/client-enduser/src/main/java/org/apache/syncope/client/enduser/resources/OIDCProvidersResource.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.enduser.resources;
+
+import static org.apache.syncope.client.enduser.resources.BaseResource.MAPPER;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.apache.syncope.client.enduser.SyncopeEnduserSession;
+import org.apache.syncope.client.enduser.annotations.Resource;
+import org.apache.syncope.common.lib.to.OIDCProviderTO;
+import org.apache.syncope.common.rest.api.service.OIDCProviderService;
+import org.apache.wicket.request.resource.AbstractResource;
+
+@Resource(key = "oidcProviders", path = "/api/oidcProviders")
+public class OIDCProvidersResource extends BaseResource {
+
+    private static final long serialVersionUID = -6595407257133697170L;
+
+    @Override
+    protected ResourceResponse newResourceResponse(final Attributes attributes) {
+        ResourceResponse response = new ResourceResponse();
+        response.setContentType(MediaType.APPLICATION_JSON);
+        response.setTextEncoding(StandardCharsets.UTF_8.name());
+        try {
+            final ArrayNode result = MAPPER.createArrayNode();
+
+            for (OIDCProviderTO op : SyncopeEnduserSession.get().getService(OIDCProviderService.class).list()) {
+                ObjectNode opNode = MAPPER.createObjectNode();
+                opNode.put("name", op.getName());
+                result.add(opNode);
+            }
+
+            response.setWriteCallback(new AbstractResource.WriteCallback() {
+
+                @Override
+                public void writeData(final Attributes attributes) throws IOException {
+                    attributes.getResponse().write(MAPPER.writeValueAsString(result));
+                }
+            });
+            response.setStatusCode(Response.Status.OK.getStatusCode());
+        } catch (Exception e) {
+            LOG.error("Error retrieving available OIDC Providers", e);
+            response.setError(
+                    Response.Status.BAD_REQUEST.getStatusCode(),
+                    "ErrorMessage{{ " + e.getMessage() + "}}");
+        }
+
+        return response;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/pom.xml
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/pom.xml b/ext/oidcclient/common-lib/pom.xml
new file mode 100644
index 0000000..f60b0f0
--- /dev/null
+++ b/ext/oidcclient/common-lib/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.syncope.ext</groupId>
+    <artifactId>syncope-ext-oidcclient</artifactId>
+    <version>2.0.9-SNAPSHOT</version>
+  </parent>
+
+  <name>Apache Syncope Ext: OIDC Client Common Lib</name>
+  <description>Apache Syncope Ext: OIDC Client Common Lib</description>
+  <groupId>org.apache.syncope.ext.oidcclient</groupId>
+  <artifactId>syncope-ext-oidcclient-common-lib</artifactId>
+  <packaging>jar</packaging>
+  
+  <properties>
+    <rootpom.basedir>${basedir}/../../..</rootpom.basedir>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.syncope.common</groupId>
+      <artifactId>syncope-common-lib</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/OIDCConstants.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/OIDCConstants.java b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/OIDCConstants.java
new file mode 100644
index 0000000..12daa0a
--- /dev/null
+++ b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/OIDCConstants.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib;
+
+public final class OIDCConstants {
+
+    public static final String CLIENT_ID = "client_id";
+
+    public static final String CLIENT_SECRET = "client_secret";
+
+    public static final String SCOPE = "scope";
+
+    public static final String RESPOSNSE_TYPE = "response_type";
+
+    public static final String REDIRECT_URI = "redirect_uri";
+
+    public static final String STATE = "state";
+
+    public static final String CODE = "code";
+
+    public static final String GRANT_TYPE = "grant_type";
+
+    public static final String OP = "op";
+
+    private OIDCConstants() {
+        // private constructor for static utility class
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginRequestTO.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginRequestTO.java b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginRequestTO.java
new file mode 100644
index 0000000..5d4dc31
--- /dev/null
+++ b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginRequestTO.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+@XmlRootElement(name = "oidcLoginRequest")
+@XmlType
+public class OIDCLoginRequestTO extends AbstractBaseBean {
+
+    private static final long serialVersionUID = -3509031322459942441L;
+
+    private String providerAddress;
+
+    private String clientId;
+
+    private String scope;
+
+    private String responseType;
+
+    private String redirectURI;
+
+    private String state;
+
+    public String getProviderAddress() {
+        return providerAddress;
+    }
+
+    public void setProviderAddress(final String providerAddress) {
+        this.providerAddress = providerAddress;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(final String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(final String scope) {
+        this.scope = scope;
+    }
+
+    public String getResponseType() {
+        return responseType;
+    }
+
+    public void setResponseType(final String responseType) {
+        this.responseType = responseType;
+    }
+
+    public String getRedirectURI() {
+        return redirectURI;
+    }
+
+    public void setRedirectURI(final String redirectURI) {
+        this.redirectURI = redirectURI;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(final String state) {
+        this.state = state;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginResponseTO.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginResponseTO.java b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginResponseTO.java
new file mode 100644
index 0000000..fd356a9
--- /dev/null
+++ b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCLoginResponseTO.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+@XmlRootElement(name = "oidcLoginResponse")
+@XmlType
+public class OIDCLoginResponseTO extends AbstractBaseBean {
+
+    private static final long serialVersionUID = -5971442076182154492L;
+
+    private String username;
+
+    private String email;
+
+    private String name;
+
+    private String subject;
+
+    private String givenName;
+
+    private String familyName;
+
+    private String accessToken;
+
+    private Date accessTokenExpiryTime;
+
+    private final Set<AttrTO> attrs = new HashSet<>();
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(final String username) {
+        this.username = username;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(final String email) {
+        this.email = email;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(final String subject) {
+        this.subject = subject;
+    }
+
+    public String getGivenName() {
+        return givenName;
+    }
+
+    public void setGivenName(final String givenName) {
+        this.givenName = givenName;
+    }
+
+    public String getFamilyName() {
+        return familyName;
+    }
+
+    public void setFamilyName(final String familyName) {
+        this.familyName = familyName;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(final String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public Date getAccessTokenExpiryTime() {
+        return accessTokenExpiryTime;
+    }
+
+    public void setAccessTokenExpiryTime(final Date accessTokenExpiryTime) {
+        this.accessTokenExpiryTime = accessTokenExpiryTime;
+    }
+
+    @JsonIgnore
+    public AttrTO getAttr(final String schema) {
+        return IterableUtils.find(attrs, new Predicate<AttrTO>() {
+
+            @Override
+            public boolean evaluate(final AttrTO object) {
+                return object.getSchema().equals(schema);
+            }
+        });
+    }
+
+    @XmlElementWrapper(name = "attrs")
+    @XmlElement(name = "attr")
+    @JsonProperty("attrs")
+    public Set<AttrTO> getAttrs() {
+        return attrs;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCProviderTO.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCProviderTO.java b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCProviderTO.java
new file mode 100644
index 0000000..2bb88aa
--- /dev/null
+++ b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/to/OIDCProviderTO.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.ws.rs.PathParam;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+@XmlRootElement(name = "oidcprovider")
+@XmlType
+public class OIDCProviderTO extends AbstractBaseBean implements EntityTO, ItemContainerTO {
+
+    private static final long serialVersionUID = -1229802774546135794L;
+
+    private String key;
+
+    private String name;
+
+    private String clientID;
+
+    private String clientSecret;
+
+    private String authorizationEndpoint;
+
+    private String tokenEndpoint;
+
+    private String jwksUri;
+
+    private String issuer;
+
+    private String userinfoEndpoint;
+
+    private boolean hasDiscovery;
+
+    private UserTO userTemplate;
+
+    private boolean createUnmatching;
+
+    private boolean updateMatching;
+
+    private final List<ItemTO> items = new ArrayList<>();
+
+    private final Set<String> actionsClassNames = new HashSet<>();
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @PathParam("key")
+    @Override
+    public void setKey(final String key) {
+        this.key = key;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    public String getClientID() {
+        return clientID;
+    }
+
+    public void setClientID(final String clientID) {
+        this.clientID = clientID;
+    }
+
+    public String getClientSecret() {
+        return clientSecret;
+    }
+
+    public void setClientSecret(final String clientSecret) {
+        this.clientSecret = clientSecret;
+    }
+
+    public String getAuthorizationEndpoint() {
+        return authorizationEndpoint;
+    }
+
+    public void setAuthorizationEndpoint(final String authorizationEndpoint) {
+        this.authorizationEndpoint = authorizationEndpoint;
+    }
+
+    public String getTokenEndpoint() {
+        return tokenEndpoint;
+    }
+
+    public void setTokenEndpoint(final String tokenEndpoint) {
+        this.tokenEndpoint = tokenEndpoint;
+    }
+
+    public String getJwksUri() {
+        return jwksUri;
+    }
+
+    public void setJwksUri(final String jwksUri) {
+        this.jwksUri = jwksUri;
+    }
+
+    public String getIssuer() {
+        return issuer;
+    }
+
+    public void setIssuer(final String issuer) {
+        this.issuer = issuer;
+    }
+
+    public String getUserinfoEndpoint() {
+        return userinfoEndpoint;
+    }
+
+    public void setUserinfoEndpoint(final String userinfoEndpoint) {
+        this.userinfoEndpoint = userinfoEndpoint;
+    }
+
+    public UserTO getUserTemplate() {
+        return userTemplate;
+    }
+
+    public boolean getHasDiscovery() {
+        return hasDiscovery;
+    }
+
+    public void setHasDiscovery(final boolean hasDiscovery) {
+        this.hasDiscovery = hasDiscovery;
+    }
+
+    public void setUserTemplate(final UserTO userTemplate) {
+        this.userTemplate = userTemplate;
+    }
+
+    public boolean isCreateUnmatching() {
+        return createUnmatching;
+    }
+
+    public void setCreateUnmatching(final boolean createUnmatching) {
+        this.createUnmatching = createUnmatching;
+    }
+
+    public boolean isUpdateMatching() {
+        return updateMatching;
+    }
+
+    public void setUpdateMatching(final boolean updateMatching) {
+        this.updateMatching = updateMatching;
+    }
+    
+    
+
+    @Override
+    public ItemTO getConnObjectKeyItem() {
+        return IterableUtils.find(getItems(), new Predicate<ItemTO>() {
+
+            @Override
+            public boolean evaluate(final ItemTO item) {
+                return item.isConnObjectKey();
+            }
+        });
+    }
+
+    protected boolean addConnObjectKeyItem(final ItemTO connObjectItem) {
+        connObjectItem.setMandatoryCondition("true");
+        connObjectItem.setConnObjectKey(true);
+
+        return this.add(connObjectItem);
+    }
+
+    @Override
+    public boolean setConnObjectKeyItem(final ItemTO connObjectKeyItem) {
+        return connObjectKeyItem == null
+                ? remove(getConnObjectKeyItem())
+                : addConnObjectKeyItem(connObjectKeyItem);
+    }
+
+    @XmlElementWrapper(name = "items")
+    @XmlElement(name = "item")
+    @JsonProperty("items")
+    @Override
+    public List<ItemTO> getItems() {
+        return items;
+    }
+
+    @Override
+    public boolean add(final ItemTO item) {
+        return item == null ? false : this.items.contains(item) || this.items.add(item);
+    }
+
+    public boolean remove(final ItemTO item) {
+        return this.items.remove(item);
+    }
+
+    @XmlElementWrapper(name = "actionsClassNames")
+    @XmlElement(name = "actionsClassName")
+    @JsonProperty("actionsClassNames")
+    public Set<String> getActionsClassNames() {
+        return actionsClassNames;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f29e60f6/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/types/OIDCClientEntitlement.java
----------------------------------------------------------------------
diff --git a/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/types/OIDCClientEntitlement.java b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/types/OIDCClientEntitlement.java
new file mode 100644
index 0000000..98cf4d6
--- /dev/null
+++ b/ext/oidcclient/common-lib/src/main/java/org/apache/syncope/common/lib/types/OIDCClientEntitlement.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.types;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.Set;
+import java.util.TreeSet;
+
+public final class OIDCClientEntitlement {
+
+    public static final String OP_READ = "OP_READ";
+
+    public static final String OP_CREATE = "OP_CREATE";
+
+    public static final String OP_UPDATE = "OP_UPDATE";
+
+    public static final String OP_DELETE = "OP_DELETE";
+
+    private static final Set<String> VALUES;
+
+    static {
+        Set<String> values = new TreeSet<>();
+        for (Field field : OIDCClientEntitlement.class.getDeclaredFields()) {
+            if (Modifier.isStatic(field.getModifiers()) && String.class.equals(field.getType())) {
+                values.add(field.getName());
+            }
+        }
+        VALUES = Collections.unmodifiableSet(values);
+    }
+
+    public static Set<String> values() {
+        return VALUES;
+    }
+
+    private OIDCClientEntitlement() {
+        // private constructor for static utility class
+    }
+
+}