Skip to content

Commit

Permalink
filled in the remaining endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
MarkNenadov committed Jun 5, 2023
1 parent 4f60595 commit 7ba185e
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 13 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

A Kotlin client for the passwordless.dev API (https://passwordless.dev/).

Note: Between registerToken() and signIn() you will need to make the front-end signInWtih*() call that the passwordless.dev docs mention.
Note: If you want to use the test case, you will need to fill in test/resources/kpasswordless.properties

### Service ###
Expand All @@ -27,9 +28,19 @@ KPasswordlessSignIn {
type: String
rpId: String
}
class KpasswordlessCredential {
var publicKey: String
var userHandle: String
var origin: String
var country: String
var device: String
}
interface KpasswordlessService {
fun registerToken( privateKey: String, identity: KPasswordlessIdentity ): String
fun addAliases( privateKey: String, identity: KPasswordlessIdentity, aliases: List<String> ): Boolean
fun signin( privateKey: String, token: String ): KPasswordlessSignIn
fun deleteCredentials(privateKey: String, credentialId: String): Boolean
}
```
4 changes: 1 addition & 3 deletions TODO
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
TODO

* Implement /signin/verify endpoint
* Implement /credentials/list endpoint
* Implement /credentials/delete endpoint
* ?
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.pythonbyte.haveibeenkwned.domain

import org.pythonbyte.krux.json.JsonObject

class KpasswordlessCredential {
var publicKey = ""
var userHandle = ""
var origin = ""
var country = ""
var device = ""

companion object {
fun createList(array: List<JsonObject>): List<KpasswordlessCredential> {
return array.map { jsonObject ->
val credential = KpasswordlessCredential()

credential.publicKey = jsonObject.getString("publicKey")
credential.userHandle = jsonObject.getString("userHandle")
credential.origin = jsonObject.getString("origin")
credential.country = jsonObject.getString("country")
credential.device = jsonObject.getString("device")

credential;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ package org.pythonbyte.haveibeenkwned.service

import org.pythonbyte.haveibeenkwned.domain.KPasswordlessIdentity
import org.pythonbyte.haveibeenkwned.domain.KPasswordlessSignIn
import org.pythonbyte.haveibeenkwned.domain.KpasswordlessCredential

interface KpasswordlessService {
fun registerToken( privateKey: String, identity: KPasswordlessIdentity ): String
fun addAliases( privateKey: String, identity: KPasswordlessIdentity, aliases: List<String> ): Boolean
fun signin( privateKey: String, token: String ): KPasswordlessSignIn
fun listCredentials( privateKey: String, identity: KPasswordlessIdentity ): List<KpasswordlessCredential>
fun deleteCredentials(privateKey: String, credentialId: String): Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.squareup.okhttp.*
import org.json.JSONObject
import org.pythonbyte.haveibeenkwned.domain.KPasswordlessIdentity
import org.pythonbyte.haveibeenkwned.domain.KPasswordlessSignIn
import org.pythonbyte.haveibeenkwned.domain.KpasswordlessCredential
import org.pythonbyte.krux.http.buildRequest
import org.pythonbyte.krux.json.JsonObject
import org.pythonbyte.krux.properties.PropertyReader
Expand Down Expand Up @@ -48,7 +49,6 @@ class KpasswordlessServiceImpl : KpasswordlessService {
}

override fun signin( privateKey: String, token: String ): KPasswordlessSignIn {
println( "$baseUrl/signin/verify" )
val request = buildRequest( "$baseUrl/signin/verify", generateHeaders( privateKey ), createPostBody( mapOf( "token" to token ) ) )
val response = sendRequest( request )

Expand All @@ -57,7 +57,40 @@ class KpasswordlessServiceImpl : KpasswordlessService {

return KPasswordlessSignIn.create( responseObject )
}
throw Exception( "Sign In failed with code [" + response.code() + "] [" + response.message() + "]" )

val responseJson = response.body().string().trim()

throw Exception( "Sign In failed with code [" + response.code() + "] [" + response.message() + "] json [$responseJson]" )
}

override fun listCredentials( privateKey: String, identity: KPasswordlessIdentity ): List<KpasswordlessCredential> {
val request = buildRequest( "$baseUrl/credentials/list?userId=" + identity.userId, generateHeaders( privateKey ), createPostBody( mapOf( "userId" to identity.userId ) ) )
val response = sendRequest( request )

if ( response.code() == 200 ) {
val responseJson = response.body().string().trim()
val responseObject = JsonObject( JSONObject(responseJson))

return KpasswordlessCredential.createList( responseObject.getArray("values") )
}

val responseJson = response.body().string().trim()

throw Exception( "List Credentails failed with code [" + response.code() + "] [" + response.message() + "] json [$responseJson]" )
}

override fun deleteCredentials(privateKey: String, credentialId: String): Boolean {
val request = buildRequest("$baseUrl/credentials/delete", generateHeaders( privateKey), createPostBody( mapOf( "credentialId" to credentialId ) ) )

val response = sendRequest( request )

if ( response.code() == 200 ) {
return true
}

val responseJson = response.body().string().trim()

throw Exception( "Delete Aliases failed with code [" + response.code() + "] [" + response.message() + "] json [$responseJson]" )
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class KpasswordlessServiceTest {
identity.displayName = displayName;
identity.userName = userName;

System.out.println( "Token is " + kpasswordlessService.registerToken( privateKey, identity ) );
println( "Token is " + kpasswordlessService.registerToken( privateKey, identity ) );
}

@Test
Expand All @@ -35,17 +35,22 @@ class KpasswordlessServiceTest {
}

@Test
fun testSignIn() {
fun testListCredentials() {
val identity = KPasswordlessIdentity()
identity.userId = userId;
identity.displayName = displayName;
identity.userName = userName;

val token = kpasswordlessService.registerToken( privateKey, identity );
val credentials = kpasswordlessService.listCredentials( privateKey, identity );

val signIn = kpasswordlessService.signin( privateKey, token )
assertTrue( credentials.size > 0 )

assertTrue( signIn.isSuccess );
System.out.println( signIn.device );
credentials.forEach { credential ->
println("User Handle: " + credential.userHandle)
println("Device: " + credential.device)
}
}

@Test
fun testDeleteCredentials() {
assertTrue( kpasswordlessService.deleteCredentials( privateKey, "fjekwfew" ) )
}
}

0 comments on commit 7ba185e

Please sign in to comment.