git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/branches/portal/google-hook-login/1.2/Google@149300 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
61598eb0fe
commit
ca5e8bea23
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Google</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/main/webapp"/>
|
||||
<classpathentry kind="src" path="target/m2e-wtp/web-resources"/>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
|
||||
<attributes>
|
||||
<attribute name="hide" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
|
||||
<classpathentry kind="output" path=""/>
|
||||
</classpath>
|
|
@ -0,0 +1,4 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
|
@ -0,0 +1,8 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
|
@ -0,0 +1,4 @@
|
|||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
<wb-module deploy-name="google-hook-login-portlet">
|
||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||
<dependent-module archiveName="checkAdditionalEmails-1.0.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/checkAdditionalEmails/checkAdditionalEmails">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<property name="java-output-path" value="/Google/target/classes"/>
|
||||
<property name="context-root" value="Google-login-hook"/>
|
||||
</wb-module>
|
||||
</project-modules>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<faceted-project>
|
||||
<fixed facet="wst.jsdt.web"/>
|
||||
<installed facet="jst.web" version="2.4"/>
|
||||
<installed facet="wst.jsdt.web" version="1.0"/>
|
||||
<installed facet="liferay.hook" version="6.0"/>
|
||||
<installed facet="java" version="1.7"/>
|
||||
</faceted-project>
|
|
@ -0,0 +1 @@
|
|||
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
|
|
@ -0,0 +1 @@
|
|||
Window
|
|
@ -0,0 +1,11 @@
|
|||
DELEGATES_PREFERENCE=delegateValidatorList
|
||||
USER_BUILD_PREFERENCE=enabledBuildValidatorList
|
||||
USER_MANUAL_PREFERENCE=enabledManualValidatorList
|
||||
USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.700.v201508251749
|
||||
disabled=06target
|
||||
eclipse.preferences.version=1
|
||||
override=true
|
||||
suspend=false
|
||||
vals/org.eclipse.jst.jsp.core.JSPBatchValidator/groups=0107include01113projectNature131org.eclipse.jdt.core.javanature0107include110111contentType134org.eclipse.jst.jsp.core.jspsourceT111contentType142org.eclipse.jst.jsp.core.jspfragmentsourceT111contentType134org.eclipse.jst.jsp.core.tagsourceT07fileext03jspF07fileext04jspfF07fileext03jsfF07fileext03tagF07fileext04tagfF07fileext03jsvF07fileext04jtplF0107exclude0104file127src/main/webapp/custom_jspsT02
|
||||
vals/org.eclipse.jst.jsp.core.JSPContentValidator/groups=0107include09111contentType134org.eclipse.jst.jsp.core.jspsourceT111contentType142org.eclipse.jst.jsp.core.jspfragmentsourceT07fileext03jspF07fileext04jspfF07fileext03jsfF07fileext03tagF07fileext04tagfF07fileext03jsvF07fileext04jtplF0107exclude0104file127src/main/webapp/custom_jspsF02
|
||||
vf.version=3
|
|
@ -0,0 +1 @@
|
|||
${gcube.license}
|
|
@ -0,0 +1,66 @@
|
|||
The gCube System - ${name}
|
||||
--------------------------------------------------
|
||||
|
||||
${description}
|
||||
|
||||
|
||||
${gcube.description}
|
||||
|
||||
${gcube.funding}
|
||||
|
||||
|
||||
Version
|
||||
--------------------------------------------------
|
||||
|
||||
${version} (${buildDate})
|
||||
|
||||
Please see the file named "changelog.xml" in this directory for the release notes.
|
||||
|
||||
|
||||
Authors
|
||||
--------------------------------------------------
|
||||
|
||||
|
||||
* Michalis Nikolopoulos (mnikolopoulos@cite.gr), CITE S.A.
|
||||
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
* Michalis Nikolopoulos (mnikolopoulos@cite.gr), CITE S.A.
|
||||
|
||||
|
||||
Download information
|
||||
--------------------------------------------------
|
||||
|
||||
Source code is available from SVN:
|
||||
${scm.url}
|
||||
|
||||
Binaries can be downloaded from the gCube website:
|
||||
${gcube.website}
|
||||
|
||||
|
||||
Installation
|
||||
--------------------------------------------------
|
||||
|
||||
Use the respective war
|
||||
|
||||
|
||||
Documentation
|
||||
--------------------------------------------------
|
||||
|
||||
Documentation is available on-line in the gCube Wiki:
|
||||
${gcube.wikiRoot}
|
||||
|
||||
|
||||
Support
|
||||
--------------------------------------------------
|
||||
|
||||
Bugs and support requests can be reported in the gCube issue tracking tool:
|
||||
${gcube.issueTracking}
|
||||
|
||||
|
||||
Licensing
|
||||
--------------------------------------------------
|
||||
|
||||
This software is licensed under the terms you may find in the file named "LICENSE" in this directory.
|
|
@ -0,0 +1,11 @@
|
|||
<ReleaseNotes>
|
||||
<Changeset component="gr.cite.google.1-0-0" date="2016-03-15">
|
||||
<Change>First release of the google authentication hook</Change>
|
||||
</Changeset>
|
||||
<Changeset component="gr.cite.google.1-1-0" date="2016-09-25">
|
||||
<Change>Updated to work with the multiple email addresses authentication mechanism</Change>
|
||||
</Changeset>
|
||||
<Changeset component="gr.cite.google.1-1-1" date="2016-12-13">
|
||||
<Change>Fixed a bug concerning users with no google+ available where the authenticated response did not include given and family names</Change>
|
||||
</Changeset>
|
||||
</ReleaseNotes>
|
|
@ -0,0 +1,31 @@
|
|||
<assembly
|
||||
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||
<id>servicearchive</id>
|
||||
<formats>
|
||||
<format>tar.gz</format>
|
||||
</formats>
|
||||
<baseDirectory>/</baseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>${distroDirectory}</directory>
|
||||
<outputDirectory>/</outputDirectory>
|
||||
<useDefaultExcludes>true</useDefaultExcludes>
|
||||
<includes>
|
||||
<include>README</include>
|
||||
<include>LICENSE</include>
|
||||
<include>changelog.xml</include>
|
||||
<include>profile.xml</include>
|
||||
</includes>
|
||||
<fileMode>755</fileMode>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
<files>
|
||||
<file>
|
||||
<source>target/${build.finalName}.war</source>
|
||||
<outputDirectory>/${artifactId}</outputDirectory>
|
||||
</file>
|
||||
</files>
|
||||
</assembly>
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<ID />
|
||||
<Type>Service</Type>
|
||||
<Profile>
|
||||
<Description>${description}</Description>
|
||||
<Class>Portal</Class>
|
||||
<Name>${artifactId}</Name>
|
||||
<Version>1.0.0</Version>
|
||||
<Packages>
|
||||
<Software>
|
||||
<Name>${artifactId}</Name>
|
||||
<Version>${version}</Version>
|
||||
<MavenCoordinates>
|
||||
<groupId>${groupId}</groupId>
|
||||
<artifactId>${artifactId}</artifactId>
|
||||
<version>${version}</version>
|
||||
</MavenCoordinates>
|
||||
<Files>
|
||||
<File>${build.finalName}.war</File>
|
||||
</Files>
|
||||
</Software>
|
||||
</Packages>
|
||||
</Profile>
|
||||
</Resource>
|
|
@ -0,0 +1,149 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<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/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<artifactId>maven-parent</artifactId>
|
||||
<groupId>org.gcube.tools</groupId>
|
||||
<version>1.0.0</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
|
||||
<groupId>gr.cite.google</groupId>
|
||||
<artifactId>Google-login-hook</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>Google Login Hook</name>
|
||||
<description>
|
||||
The Google hook allows users to login with their Google credentials to a liferay portal
|
||||
</description>
|
||||
<version>1.2.0-SNAPSHOT</version>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://svn.cite.gr/code-bluebridge/google-hook</connection>
|
||||
<developerConnection>scm:http://svn.cite.gr/code-bluebridge/google-hook</developerConnection>
|
||||
<url>http://svn.cite.gr/code-bluebridge/google-hook</url>
|
||||
</scm>
|
||||
|
||||
<properties>
|
||||
<liferay.version>6.2.2</liferay.version>
|
||||
<liferay.auto.deploy.dir>${system.CATALINA_HOME}/../deploy</liferay.auto.deploy.dir>
|
||||
<distroDirectory>${project.basedir}/distro</distroDirectory>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- <plugin> <groupId>com.liferay.maven.plugins</groupId> <artifactId>liferay-maven-plugin</artifactId>
|
||||
<version>${liferay.maven.plugin.version}</version> <configuration> <autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
|
||||
<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
|
||||
<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
|
||||
<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
|
||||
<liferayVersion>${liferay.version}</liferayVersion> <pluginType>hook</pluginType>
|
||||
</configuration> </plugin> -->
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>${distroDirectory}/descriptor.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>servicearchive</id>
|
||||
<phase>install</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.gcube.distribution</groupId>
|
||||
<artifactId>maven-portal-bom</artifactId>
|
||||
<version>LATEST</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.liferay.portal</groupId>
|
||||
<artifactId>portal-service</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.liferay.portal</groupId>
|
||||
<artifactId>util-java</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.portlet</groupId>
|
||||
<artifactId>portlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet.jsp</groupId>
|
||||
<artifactId>jsp-api</artifactId>
|
||||
<version>2.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- scribe -->
|
||||
<dependency>
|
||||
<groupId>com.github.scribejava</groupId>
|
||||
<artifactId>scribejava-apis</artifactId>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Gson -->
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.gcube.portal</groupId>
|
||||
<artifactId>landing-page-library</artifactId>
|
||||
<version>[1.0.0-SNAPSHOT,)</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>gr.cite.additionalemailaddresses</groupId>
|
||||
<artifactId>checkAdditionalEmails</artifactId>
|
||||
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,73 @@
|
|||
package gr.cite.google;
|
||||
|
||||
import gr.cite.google.util.GoogleConstantVariables;
|
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException;
|
||||
import com.liferay.portal.kernel.exception.SystemException;
|
||||
import com.liferay.portal.kernel.log.Log;
|
||||
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
||||
import com.liferay.portal.kernel.util.GetterUtil;
|
||||
import com.liferay.portal.kernel.util.PrefsPropsUtil;
|
||||
import com.liferay.portal.kernel.util.Validator;
|
||||
import com.liferay.portal.model.User;
|
||||
import com.liferay.portal.security.auth.BaseAutoLogin;
|
||||
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||
import com.liferay.portal.util.PortalUtil;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
public class GoogleAutoLogin extends BaseAutoLogin {
|
||||
|
||||
private static final Log log = LogFactoryUtil.getLog(GoogleOAuth.class);
|
||||
|
||||
@Override
|
||||
protected String[] doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
|
||||
long companyId = PortalUtil.getCompanyId(request);
|
||||
|
||||
boolean googleAuthEnabled = PrefsPropsUtil.getBoolean(companyId, GoogleConstantVariables.GOOGLE_LOGIN_ENABLED, true);
|
||||
|
||||
log.debug("Is google enabled: " + googleAuthEnabled);
|
||||
if (!googleAuthEnabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
User user = getUser(request, companyId);
|
||||
|
||||
if (user == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String[] credentials = new String[3];
|
||||
|
||||
credentials[0] = String.valueOf(user.getUserId());
|
||||
credentials[1] = user.getPassword();
|
||||
credentials[2] = Boolean.TRUE.toString();
|
||||
|
||||
return credentials;
|
||||
}
|
||||
|
||||
protected User getUser(HttpServletRequest request, long companyId) throws PortalException, SystemException {
|
||||
|
||||
HttpSession session = request.getSession();
|
||||
String emailAddress = GetterUtil.getString(session.getAttribute(GoogleConstantVariables.USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE));
|
||||
session.removeAttribute(GoogleConstantVariables.USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE);
|
||||
|
||||
log.debug("User's mail form session: " + emailAddress);
|
||||
|
||||
if (Validator.isNull(emailAddress)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, emailAddress);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
public static Log getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
package gr.cite.google;
|
||||
|
||||
|
||||
import gr.cite.additionalemailaddresses.CheckAdditionalEmailAddresses;
|
||||
import gr.cite.google.model.GoogleJson;
|
||||
import gr.cite.google.util.GoogleConstantVariables;
|
||||
import gr.cite.google.util.LoginHookEssentialMethods;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.gcube.portal.landingpage.LandingPageManager;
|
||||
|
||||
import com.github.scribejava.apis.GoogleApi20;
|
||||
import com.github.scribejava.core.builder.ServiceBuilder;
|
||||
import com.github.scribejava.core.model.OAuth2AccessToken;
|
||||
import com.github.scribejava.core.model.OAuthRequest;
|
||||
import com.github.scribejava.core.model.Verb;
|
||||
import com.github.scribejava.core.oauth.OAuth20Service;
|
||||
import com.google.gson.Gson;
|
||||
import com.liferay.portal.NoSuchUserException;
|
||||
import com.liferay.portal.kernel.exception.PortalException;
|
||||
import com.liferay.portal.kernel.log.Log;
|
||||
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
||||
import com.liferay.portal.kernel.servlet.SessionErrors;
|
||||
import com.liferay.portal.kernel.struts.BaseStrutsAction;
|
||||
import com.liferay.portal.kernel.util.Constants;
|
||||
import com.liferay.portal.kernel.util.ParamUtil;
|
||||
import com.liferay.portal.kernel.util.PrefsPropsUtil;
|
||||
import com.liferay.portal.kernel.util.PropsKeys;
|
||||
import com.liferay.portal.kernel.util.PropsUtil;
|
||||
import com.liferay.portal.kernel.util.Validator;
|
||||
import com.liferay.portal.kernel.util.WebKeys;
|
||||
import com.liferay.portal.model.User;
|
||||
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||
import com.liferay.portal.theme.ThemeDisplay;
|
||||
import com.liferay.portal.util.PortalUtil;
|
||||
|
||||
|
||||
public class GoogleOAuth extends BaseStrutsAction {
|
||||
|
||||
private static final Log log = LogFactoryUtil.getLog(GoogleOAuth.class);
|
||||
|
||||
@Override
|
||||
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
|
||||
HttpSession session = request.getSession();
|
||||
ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
|
||||
|
||||
String returnFromGoogleUrl = PortalUtil.getPortalURL(request) + PropsUtil.get(GoogleConstantVariables.RETURN_FROM_GOOGLE_URL);
|
||||
String googleClientId = PrefsPropsUtil.getString(themeDisplay.getCompanyId(), GoogleConstantVariables.GOOGLE_CLIENT_ID, PropsUtil.get(GoogleConstantVariables.GOOGLE_CLIENT_ID));
|
||||
String googleClientSecret = PrefsPropsUtil.getString(themeDisplay.getCompanyId(), GoogleConstantVariables.GOOGLE_CLIENT_SECRET, PropsUtil.get(GoogleConstantVariables.GOOGLE_CLIENT_SECRET));
|
||||
Boolean canCreateAccount = PrefsPropsUtil.getBoolean(themeDisplay.getCompanyId(), PropsKeys.COMPANY_SECURITY_STRANGERS);
|
||||
|
||||
User user = null;
|
||||
String landingPage = "";
|
||||
|
||||
//Initial call to the hook and redirection to google
|
||||
if (ParamUtil.getString(request, Constants.CMD).equals("login")){
|
||||
|
||||
log.debug("Initial call for login...");
|
||||
|
||||
establishConnectionWithGoogle(session, response, returnFromGoogleUrl, googleClientId, googleClientSecret);
|
||||
|
||||
//Answer from google with the data we need
|
||||
} else if (ParamUtil.getString(request, Constants.CMD).equals("token")){
|
||||
|
||||
String oauthCode = ParamUtil.getString(request, GoogleConstantVariables.OAUTH_CODE);
|
||||
|
||||
log.debug("User gave permision to read data...");
|
||||
log.debug("google oauthCode -> " + oauthCode);
|
||||
|
||||
if (Validator.isNull(oauthCode)) {
|
||||
//System.out.println("validator is null for oauthCode");
|
||||
return null;
|
||||
}
|
||||
|
||||
GoogleJson googleUserInfo = retrieveUsersGoogleInfo(oauthCode, returnFromGoogleUrl, googleClientId, googleClientSecret);
|
||||
|
||||
|
||||
|
||||
if (googleUserInfo == null){
|
||||
throw new LoginException();
|
||||
}
|
||||
log.debug("Google's object: " + googleUserInfo.toString());
|
||||
|
||||
try {
|
||||
user = CheckAdditionalEmailAddresses.checkInIfAdditionalEmailAndIfVerified(googleUserInfo.getEmail());
|
||||
} catch (Exception e) {
|
||||
log.error("Error occured while searching in additional emails", e);
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
|
||||
if(user != null){
|
||||
|
||||
log.info("Email " + googleUserInfo.getEmail() + " has been found in additional Email Addresses");
|
||||
session.setAttribute(GoogleConstantVariables.USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE, user.getEmailAddress());
|
||||
|
||||
}else if (canCreateAccount){
|
||||
LoginHookEssentialMethods.addUser(session, themeDisplay.getCompanyId(), googleUserInfo);
|
||||
user = UserLocalServiceUtil.getUserById(UserLocalServiceUtil.getUserByEmailAddress(themeDisplay.getCompanyId(), googleUserInfo.getEmail()).getUserId());
|
||||
}else{
|
||||
try{
|
||||
user = UserLocalServiceUtil.getUserByEmailAddress(themeDisplay.getCompanyId(), googleUserInfo.getEmail());
|
||||
log.debug("Login user " + user.getFullName() + " email address " + user.getEmailAddress());
|
||||
session.setAttribute(GoogleConstantVariables.USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE, user.getEmailAddress());
|
||||
}catch (PortalException e){
|
||||
SessionErrors.add(session, NoSuchUserException.class);
|
||||
}
|
||||
}
|
||||
//ensure the user is redirected to the requested page before logging in
|
||||
if (session.getAttribute("redirectUrlAfterLogin") != null && session.getAttribute("redirectUrlAfterLogin").toString().compareTo("") != 0) {
|
||||
landingPage = session.getAttribute("redirectUrlAfterLogin").toString();
|
||||
session.setAttribute("redirectUrlAfterLogin", null);
|
||||
}
|
||||
else {
|
||||
landingPage = LandingPageManager.getLandingPagePath(request, user);
|
||||
}
|
||||
|
||||
//landingPage = LandingPageManager.getLandingPagePath(request, user);
|
||||
response.sendRedirect(landingPage);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Initial call to google, in order to retrieve authorization code.
|
||||
*
|
||||
* @param response
|
||||
* @param returnFromLinkedInUrl
|
||||
* @throws IOException
|
||||
*/
|
||||
private void establishConnectionWithGoogle(HttpSession session, HttpServletResponse response, String returnFromGoogleUrl, String googleClientId, String googleClientSecret) throws IOException {
|
||||
|
||||
OAuth20Service service = new ServiceBuilder().apiKey(googleClientId).apiSecret(googleClientSecret).callback(returnFromGoogleUrl).scope(GoogleConstantVariables.API_CALL_SCOPE).build(GoogleApi20.instance());
|
||||
String googleAuthUrl = service.getAuthorizationUrl();
|
||||
log.debug("Google Auth URL -> " + googleAuthUrl);
|
||||
response.sendRedirect(googleAuthUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Using authorization code, we get access token and make the API call we need to retrieve data
|
||||
* from google.
|
||||
*
|
||||
* @param oauthCode
|
||||
* @param returnFromGoogleUrl
|
||||
* @return GoogleJson
|
||||
* @throws IOException
|
||||
*/
|
||||
private GoogleJson retrieveUsersGoogleInfo(String oauthCode, String returnFromGoogleUrl, String googleClientId, String googleClientSecret) throws IOException {
|
||||
|
||||
OAuth20Service service = new ServiceBuilder().apiKey(googleClientId).apiSecret(googleClientSecret).callback(returnFromGoogleUrl).scope(GoogleConstantVariables.API_CALL_SCOPE).build(GoogleApi20.instance());
|
||||
|
||||
//Verifier verifier = new Verifier(oauthCode);
|
||||
OAuth2AccessToken accessToken = service.getAccessToken(oauthCode);
|
||||
|
||||
//OAuth2AccessToken accessToken, AbstractRequest request
|
||||
OAuthRequest authRequest = new OAuthRequest(Verb.GET, GoogleConstantVariables.API_CALL, service);
|
||||
service.signRequest(accessToken, authRequest);
|
||||
|
||||
String bodyResponse = authRequest.send().getBody();
|
||||
log.trace("Google oauth body response -> " + bodyResponse);
|
||||
GoogleJson googleJson = new Gson().fromJson(bodyResponse, GoogleJson.class);
|
||||
|
||||
return googleJson;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package gr.cite.google.model;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
/**
|
||||
* @author mnikolopoulos
|
||||
*
|
||||
* This is the data we deserialize, in case we need more/different data from the google,
|
||||
* we can check their API and make the appropriate changes here and maybe to the the actual call
|
||||
* and to the scope as well if needed.
|
||||
*
|
||||
*/
|
||||
public class GoogleJson {
|
||||
|
||||
private String email;
|
||||
@SerializedName("given_name")
|
||||
private String givenName;
|
||||
@SerializedName("family_name")
|
||||
private String familyName;
|
||||
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
public String getGivenName() {
|
||||
return givenName;
|
||||
}
|
||||
public void setGivenName(String givenName) {
|
||||
this.givenName = givenName;
|
||||
}
|
||||
public String getFamilyName() {
|
||||
return familyName;
|
||||
}
|
||||
public void setFamilyName(String familyName) {
|
||||
this.familyName = familyName;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package gr.cite.google.util;
|
||||
|
||||
|
||||
public class GoogleConstantVariables {
|
||||
|
||||
public final static String REDIRECT_URL_AFTER_LOGIN = "redirectUrlAfterLogin";
|
||||
|
||||
public final static String USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE = "userEmailAdressGoogle";
|
||||
|
||||
public final static String GOOGLE_CLIENT_ID = "google.client.id";
|
||||
|
||||
public final static String GOOGLE_CLIENT_SECRET = "google.client.secret";
|
||||
|
||||
public final static String OAUTH_CODE = "code";
|
||||
|
||||
public final static String OAUTH_TOKEN = "oauth_token";
|
||||
|
||||
public final static String REQUEST_TOKEN_SECRET_GOOGLE = "requestTokenSecretGoogle";
|
||||
|
||||
public final static String API_CALL = "https://www.googleapis.com/oauth2/v2/userinfo";
|
||||
|
||||
public final static String RETURN_FROM_GOOGLE_URL = "google.hook.callback.url";
|
||||
|
||||
public final static String GOOGLE_LOGIN_ENABLED = "google.auth.enabled";
|
||||
|
||||
//public final static String API_CALL_SCOPE = "https://www.googleapis.com/auth/userinfo.email";
|
||||
public final static String API_CALL_SCOPE = "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email";
|
||||
|
||||
public final static String OAUTH_SERVICE_OBJECT = "oAuthService";
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
package gr.cite.google.util;
|
||||
|
||||
import gr.cite.google.model.GoogleJson;
|
||||
import gr.cite.google.util.GoogleConstantVariables;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.portlet.PortletMode;
|
||||
import javax.portlet.PortletModeException;
|
||||
import javax.portlet.PortletRequest;
|
||||
import javax.portlet.PortletURL;
|
||||
import javax.portlet.WindowStateException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import com.liferay.portal.DuplicateUserEmailAddressException;
|
||||
import com.liferay.portal.kernel.exception.PortalException;
|
||||
import com.liferay.portal.kernel.exception.SystemException;
|
||||
import com.liferay.portal.kernel.log.Log;
|
||||
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
||||
import com.liferay.portal.kernel.portlet.LiferayWindowState;
|
||||
import com.liferay.portal.kernel.util.LocaleUtil;
|
||||
import com.liferay.portal.kernel.util.StringPool;
|
||||
import com.liferay.portal.kernel.util.WebKeys;
|
||||
import com.liferay.portal.model.User;
|
||||
import com.liferay.portal.service.ServiceContext;
|
||||
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||
import com.liferay.portal.theme.ThemeDisplay;
|
||||
import com.liferay.portal.util.PortletKeys;
|
||||
import com.liferay.portlet.PortletURLFactoryUtil;
|
||||
|
||||
public class LoginHookEssentialMethods {
|
||||
|
||||
private static final Log log = LogFactoryUtil.getLog(LoginHookEssentialMethods.class);
|
||||
|
||||
/**
|
||||
*
|
||||
* Try to add new user to portal, then set user's email address in session.
|
||||
*
|
||||
*
|
||||
* @param session
|
||||
* @param companyId
|
||||
* @param googleJson
|
||||
* @return User
|
||||
* @throws SystemException, PortalException, EmailAddressException
|
||||
*/
|
||||
public static User addUser(HttpSession session, long companyId, GoogleJson googleJson) throws PortalException, SystemException {
|
||||
|
||||
User user = null;
|
||||
|
||||
long creatorUserId = 0;
|
||||
boolean autoPassword = true;
|
||||
String password1 = StringPool.BLANK;
|
||||
String password2 = StringPool.BLANK;
|
||||
boolean autoScreenName = true;
|
||||
String screenName = StringPool.BLANK;
|
||||
String emailAddress = googleJson.getEmail();
|
||||
String openId = StringPool.BLANK;
|
||||
Locale locale = LocaleUtil.getDefault();
|
||||
|
||||
String givenName = googleJson.getGivenName();
|
||||
String firstName = " ";
|
||||
if (givenName != null)
|
||||
firstName = givenName;
|
||||
|
||||
String middleName = StringPool.BLANK;
|
||||
|
||||
String familyName = googleJson.getFamilyName();
|
||||
String lastName = " ";
|
||||
if (familyName != null)
|
||||
lastName = familyName;
|
||||
|
||||
int prefixId = 0;
|
||||
int suffixId = 0;
|
||||
boolean male = false;
|
||||
int birthdayMonth = Calendar.JANUARY;
|
||||
int birthdayDay = 1;
|
||||
int birthdayYear = 1970;
|
||||
String jobTitle = StringPool.BLANK;
|
||||
long[] groupIds = null;
|
||||
long[] organizationIds = null;
|
||||
long[] roleIds = null;
|
||||
long[] userGroupIds = null;
|
||||
boolean sendEmail = true;
|
||||
|
||||
ServiceContext serviceContext = new ServiceContext();
|
||||
|
||||
try{
|
||||
user = UserLocalServiceUtil.addUser(creatorUserId, companyId,
|
||||
autoPassword, password1, password2, autoScreenName, screenName,
|
||||
emailAddress, 0, openId, locale, firstName, middleName,
|
||||
lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay,
|
||||
birthdayYear, jobTitle, groupIds, organizationIds, roleIds,
|
||||
userGroupIds, sendEmail, serviceContext);
|
||||
|
||||
user = UserLocalServiceUtil.updateLastLogin(user.getUserId(),user.getLoginIP());
|
||||
user = UserLocalServiceUtil.updatePasswordReset(user.getUserId(), false);
|
||||
user = UserLocalServiceUtil.updateEmailAddressVerified(user.getUserId(), true);
|
||||
log.info("New user was created. Login new user with current credentials");
|
||||
|
||||
}catch (DuplicateUserEmailAddressException e){
|
||||
log.info("User with the same email address already exists. Login user with said mail.");
|
||||
}
|
||||
|
||||
session.setAttribute(GoogleConstantVariables.USER_EMAIL_ADDRESS_FOR_SESSION_GOOGLE, emailAddress);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Redirects User to appropriate portal page.
|
||||
*
|
||||
* @param response
|
||||
* @param redirectUrlCustom is the portal page user would visit if user was already logged in
|
||||
* @param redirectUrlDefault is the default landing page of the portal, which is a fall-back in case of empty redirectUrlCustom
|
||||
* @throws IOException
|
||||
* @throws SystemException
|
||||
* @throws PortalException
|
||||
* @throws WindowStateException
|
||||
* @throws PortletModeException
|
||||
*/
|
||||
public static void reditectUserToHisPage(HttpServletResponse response, HttpServletRequest request, String redirectUrlCustom, String redirectUrlDefault) throws PortletModeException, WindowStateException, IOException {
|
||||
|
||||
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
|
||||
|
||||
PortletURL portletURL = PortletURLFactoryUtil.create(request, PortletKeys.LOGIN, themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
|
||||
|
||||
portletURL.setPortletMode(PortletMode.VIEW);
|
||||
portletURL.setWindowState(LiferayWindowState.POP_UP);
|
||||
portletURL.setParameter("redirect", redirectUrlCustom);
|
||||
portletURL.setParameter("struts_action", "/login/login_redirect");
|
||||
|
||||
response.sendRedirect(portletURL.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
google=Google
|
||||
google-client-id=Client Id
|
||||
google-client-secret=Client Secret
|
||||
google-client-id-helpMessage=Fill this field with the client id google has provided you with
|
||||
google-client-secret-helpMessage=Fill this field with client secret google has provided you with
|
||||
google-enable=Check, if you want to use google login, otherwise uncheck
|
||||
sign-in-with-google=Sign up with Google
|
|
@ -0,0 +1,26 @@
|
|||
# Add Google as a tab for configuration
|
||||
company.settings.form.authentication=google
|
||||
|
||||
# Make this struts path public accessible
|
||||
auth.public.paths=/portal/google_login
|
||||
|
||||
# Set Google's authentication Class
|
||||
auto.login.hooks=gr.cite.google.GoogleAutoLogin
|
||||
|
||||
# Add Google to navigation bar at login
|
||||
# if using the custom login hook then you can safely remove
|
||||
# this option but you need to concatenate the value 'google' to the login.form.navigation.socials
|
||||
# option in the login-hook.
|
||||
# if not using the custom login hook, this option should be enabled in order to have google as a login method.
|
||||
# login.form.navigation.post=google
|
||||
|
||||
#google initial call to create the login connection
|
||||
google.hook.call.url=/c/portal/google_login?cmd=login
|
||||
|
||||
# Callback url after logging in to google
|
||||
google.hook.callback.url=/c/portal/google_login?cmd=token
|
||||
|
||||
# Google Authentication configuration
|
||||
google.auth.enabled=true
|
||||
google.client.id=
|
||||
google.client.secret=
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">
|
||||
|
||||
<hook>
|
||||
|
||||
<!-- The specified contains new configuration and/or overrides already existing configuration for the portal -->
|
||||
<portal-properties>portal.properties</portal-properties>
|
||||
|
||||
<!-- The specified file contains the language -->
|
||||
<language-properties>content/Language.properties</language-properties>
|
||||
|
||||
<!-- Specify the jsp directory that contains overridden jsps and new jsps -->
|
||||
<custom-jsp-dir>/custom_jsps</custom-jsp-dir>
|
||||
|
||||
<!-- Create a new struts action -->
|
||||
<struts-action>
|
||||
<struts-action-path>/portal/google_login</struts-action-path>
|
||||
<struts-action-impl>gr.cite.google.GoogleOAuth</struts-action-impl>
|
||||
</struts-action>
|
||||
|
||||
</hook>
|
|
@ -0,0 +1,9 @@
|
|||
name=Google
|
||||
module-group-id=liferay
|
||||
module-incremental-version=1
|
||||
tags=
|
||||
short-description=
|
||||
change-log=
|
||||
page-url=http://www.liferay.com
|
||||
author=Liferay, Inc.
|
||||
licenses=LGPL
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
|
||||
</web-app>
|
|
@ -0,0 +1,42 @@
|
|||
.social-hook div[class*="-hook-icon"] {
|
||||
display: inline-block;
|
||||
padding: 0px 6px;
|
||||
color: white;
|
||||
margin-right: -5px;
|
||||
box-shadow: 2px 0px 8px -2px rgba(0,0,0,0.7), -2px 1px 1px 1px rgba(0,0,0,0.3);
|
||||
z-index: 10;
|
||||
position: relative;
|
||||
width: 10%
|
||||
}
|
||||
|
||||
.social-hook div[class$="-hook-text"] {
|
||||
display: inline-block;
|
||||
padding: 0px 10px;
|
||||
border-radius: 0px 5px 5px 0px;
|
||||
color: white;
|
||||
box-shadow: 1px 1px 3px 1.5px rgba(0,0,0,0.3);
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.social-hook a[class$="-hook-link"] {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.social-hook div[class$="-hook-label-wrapper"]{
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.social-hook div[class$="-hook-label-wrapper"]:hover{
|
||||
opacity : 0.85;
|
||||
}
|
||||
|
||||
.social-hook .google-hook-text, .social-hook .google-hook-icon{
|
||||
background-color: rgb(209, 72, 54);
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.social-hook div[class$="-hook-text"] {
|
||||
min-width: 50%;
|
||||
width: inherit;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<%@ include file="/html/portlet/login/init.jsp" %>
|
||||
|
||||
<%@ page import="com.liferay.portal.util.PortalUtil" %>
|
||||
|
||||
<link rel="stylesheet" href="/html/portlet/login/css/google.css">
|
||||
|
||||
<!-- initialize variables for google login request -->
|
||||
<%
|
||||
|
||||
boolean isGoogleAuthEnabled = PrefsPropsUtil.getBoolean(company.getCompanyId(), "google.auth.enabled", true);
|
||||
String googleLoginUrl = PortalUtil.getPathContext().toString() + PropsUtil.get("google.hook.call.url");
|
||||
String redirect = ParamUtil.getString(request, "redirect");
|
||||
session.setAttribute("redirectUrlAfterLogin", redirect);
|
||||
|
||||
String[] navSocialsArray = PropsUtil.getArray("login.form.navigation.socials");
|
||||
String[] navPostsArray = PropsUtil.getArray("login.form.navigation.post");
|
||||
|
||||
Set<String> navSocialsSet = new HashSet<String>(Arrays.asList(navSocialsArray));
|
||||
Set<String> navPostsSet = new HashSet<String>(Arrays.asList(navPostsArray));
|
||||
|
||||
Boolean inSocials = navSocialsSet.contains("google");
|
||||
Boolean inPosts = navPostsSet.contains("google");
|
||||
|
||||
%>
|
||||
|
||||
<c:if test="<%= isGoogleAuthEnabled %>">
|
||||
|
||||
<div class="social-hook">
|
||||
<c:choose>
|
||||
<c:when test="<%= inSocials %>">
|
||||
<a href="<%= googleLoginUrl.toString() %>" class="google-hook-link">
|
||||
<div class="google-hook-label-wrapper">
|
||||
<div class="google-hook-icon">
|
||||
<h5>
|
||||
<i class="icon-google-plus"></i>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="google-hook-text">
|
||||
<h5>
|
||||
<%= LanguageUtil.get(pageContext, "sign-in-with-google")%>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</c:when>
|
||||
<c:when test="<%= inPosts %>">
|
||||
<liferay-ui:icon
|
||||
message="google"
|
||||
src="/html/portlet/login/navigation/google.png"
|
||||
url="<%= googleLoginUrl.toString() %>"
|
||||
/>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
</div>
|
||||
|
||||
</c:if>
|
Binary file not shown.
After Width: | Height: | Size: 661 B |
|
@ -0,0 +1,25 @@
|
|||
<!--
|
||||
|
||||
A configuration page for client id and client secret, in case they need to be changedl.
|
||||
Additionally there is a checkbox to disable google hook.
|
||||
|
||||
-->
|
||||
|
||||
|
||||
<%@ include file="/html/portlet/portal_settings/init.jsp" %>
|
||||
|
||||
<%
|
||||
|
||||
boolean isGoogleAuthEnabled = PrefsPropsUtil.getBoolean(company.getCompanyId(), "google.auth.enabled", true);
|
||||
String googleClientId = PrefsPropsUtil.getString(company.getCompanyId(), "google.client.id");
|
||||
String googleClientSecret = PrefsPropsUtil.getString(company.getCompanyId(), "google.client.secret");
|
||||
|
||||
%>
|
||||
|
||||
<aui:fieldset>
|
||||
<aui:input helpMessage="google-enable" label="enabled" name='<%= "settings--google.auth.enabled--" %>' type="checkbox" value='<%= isGoogleAuthEnabled %>' />
|
||||
|
||||
<aui:input cssClass="input-xxlarge" helpMessage="google-client-id-helpMessage" label="google-client-id" name='<%= "settings--google.client.id--" %>' type="text" value="<%= googleClientId %>" />
|
||||
|
||||
<aui:input cssClass="input-xxlarge" helpMessage="google-client-secret-helpMessage" label="google-client-secret" name='<%= "settings--google.client.secret--" %>' type="text" value="<%= googleClientSecret %>" />
|
||||
</aui:fieldset>
|
Reference in New Issue