Skip to content
This repository was archived by the owner on Dec 12, 2018. It is now read-only.

Commit 7b6564a

Browse files
committed
Adding support for password reset via Okta's API.
We will likely need to change this, to configuring an email server and sending out a mail via a templated message.
1 parent 83c5bd1 commit 7b6564a

File tree

6 files changed

+176
-3
lines changed

6 files changed

+176
-3
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.stormpath.sdk.application.okta;
2+
3+
import com.stormpath.sdk.resource.Resource;
4+
5+
/**
6+
*
7+
*/
8+
public interface OktaForgotPasswordRequest extends Resource {
9+
10+
String getUsername();
11+
OktaForgotPasswordRequest setUsername(String username);
12+
13+
String getFactorType();
14+
OktaForgotPasswordRequest setFactorType(String factorType);
15+
16+
String getRelayState();
17+
OktaForgotPasswordRequest setRelayState(String relayState);
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.stormpath.sdk.application.okta;
2+
3+
import com.stormpath.sdk.resource.Resource;
4+
5+
/**
6+
*
7+
*/
8+
public interface OktaForgotPasswordResult extends Resource {
9+
10+
String getStatus();
11+
String getFactorResult();
12+
String getRelayState();
13+
String getFactorType();
14+
String getRecoveryType();
15+
16+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.stormpath.sdk.impl.application.okta;
2+
3+
import com.stormpath.sdk.application.okta.OktaForgotPasswordRequest;
4+
import com.stormpath.sdk.impl.ds.InternalDataStore;
5+
import com.stormpath.sdk.impl.resource.AbstractInstanceResource;
6+
import com.stormpath.sdk.impl.resource.Property;
7+
import com.stormpath.sdk.impl.resource.StringProperty;
8+
9+
import java.util.Map;
10+
11+
/**
12+
*
13+
*/
14+
public class DefaultOktaForgotPasswordRequest extends AbstractInstanceResource implements OktaForgotPasswordRequest {
15+
16+
17+
private static final StringProperty USERNAME = new StringProperty("username");
18+
private static final StringProperty FACTOR_TYPE = new StringProperty("factorType");
19+
private static final StringProperty RELAY_STATE = new StringProperty("relayState");
20+
21+
private static final Map<String, Property> PROPERTY_DESCRIPTORS = createPropertyDescriptorMap(USERNAME, FACTOR_TYPE, RELAY_STATE);
22+
23+
public DefaultOktaForgotPasswordRequest(InternalDataStore dataStore) {
24+
super(dataStore);
25+
}
26+
27+
@Override
28+
public Map<String, Property> getPropertyDescriptors() {
29+
return PROPERTY_DESCRIPTORS;
30+
}
31+
@Override
32+
public String getUsername() {
33+
return getString(USERNAME);
34+
}
35+
36+
@Override
37+
public OktaForgotPasswordRequest setUsername(String username) {
38+
setProperty(USERNAME, username);
39+
return this;
40+
}
41+
42+
@Override
43+
public String getFactorType() {
44+
return getString(FACTOR_TYPE);
45+
}
46+
47+
@Override
48+
public OktaForgotPasswordRequest setFactorType(String factorType) {
49+
setProperty(FACTOR_TYPE, factorType);
50+
return this;
51+
}
52+
53+
@Override
54+
public String getRelayState() {
55+
return getString(RELAY_STATE);
56+
}
57+
58+
@Override
59+
public OktaForgotPasswordRequest setRelayState(String relayState) {
60+
setProperty(RELAY_STATE, relayState);
61+
return this;
62+
}
63+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.stormpath.sdk.impl.application.okta;
2+
3+
import com.stormpath.sdk.application.okta.OktaForgotPasswordResult;
4+
import com.stormpath.sdk.impl.ds.InternalDataStore;
5+
import com.stormpath.sdk.impl.resource.AbstractInstanceResource;
6+
import com.stormpath.sdk.impl.resource.Property;
7+
import com.stormpath.sdk.impl.resource.StringProperty;
8+
9+
import java.util.Map;
10+
11+
/**
12+
*
13+
*/
14+
public class DefaultOktaForgotPasswordResult extends AbstractInstanceResource implements OktaForgotPasswordResult {
15+
16+
private static final StringProperty STATUS = new StringProperty("status");
17+
private static final StringProperty FACTOR_RESULT = new StringProperty("factorResult");
18+
private static final StringProperty FACTOR_TYPE = new StringProperty("factorType");
19+
private static final StringProperty RELAY_STATE = new StringProperty("relayState");
20+
private static final StringProperty RECOVERY_TYPE = new StringProperty("recoveryType");
21+
22+
private static final Map<String, Property> PROPERTY_DESCRIPTORS = createPropertyDescriptorMap(STATUS, FACTOR_TYPE, RELAY_STATE, FACTOR_RESULT, RECOVERY_TYPE);
23+
24+
public DefaultOktaForgotPasswordResult(InternalDataStore dataStore) {
25+
super(dataStore);
26+
}
27+
28+
public DefaultOktaForgotPasswordResult(InternalDataStore dataStore, Map<String, Object> properties) {
29+
super(dataStore, properties);
30+
}
31+
32+
33+
@Override
34+
public Map<String, Property> getPropertyDescriptors() {
35+
return PROPERTY_DESCRIPTORS;
36+
}
37+
38+
@Override
39+
public String getStatus() {
40+
return getString(STATUS);
41+
}
42+
43+
@Override
44+
public String getFactorResult() {
45+
return getString(FACTOR_RESULT);
46+
}
47+
48+
@Override
49+
public String getRelayState() {
50+
return getString(RELAY_STATE);
51+
}
52+
53+
@Override
54+
public String getFactorType() {
55+
return getString(FACTOR_TYPE);
56+
}
57+
58+
@Override
59+
public String getRecoveryType() {
60+
return getString(RECOVERY_TYPE);
61+
}
62+
}

impl/src/main/java/com/stormpath/sdk/impl/application/okta/OktaApplication.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import com.stormpath.sdk.application.ApplicationOptions;
1717
import com.stormpath.sdk.application.ApplicationStatus;
1818
import com.stormpath.sdk.application.OAuthApplication;
19+
import com.stormpath.sdk.application.okta.OktaForgotPasswordRequest;
20+
import com.stormpath.sdk.application.okta.OktaForgotPasswordResult;
1921
import com.stormpath.sdk.application.webconfig.ApplicationWebConfig;
2022
import com.stormpath.sdk.application.webconfig.ApplicationWebConfigStatus;
2123
import com.stormpath.sdk.application.webconfig.ChangePasswordConfig;
@@ -51,6 +53,7 @@
5153
import com.stormpath.sdk.impl.oauth.DefaultOAuthStormpathFactorChallengeGrantRequestAuthenticator;
5254
import com.stormpath.sdk.impl.oauth.DefaultOAuthStormpathSocialGrantRequestAuthenticator;
5355
import com.stormpath.sdk.impl.oauth.DefaultOAuthTokenRevocator;
56+
import com.stormpath.sdk.impl.okta.OktaApiPaths;
5457
import com.stormpath.sdk.impl.resource.AbstractCollectionResource;
5558
import com.stormpath.sdk.impl.resource.AbstractResource;
5659
import com.stormpath.sdk.impl.resource.Property;
@@ -231,7 +234,16 @@ public Tenant getTenant() {
231234

232235
@Override
233236
public PasswordResetToken sendPasswordResetEmail(String email) throws ResourceException {
234-
throw new UnsupportedOperationException("sendPasswordResetEmail() method hasn't been implemented.");
237+
238+
OktaForgotPasswordRequest request = getDataStore().instantiate(OktaForgotPasswordRequest.class);
239+
request.setUsername(email);
240+
request.setFactorType("EMAIL");
241+
request.setRelayState("/");
242+
243+
OktaForgotPasswordResult result = getDataStore().create(OktaApiPaths.PASSWORD_RECOVERY, request, OktaForgotPasswordResult.class);
244+
245+
return null;
246+
235247
}
236248

237249
@Override

impl/src/main/java/com/stormpath/sdk/impl/okta/OktaApiPaths.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
*/
66
public final class OktaApiPaths {
77

8-
public final static String API_V1 = "/api/v1/";
8+
public static final String API_V1 = "/api/v1/";
99

10-
public final static String USERS = "/api/v1/users/";
10+
public static final String USERS = API_V1 + "users/";
11+
12+
public static final String PASSWORD_RECOVERY = API_V1 + "authn/recovery/password";
1113

1214
public static String apiPath(String resource) {
1315
return API_V1 + resource;

0 commit comments

Comments
 (0)