Commit dd1b6fe5 authored by Matija Obreza's avatar Matija Obreza

Merge branch '8-support-password-grant' into 'master'

Resolve "Support password grant"

Closes #8

See merge request !8
parents da23386c 2d6c53c9
Pipeline #3035 passed with stage
in 27 seconds
...@@ -14,7 +14,9 @@ String scope = "write"; // write scope is required to manage data on Genesys ...@@ -14,7 +14,9 @@ String scope = "write"; // write scope is required to manage data on Genesys
GenesysClient genesysClient = new GenesysClient(baseUrl, clientId, clientSecret, callbackUrl, scope); GenesysClient genesysClient = new GenesysClient(baseUrl, clientId, clientSecret, callbackUrl, scope);
``` ```
### Authentication ### Authentication: Authorization code
For Genesys API clients that support `authorization_code` grant (such as websites, unsafe clients).
```java ```java
// Authenticate the user // Authenticate the user
...@@ -32,10 +34,27 @@ genesysClient.me(); ...@@ -32,10 +34,27 @@ genesysClient.me();
// genesysClient.getTokens().getRefreshToken(); // genesysClient.getTokens().getRefreshToken();
``` ```
### Authentication: Username and password
For Genesys API clients that support `password` grant (safe clients).
```java
// Obtain username and password
String username;
String password;
genesysClient.authenticate(username, password);
// Test it with /me
genesysClient.me();
// Tokens are now accessible. The refreshToken must be **safely** stored for future use.
// genesysClient.getTokens().getAccessToken();
// genesysClient.getTokens().getRefreshToken();
```
### Re-using tokens ### Re-using tokens
If you have existing tokens you can provide the access and refresh tokens when If you have existing tokens you can provide the access and refresh tokens when initializing the client:
initializing the client:
```java ```java
GenesysTokens genesysTokens = new GenesysTokens(); GenesysTokens genesysTokens = new GenesysTokens();
...@@ -71,9 +90,9 @@ try { ...@@ -71,9 +90,9 @@ try {
```xml ```xml
<dependency> <dependency>
<groupId>org.genesys-pgr</groupId> <groupId>org.genesys-pgr</groupId>
<artifactId>genesys-client-api</artifactId> <artifactId>genesys-client-api</artifactId>
<version>1.2</version> <version>1.2</version>
</dependency> </dependency>
``` ```
...@@ -81,9 +100,9 @@ Or for the development version: ...@@ -81,9 +100,9 @@ Or for the development version:
```xml ```xml
<dependency> <dependency>
<groupId>org.genesys-pgr</groupId> <groupId>org.genesys-pgr</groupId>
<artifactId>genesys-client-api</artifactId> <artifactId>genesys-client-api</artifactId>
<version>1.3-SNAPSHOT</version> <version>1.3-SNAPSHOT</version>
</dependency> </dependency>
``` ```
......
...@@ -116,7 +116,7 @@ public class GenesysClient { ...@@ -116,7 +116,7 @@ public class GenesysClient {
public String getAuthorizationUrl() { public String getAuthorizationUrl() {
return service.getAuthorizationUrl(); return service.getAuthorizationUrl();
} }
/** /**
* Sets the tokens. * Sets the tokens.
* *
...@@ -231,7 +231,7 @@ public class GenesysClient { ...@@ -231,7 +231,7 @@ public class GenesysClient {
request.setPayload(postBody); request.setPayload(postBody);
} }
request.setCharset("UTF-8"); request.setCharset("UTF-8");
Response response = null; Response response = null;
try { try {
...@@ -540,16 +540,34 @@ public class GenesysClient { ...@@ -540,16 +540,34 @@ public class GenesysClient {
return query(Verb.POST, "/acn/" + instCode + "/delete", null, jsonAccessionIdList); return query(Verb.POST, "/acn/" + instCode + "/delete", null, jsonAccessionIdList);
} }
public void authenticate(String uname, String password) throws OAuthAuthenticationException {
try {
OAuth2AccessToken accessToken = service.getAccessTokenPasswordGrant(uname, password);
LOG.info("ACCESS TOKEN: {} scope={} raw={}", accessToken.getAccessToken(), accessToken.getScope(), accessToken.getRawResponse());
final String refreshToken = accessToken.getRefreshToken();
LOG.info("REFRESH TOKEN: {}", refreshToken);
tokens.setAccessToken(accessToken.getAccessToken());
tokens.setRefreshToken(refreshToken);
} catch (IOException | InterruptedException | ExecutionException e) {
LOG.error("Auth error", e);
throw new OAuthAuthenticationException(e.getMessage());
}
}
/** /**
* Obtain access and refresh tokens with verifier code. * Obtain access and refresh tokens with verifier code.
* *
* @param verifierCode the verifier code * @param verifierCode the verifier code
* @throws OAuthAuthenticationException * @throws OAuthAuthenticationException
*/ */
public void authenticate(final String verifierCode) throws OAuthAuthenticationException { public void authenticate(final String verifierCode) throws OAuthAuthenticationException {
try { try {
OAuth2AccessToken accessToken = service.getAccessToken(verifierCode); OAuth2AccessToken accessToken = service.getAccessToken(verifierCode);
LOG.info("ACCESS TOKEN: {} scope={} raw={}", accessToken.getAccessToken(), accessToken.getScope(), accessToken.getRawResponse()); LOG.info("ACCESS TOKEN: {} scope={} raw={}", accessToken.getAccessToken(), accessToken.getScope(), accessToken.getRawResponse());
final String refreshToken = accessToken.getRefreshToken(); final String refreshToken = accessToken.getRefreshToken();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment