Skip to content

Commit de77183

Browse files
47 implement token enrollment via validatecheck (#48)
* Update challenge and consts with image * implement imgs * Update the tests * Update WebAuthn.java * Update PIResponse.java
1 parent 02bd76d commit de77183

13 files changed

Lines changed: 165 additions & 32 deletions

src/main/java/org/privacyidea/Challenge.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ public class Challenge
2323
private final List<String> attributes = new ArrayList<>();
2424
private final String serial;
2525
private final String message;
26+
private final String image;
2627
private final String transaction_id;
2728
private final String type;
2829

29-
public Challenge(String serial, String message, String transaction_id, String type)
30+
public Challenge(String serial, String message, String image, String transaction_id, String type)
3031
{
3132
this.serial = serial;
3233
this.message = message;
34+
this.image = image;
3335
this.transaction_id = transaction_id;
3436
this.type = type;
3537
}
@@ -49,6 +51,8 @@ public String getMessage()
4951
return message;
5052
}
5153

54+
public String getImage() { return image; }
55+
5256
public String getTransactionID()
5357
{
5458
return transaction_id;

src/main/java/org/privacyidea/JSONParser.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static org.privacyidea.PIConstants.DETAIL;
2424
import static org.privacyidea.PIConstants.ERROR;
2525
import static org.privacyidea.PIConstants.ID;
26+
import static org.privacyidea.PIConstants.IMAGE;
2627
import static org.privacyidea.PIConstants.INFO;
2728
import static org.privacyidea.PIConstants.JSONRPC;
2829
import static org.privacyidea.PIConstants.MAXFAIL;
@@ -185,6 +186,7 @@ public PIResponse parsePIResponse(String serverResponse)
185186
JsonObject detail = obj.getAsJsonObject(DETAIL);
186187
response.preferredClientMode = getString(detail, PREFERRED_CLIENT_MODE);
187188
response.message = getString(detail, MESSAGE);
189+
response.image = getString(detail, IMAGE);
188190
response.serial = getString(detail, SERIAL);
189191
response.transactionID = getString(detail, TRANSACTION_ID);
190192
response.type = getString(detail, TYPE);
@@ -211,22 +213,23 @@ public PIResponse parsePIResponse(String serverResponse)
211213
.getAsJsonObject();
212214
String serial = getString(challenge, SERIAL);
213215
String message = getString(challenge, MESSAGE);
216+
String image = getString(challenge, IMAGE);
214217
String transactionid = getString(challenge, TRANSACTION_ID);
215218
String type = getString(challenge, TYPE);
216219

217220
if (TOKEN_TYPE_WEBAUTHN.equals(type))
218221
{
219222
String webAuthnSignRequest = getSignRequestFromAttributes(WEBAUTHN_SIGN_REQUEST, challenge);
220-
response.multichallenge.add(new WebAuthn(serial, message, transactionid, webAuthnSignRequest));
223+
response.multichallenge.add(new WebAuthn(serial, message, image, transactionid, webAuthnSignRequest));
221224
}
222225
else if (TOKEN_TYPE_U2F.equals(type))
223226
{
224227
String u2fSignRequest = getSignRequestFromAttributes(U2F_SIGN_REQUEST, challenge);
225-
response.multichallenge.add(new U2F(serial, message, transactionid, u2fSignRequest));
228+
response.multichallenge.add(new U2F(serial, message, image, transactionid, u2fSignRequest));
226229
}
227230
else
228231
{
229-
response.multichallenge.add(new Challenge(serial, message, transactionid, type));
232+
response.multichallenge.add(new Challenge(serial, message, image, transactionid, type));
230233
}
231234
}
232235
}
@@ -356,6 +359,7 @@ private TokenInfo parseSingleTokenInfo(String json)
356359
info.revoked = getBoolean(obj, "revoked");
357360
info.rolloutState = getString(obj, "rollout_state");
358361
info.serial = getString(obj, SERIAL);
362+
info.image = getString(obj, IMAGE);
359363
info.syncWindow = getInt(obj, "sync_window");
360364
info.tokenType = getString(obj, "tokentype");
361365
info.userEditable = getBoolean(obj, "user_editable");

src/main/java/org/privacyidea/PIConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ private PIConstants()
6464
public static final String TOKEN = "token";
6565
public static final String PREFERRED_CLIENT_MODE = "preferred_client_mode";
6666
public static final String MESSAGE = "message";
67+
public static final String IMAGE = "image";
6768
public static final String MESSAGES = "messages";
6869
public static final String MULTI_CHALLENGE = "multi_challenge";
6970
public static final String ATTRIBUTES = "attributes";

src/main/java/org/privacyidea/PIResponse.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class PIResponse
3737
public List<Challenge> multichallenge = new ArrayList<>();
3838
public String transactionID = "";
3939
public String serial = "";
40+
public String image = "";
4041
public int id = 0;
4142
public String jsonRPCVersion = "";
4243
public boolean status = false;
@@ -170,27 +171,6 @@ public String mergedSignRequest()
170171
}
171172
}
172173

