This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch 4.0.x
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/4.0.x by this push:
new 92de257 [OPENMEETINGS-1979] login via VK should work
92de257 is described below
commit 92de2572390a3d2d3b602e2c9f33e0f733340c42
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Tue Jan 15 12:08:16 2019 +0700
[OPENMEETINGS-1979] login via VK should work
---
.../installation/ImportInitvalues.java | 2 +-
.../openmeetings/web/pages/auth/SignInPage.java | 108 ++++++++++++---------
2 files changed, 62 insertions(+), 48 deletions(-)
diff --git
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 918c471..d415768 100644
---
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -525,7 +525,7 @@ public class ImportInitvalues {
.setRequestTokenUrl("https://oauth.vk.com/access_token")
.setRequestTokenMethod(RequestTokenMethod.POST)
.setRequestTokenAttributes("client_id={$client_id}&client_secret={$client_secret}&code={$code}&redirect_uri={$redirect_uri}")
-
.setRequestInfoUrl("https://api.vk.com/method/users.get?user_ids=&access_token={$access_token}&fields=id,first_name,last_name,email&name_case=nom")
+
.setRequestInfoUrl("https://api.vk.com/method/users.get?&v=5.92&user_ids={$user_id}&access_token={$access_token}&fields=id,first_name,last_name,email&name_case=nom")
.setRequestInfoMethod(RequestInfoMethod.GET)
.addMapping(PARAM_LOGIN, "uid")
.addMapping(PARAM_EMAIL, EMAIL_PARAM)
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
index 4bc2667..ecc34b4 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
@@ -36,6 +36,9 @@ import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
@@ -99,7 +102,7 @@ public class SignInPage extends BaseInitedPage {
return;
}
log.debug("OAuthInfo={}", authInfo);
- OAuthUser user =
getAuthParams(authInfo.accessToken, code, server);
+ OAuthUser user =
getAuthParams(authInfo, code, server);
loginViaOAuth2(user, serverId);
} else { // redirect to get code
showAuth(server);
@@ -149,33 +152,30 @@ public class SignInPage extends BaseInitedPage {
}
// ============= OAuth2 methods =============
+ private static Map<String, String> getInitParams(final OAuthServer s) {
+ Map<String, String> params = new HashMap<>();
+ params.put("{$client_id}", s.getClientId());
+ params.put("{$redirect_uri}", getRedirectUri(s));
+ return params;
+ }
+
public static void showAuth(final OAuthServer s) {
- String authUrl = prepareUrlParams(s.getRequestKeyUrl(),
s.getClientId(), getRedirectUri(s), null, null, null);
+ String authUrl = prepareUrl(s.getRequestKeyUrl(),
getInitParams(s));
log.debug("redirectUrl={}", authUrl);
throw new RedirectToUrlException(authUrl);
}
- public static String prepareUrlParams(String urlTemplate, String
clientId, String redirectUri, String secret, String token, String code) {
+ private static String prepareUrl(String urlTemplate, Map<String,
String> params) {
String result = urlTemplate;
- if (clientId != null) {
- result = result.replace("{$client_id}", clientId);
- }
- if (secret != null) {
- result = result.replace("{$client_secret}", secret);
- }
- if (token != null) {
- result = result.replace("{$access_token}", token);
- }
- if (redirectUri != null) {
- try {
- result = result.replace("{$redirect_uri}",
URLEncoder.encode(redirectUri, UTF_8.name()));
- } catch (UnsupportedEncodingException e) {
- log.error("Unexpected exception while encoding
URI", e);
+ for (Entry<String, String> e : params.entrySet()) {
+ if (e.getValue() != null) {
+ try {
+ result = result.replace(e.getKey(),
URLEncoder.encode(e.getValue(), UTF_8.name()));
+ } catch (UnsupportedEncodingException err) {
+ log.error("Unexpected exception while
encoding URI param {}", e, err);
+ }
}
}
- if (code != null) {
- result = result.replace("{$code}", code);
- }
return result;
}
@@ -223,12 +223,25 @@ public class SignInPage extends BaseInitedPage {
}
}
+ private static Map<String, String> getParams(final OAuthServer s,
String code, AuthInfo authInfo) {
+ Map<String, String> params = getInitParams(s);
+ params.put("{$client_id}", s.getClientId());
+ params.put("{$client_secret}", s.getClientSecret());
+ if (authInfo != null) {
+ params.put("{$access_token}", authInfo.accessToken);
+ params.put("{$user_id}", authInfo.userId);
+ }
+ if (code != null) {
+ params.put("{$code}", code);
+ }
+ return params;
+ }
+
private static AuthInfo getToken(String code, OAuthServer server)
throws IOException {
String requestTokenBaseUrl = server.getRequestTokenUrl();
// build url params to request auth token
String requestTokenParams = server.getRequestTokenAttributes();
- requestTokenParams = prepareUrlParams(requestTokenParams,
server.getClientId(), getRedirectUri(server)
- , server.getClientSecret(), null, code);
+ requestTokenParams = prepareUrl(requestTokenParams,
getParams(server, code, null));
// request auth token
HttpURLConnection connection = (HttpURLConnection) new
URL(requestTokenBaseUrl).openConnection();
prepareConnection(connection);
@@ -244,20 +257,7 @@ public class SignInPage extends BaseInitedPage {
paramsOutputStream.flush();
String sourceResponse =
IOUtils.toString(connection.getInputStream(), UTF_8);
// parse json result
- AuthInfo result = new AuthInfo();
- JSONObject json = new JSONObject(sourceResponse);
- if (json.has("access_token")) {
- result.accessToken = json.getString("access_token");
- }
- if (json.has("refresh_token")) {
- result.refreshToken = json.getString("refresh_token");
- }
- if (json.has("token_type")) {
- result.tokenType = json.getString("token_type");
- }
- if (json.has("expires_in")) {
- result.expiresIn = json.getLong("expires_in");
- }
+ AuthInfo result = new AuthInfo(sourceResponse);
// access token must be specified
if (result.accessToken == null) {
log.error("Response doesn't contain access_token
field:\n {}", sourceResponse);
@@ -266,15 +266,14 @@ public class SignInPage extends BaseInitedPage {
return result;
}
- private static OAuthUser getAuthParams(String token, String code,
OAuthServer server) throws IOException {
+ private static OAuthUser getAuthParams(AuthInfo authInfo, String code,
OAuthServer server) throws IOException {
// prepare url
String requestInfoUrl = server.getRequestInfoUrl();
- requestInfoUrl = prepareUrlParams(requestInfoUrl,
server.getClientId(), getRedirectUri(server)
- , server.getClientSecret(), token, code);
+ requestInfoUrl = prepareUrl(requestInfoUrl, getParams(server,
code, authInfo));
// send request
HttpURLConnection connection = (HttpURLConnection) new
URL(requestInfoUrl).openConnection();
if (server.getRequestInfoMethod() == RequestInfoMethod.HEADER) {
- connection.setRequestProperty("Authorization",
String.format("bearer %s", token));
+ connection.setRequestProperty("Authorization",
String.format("bearer %s", authInfo.accessToken));
} else {
connection.setRequestMethod(server.getRequestInfoMethod().name());
}
@@ -296,16 +295,31 @@ public class SignInPage extends BaseInitedPage {
}
private static class AuthInfo {
- String accessToken;
- String refreshToken;
- String tokenType;
- long expiresIn;
+ final String accessToken;
+ final String refreshToken;
+ final String tokenType;
+ final String userId;
+ final long expiresIn;
+
+ AuthInfo(String jsonStr) {
+ log.debug("AuthInfo={}", jsonStr);
+ JSONObject json = new JSONObject(jsonStr);
+ accessToken = json.optString("access_token");
+ refreshToken = json.optString("refresh_token");
+ tokenType = json.optString("token_type");
+ userId = json.optString("user_id");
+ expiresIn = json.optLong("expires_in");
+ }
@Override
public String toString() {
- return "AuthInfo [accessToken=" + accessToken + ",
refreshToken="
- + refreshToken + ", tokenType=" +
tokenType
- + ", expiresIn=" + expiresIn + "]";
+ return new StringBuilder()
+ .append("AuthInfo
[accessToken=").append(accessToken)
+ .append(", refreshToken=").append(refreshToken)
+ .append(", tokenType=").append(tokenType)
+ .append(", userId=").append(userId)
+ .append(", expiresIn=").append(expiresIn)
+ .append("]").toString();
}
}
}