173-
/**
174-
* Get all U2F challenges from the multi_challenge.
175-
*
176-
* @return List of U2F objects or empty list
177-
*/
178-
public List<U2F> u2fSignRequests()
179-
{
180-
List<U2F> ret = new ArrayList<>();
181-
multichallenge.stream()
182-
.filter(c -> TOKEN_TYPE_U2F.equals(c.getType()))
183-
.collect(Collectors.toList())
184-
.forEach(c ->
185-
{
186-
if (c instanceof U2F)
187-
{
188-
ret.add((U2F) c);
189-
}
190-
});
191-
return ret;
192-
}
193-
194174
@Override
195175
public String toString()
196176
{

src/main/java/org/privacyidea/PrivacyIDEA.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static org.privacyidea.PIConstants.POST;
4545
import static org.privacyidea.PIConstants.REALM;
4646
import static org.privacyidea.PIConstants.SERIAL;
47+
import static org.privacyidea.PIConstants.IMAGE;
4748
import static org.privacyidea.PIConstants.TRANSACTION_ID;
4849
import static org.privacyidea.PIConstants.TYPE;
4950
import static org.privacyidea.PIConstants.USER;

src/main/java/org/privacyidea/TokenInfo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class TokenInfo
4040
boolean revoked = false;
4141
String rolloutState = "";
4242
String serial = "";
43+
String image = "";
4344
int syncWindow = 0;
4445
String tokenType = "";
4546
boolean userEditable = false;

src/main/java/org/privacyidea/U2F.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public class U2F extends Challenge
1919
{
2020
private final String signRequest;
2121

22-
public U2F(String serial, String message, String transaction_id, String signRequest)
22+
public U2F(String serial, String message, String image, String transaction_id, String signRequest)
2323
{
24-
super(serial, message, transaction_id, PIConstants.TOKEN_TYPE_U2F);
24+
super(serial, message, image, transaction_id, PIConstants.TOKEN_TYPE_U2F);
2525
this.signRequest = signRequest;
2626
}
2727

src/main/java/org/privacyidea/WebAuthn.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
*/
1616
package org.privacyidea;
1717

18+
import java.util.Collections;
19+
import java.util.Map;
20+
1821
public class WebAuthn extends Challenge
1922
{
2023
private final String signRequest;
2124

22-
public WebAuthn(String serial, String message, String transaction_id, String signRequest)
25+
public WebAuthn(String serial, String message, String image, String transaction_id, String signRequest)
2326
{
24-
super(serial, message, transaction_id, PIConstants.TOKEN_TYPE_WEBAUTHN);
27+
super(serial, message, image, transaction_id, PIConstants.TOKEN_TYPE_WEBAUTHN);
2528
this.signRequest = signRequest;
2629
}
2730

src/test/java/org/privacyidea/TestGetTokenInfo.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ public class TestGetTokenInfo
3838
private final String realm = "realm";
3939
private final String serviceAccount = "admin";
4040
private final String servicePassword = "admin";
41+
private final String serviceRealm = "realm";
4142

4243
@Before
4344
public void setup()
4445
{
4546
mockServer = ClientAndServer.startClientAndServer(1080);
4647

4748
privacyIDEA = PrivacyIDEA.newBuilder("https://127.0.0.1:1080", "test")
48-
.serviceAccount(serviceAccount, servicePassword).realm(realm).sslVerify(false)
49+
.serviceAccount(serviceAccount, servicePassword).serviceRealm(serviceRealm).disableLog().sslVerify(false)
4950
.logger(new PILogImplementation()).build();
5051
}
5152

@@ -66,7 +67,7 @@ public void testSuccess()
6667
"\"signature\":\"rsa_sha256_pss:58c4eed1...5247c47e3e\"}";
6768

6869
mockServer.when(HttpRequest.request().withPath(PIConstants.ENDPOINT_AUTH).withMethod("POST").withBody(
69-
"username=" + serviceAccount + "&password=" + servicePassword + "&realm=" + realm))
70+
"username=" + serviceAccount + "&password=" + servicePassword + "&realm=" + serviceRealm))
7071
.respond(HttpResponse.response()
7172
// This response is simplified because it is very long and contains info that is not (yet) processed anyway
7273
.withBody("{\n" + " \"id\": 1,\n" + " \"jsonrpc\": \"2.0\",\n" +
@@ -116,6 +117,8 @@ public void testSuccess()
116117
assertEquals("5", tokenInfo.userID);
117118
assertEquals("defrealm", tokenInfo.userRealm);
118119
assertEquals("Test", tokenInfo.username);
120+
121+
assertEquals(authToken, privacyIDEA.getAuthToken());
119122
}
120123

121124
@Test
@@ -144,6 +147,8 @@ public void testNoServiceAccount()
144147
List<TokenInfo> tokenInfoList = privacyIDEA.getTokenInfo(username);
145148

146149
assertNull(tokenInfoList);
150+
151+
assertNull(privacyIDEA.getAuthToken());
147152
}
148153

149154
@After

src/test/java/org/privacyidea/TestPollTransaction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public void testPushSynchronous() throws InterruptedException
8787
assertEquals("Bitte geben Sie einen OTP-Wert ein: ", hotpChallenge.getMessage());
8888
assertEquals("02659936574063359702", hotpChallenge.getTransactionID());
8989
assertEquals("hotp", hotpChallenge.getType());
90+
assertEquals("", hotpChallenge.getImage());
9091
assertTrue(hotpChallenge.getAttributes().isEmpty());
9192

9293
Challenge pushChallenge = challenges.stream().filter(c -> c.getSerial().equals("PIPU0001F75E")).findFirst()

0 commit comments

Comments
 (0)