Skip to content

Commit

Permalink
cont
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelavoyan committed Jan 1, 2024
1 parent 159aaf0 commit 7c0eac5
Show file tree
Hide file tree
Showing 27 changed files with 308 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ package io.velocitycareerlabs.api.entities.error
import io.velocitycareerlabs.impl.extensions.toJsonObject
import org.json.JSONObject

class VCLError(): Error() {
class VCLError(
): Error() {
var payload: String? = null
var error: String? = null
var errorCode: String = VCLErrorCode.SdkError.value
Expand All @@ -19,36 +20,29 @@ class VCLError(): Error() {

constructor(
error: String? = null,
errorCode: VCLErrorCode = VCLErrorCode.SdkError,
errorCode: String = VCLErrorCode.SdkError.value,
message: String? = null,
statusCode: Int? = null,
) : this() {
this.error = error
this.errorCode = errorCode.value
this.errorCode = errorCode
this.message = message
this.statusCode = statusCode
}

constructor(
payload: String?,
errorCode: VCLErrorCode = VCLErrorCode.SdkError
): this() {
constructor(payload: String?, errorCode: String? = null): this() {
val payloadJson = payload?.toJsonObject()
this.payload = payload
this.error = payloadJson?.optString(KeyError)
this.errorCode = payloadJson?.optString(KeyErrorCode) ?: errorCode.value
this.errorCode = errorCode ?: payloadJson?.optString(KeyErrorCode) ?: VCLErrorCode.SdkError.value
this.message = payloadJson?.optString(KeyMessage)
this.statusCode = payloadJson?.optInt(KeyStatusCode)
}

constructor(
exception: Exception,
errorCode: VCLErrorCode = VCLErrorCode.SdkError,
statusCode: Int? = null
): this() {
constructor(exception: Exception, statusCode: Int? = null): this() {
this.payload = null
this.error = null
this.errorCode = errorCode.value
this.errorCode = VCLErrorCode.SdkError.value
this.message = exception.toString()
this.statusCode = statusCode
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ internal object VclBlocksProvider {
keyServiceUrls
)
}
?: throw VCLError(errorCode = VCLErrorCode.RemoteServicesUrlsNotFount)
?: throw VCLError(errorCode = VCLErrorCode.RemoteServicesUrlsNotFount.value)
}

VCLCryptoServiceType.Injected -> cryptoServicesDescriptor.injectedCryptoServicesDescriptor?.keyService?.let { keyService ->
return keyService
} ?: throw VCLError(errorCode = VCLErrorCode.InjectedServicesNotFount)
} ?: throw VCLError(errorCode = VCLErrorCode.InjectedServicesNotFount.value)
}
}

Expand All @@ -89,11 +89,11 @@ internal object VclBlocksProvider {
jwtSignServiceUrl
)
}
?: throw VCLError(errorCode = VCLErrorCode.RemoteServicesUrlsNotFount)
?: throw VCLError(errorCode = VCLErrorCode.RemoteServicesUrlsNotFount.value)

VCLCryptoServiceType.Injected -> cryptoServicesDescriptor.injectedCryptoServicesDescriptor?.jwtSignService?.let { jwtSignService ->
return jwtSignService
} ?: throw VCLError(errorCode = VCLErrorCode.InjectedServicesNotFount)
} ?: throw VCLError(errorCode = VCLErrorCode.InjectedServicesNotFount.value)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.velocitycareerlabs.api.entities.error.VCLError
import io.velocitycareerlabs.impl.data.infrastructure.network.Request
import io.velocitycareerlabs.impl.domain.repositories.SubmissionRepository
import io.velocitycareerlabs.impl.domain.infrastructure.network.NetworkService
import io.velocitycareerlabs.impl.extensions.toJsonObject
import org.json.JSONObject
import java.lang.Exception

Expand All @@ -34,9 +35,8 @@ internal class SubmissionRepositoryImpl(
completionBlock = { result ->
result.handleResult({ submissionResponse ->
try {
val jsonObj = JSONObject(submissionResponse.payload)
val submissionResult =
parse(jsonObj, submission.jti, submission.submissionId)
val jsonObj = submissionResponse.payload.toJsonObject()
val submissionResult = parse(jsonObj, submission.jti, submission.submissionId)
completionBlock(VCLResult.Success(submissionResult))
} catch (ex: Exception) {
completionBlock(VCLResult.Failure(VCLError(ex)))
Expand All @@ -51,13 +51,13 @@ internal class SubmissionRepositoryImpl(
}

private fun parse(
jsonObj: JSONObject,
jsonObj: JSONObject?,
jti: String,
submissionId: String
): VCLSubmissionResult {
val exchangeJsonObj = jsonObj.optJSONObject(VCLSubmissionResult.KeyExchange)
val exchangeJsonObj = jsonObj?.optJSONObject(VCLSubmissionResult.KeyExchange)
return VCLSubmissionResult(
sessionToken = VCLToken(jsonObj.optString(VCLSubmissionResult.KeyToken)),
sessionToken = VCLToken(jsonObj?.optString(VCLSubmissionResult.KeyToken) ?: ""),
exchange = parseExchange(exchangeJsonObj),
jti = jti,
submissionId = submissionId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ internal class CredentialIssuerVerifierImpl(
if (jwtCredentials.isEmpty()) /* nothing to verify */ {
completionBlock(VCLResult.Success(true))
} else if (finalizeOffersDescriptor.serviceTypes.all.isEmpty()) {
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered)))
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered.value)))
} else {
var globalError: VCLError? = null
val completableFutures = jwtCredentials.map { jwtCredential ->
Expand All @@ -66,11 +66,11 @@ internal class CredentialIssuerVerifierImpl(
}
} ?: run {
globalError =
VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered)
VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered.value)
}
} ?: run {
globalError =
VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered)
VCLError(errorCode = VCLErrorCode.CredentialTypeNotRegistered.value)
}
}
}
Expand Down Expand Up @@ -124,7 +124,7 @@ internal class CredentialIssuerVerifierImpl(
completionBlock(VCLResult.Success(true))
} else {
onError(
VCLError(errorCode = VCLErrorCode.IssuerRequiresIdentityPermission),
VCLError(errorCode = VCLErrorCode.IssuerRequiresIdentityPermission.value),
completionBlock
)
}
Expand Down Expand Up @@ -152,27 +152,27 @@ internal class CredentialIssuerVerifierImpl(
onError(
VCLError(
payload = error.payload,
errorCode = VCLErrorCode.InvalidCredentialSubjectContext
errorCode = VCLErrorCode.InvalidCredentialSubjectContext.value
),
completionBlock
)
})
}
} ?: run {
onError(
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext),
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext.value),
completionBlock
)
}
} ?: run {
onError(
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext),
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext.value),
completionBlock
)
}
} else {
onError(
VCLError(errorCode = VCLErrorCode.IssuerUnexpectedPermissionFailure),
VCLError(errorCode = VCLErrorCode.IssuerUnexpectedPermissionFailure.value),
completionBlock
)
}
Expand Down Expand Up @@ -226,7 +226,7 @@ internal class CredentialIssuerVerifierImpl(

if (completeContexts.isEmpty()) {
onError(
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext),
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectContext.value),
completionBlock = completionBlock
)
} else {
Expand Down Expand Up @@ -254,11 +254,11 @@ internal class CredentialIssuerVerifierImpl(
isCredentialVerified = true
} else {
globalError =
VCLError(errorCode = VCLErrorCode.IssuerRequiresNotaryPermission)
VCLError(errorCode = VCLErrorCode.IssuerRequiresNotaryPermission.value)
}
} ?: run {
globalError =
VCLError(errorCode = VCLErrorCode.IssuerRequiresNotaryPermission)
VCLError(errorCode = VCLErrorCode.IssuerRequiresNotaryPermission.value)
}
} ?: run {
// When K is null, the credential will pass these checks:
Expand All @@ -276,12 +276,12 @@ internal class CredentialIssuerVerifierImpl(
completionBlock(
VCLResult.Failure(
globalError
?: VCLError(errorCode = VCLErrorCode.IssuerUnexpectedPermissionFailure)
?: VCLError(errorCode = VCLErrorCode.IssuerUnexpectedPermissionFailure.value)
)
)
} ?: run {
onError(
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectType),
VCLError(errorCode = VCLErrorCode.InvalidCredentialSubjectType.value),
completionBlock = completionBlock
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class CredentialManifestByDeepLinkVerifierImpl: CredentialManifestByDeepLinkVeri
completionBlock(VCLResult.Success(true))
} else {
VCLLog.e(TAG, "credential manifest: ${credentialManifest.jwt.encodedJwt} \ndeepLink: ${deepLink.value}")
completionBlock((VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedRequestIssuerDid))))
completionBlock((VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedRequestIssuerDid.value))))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class CredentialsByDeepLinkVerifierImpl: CredentialsByDeepLinkVerifier {
) {
jwtCredentials.find { it.iss != deepLink.did }?.let { mismatchedCredential ->
VCLLog.e(TAG, "mismatched credential: ${mismatchedCredential.encodedJwt} \ndeepLink: ${deepLink.value}")
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedCredentialIssuerDid)))
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedCredentialIssuerDid.value)))
} ?: run {
completionBlock(VCLResult.Success(true))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class OffersByDeepLinkVerifierImpl: OffersByDeepLinkVerifier {
) {
offers.all.find { it.issuerId != deepLink.did }?.let { mismatchedOffer ->
VCLLog.e(TAG, "mismatched offer: ${mismatchedOffer.payload} \ndeepLink: ${deepLink.value}")
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedOfferIssuerDid)))
completionBlock(VCLResult.Failure(VCLError(errorCode = VCLErrorCode.MismatchedOfferIssuerDid.value)))
} ?: run {
completionBlock(VCLResult.Success(true))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class PresentationRequestByDeepLinkVerifierImpl: PresentationRequestByDeepLinkVe
} else {
VCLLog.e(TAG, "presentation request: ${presentationRequest.jwt.encodedJwt} \ndeepLink: ${deepLink.value}")
completionBlock(VCLResult.Failure(
VCLError(errorCode = VCLErrorCode.MismatchedPresentationRequestInspectorDid)
VCLError(errorCode = VCLErrorCode.MismatchedPresentationRequestInspectorDid.value)
))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@ class DeepLinkMocks {

const val OpenidInitiateIssuanceStrDev = "openid-initiate-issuance://?issuer=$Issuer"

const val InspectorDid = "did:ion:EiByBvq95tfmhl41DOxJeaa26HjSxAUoz908PITFwMRDNA"
const val InspectorDid = "did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692"

const val PresentationRequestVendorOriginContext =
"{\"SubjectKey\":{\"BusinessUnit\":\"ZC\",\"KeyCode\":\"54514480\"},\"Token\":\"832077a4\"}"

var PresentationRequestRequestDecodedUriStr =
"https://agent.velocitycareerlabs.io/api/holder/v0.6/org/$InspectorDid/inspect/get-presentation-request?id=62e0e80c5ebfe73230b0becc&inspectorDid=${InspectorDid.encode()}&vendorOriginContext=%7B%22SubjectKey%22%3A%7B%22BusinessUnit%22%3A%22ZC%22,%22KeyCode%22%3A%2254514480%22%7D,%22Token%22%3A%22832077a4%22%7D".decode()
"https://agent.velocitycareerlabs.io/api/holder/v0.6/org/$InspectorDid/inspect/get-presentation-request?id=62e0e80c5ebfe73230b0becc&inspectorDid=${InspectorDid}&vendorOriginContext=%7B%22SubjectKey%22%3A%7B%22BusinessUnit%22%3A%22ZC%22,%22KeyCode%22%3A%2254514480%22%7D,%22Token%22%3A%22832077a4%22%7D".decode()

const val PresentationRequestRequestUriStr =
"https%3A%2F%2Fagent.velocitycareerlabs.io%2Fapi%2Fholder%2Fv0.6%2Forg%2Fdid%3Aion%3AEiByBvq95tfmhl41DOxJeaa26HjSxAUoz908PITFwMRDNA%2Finspect%2Fget-presentation-request%3Fid%3D62e0e80c5ebfe73230b0becc&inspectorDid=did%3Aion%3AEiByBvq95tfmhl41DOxJeaa26HjSxAUoz908PITFwMRDNA&vendorOriginContext=%7B%22SubjectKey%22%3A%7B%22BusinessUnit%22%3A%22ZC%22,%22KeyCode%22%3A%2254514480%22%7D,%22Token%22%3A%22832077a4%22%7D"
"https%3A%2F%2Fagent.velocitycareerlabs.io%2Fapi%2Fholder%2Fv0.6%2Forg%2Fdid%3Avelocity%3A0xd4df29726d500f9b85bc6c7f1b3c021f16305692%2Finspect%2Fget-presentation-request%3Fid%3D62e0e80c5ebfe73230b0becc%26inspectorDid%3Ddid%3Avelocity%3A0xd4df29726d500f9b85bc6c7f1b3c021f16305692%26vendorOriginContext%3D%7B%22SubjectKey%22%3A%7B%22BusinessUnit%22%3A%22ZC%22%2C%22KeyCode%22%3A%2254514480%22%7D%2C%22Token%22%3A%22832077a4%22%7D"

const val PresentationRequestDeepLinkDevNetStr =
"$DevNetProtocol://inspect?request_uri=$PresentationRequestRequestUriStr"
Expand All @@ -42,13 +42,13 @@ class DeepLinkMocks {
const val PresentationRequestDeepLinkMainNetStr =
"$MainNetProtocol://inspect?request_uri=$PresentationRequestRequestUriStr"

const val IssuerDid = "did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692"
const val IssuerDid = "did:ion:EiApMLdMb4NPb8sae9-hXGHP79W1gisApVSE80USPEbtJA"

const val CredentialManifestRequestDecodedUriStr =
"https://devagent.velocitycareerlabs.io/api/holder/v0.6/org/$IssuerDid/issue/get-credential-manifest?id=611b5836e93d08000af6f1bc&credential_types=PastEmploymentPosition&issuerDid=did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692"
"https://devagent.velocitycareerlabs.io/api/holder/v0.6/org/$IssuerDid/issue/get-credential-manifest?id=611b5836e93d08000af6f1bc&credential_types=PastEmploymentPosition&issuerDid=$IssuerDid"

const val CredentialManifestRequestUriStr =
"https%3A%2F%2Fdevagent.velocitycareerlabs.io%2Fapi%2Fholder%2Fv0.6%2Forg%2Fdid%3Avelocity%3A0xd4df29726d500f9b85bc6c7f1b3c021f16305692%2Fissue%2Fget-credential-manifest%3Fid%3D611b5836e93d08000af6f1bc%26credential_types%3DPastEmploymentPosition%26issuerDid%3Ddid%3Avelocity%3A0xd4df29726d500f9b85bc6c7f1b3c021f16305692"
"https%3A%2F%2Fdevagent.velocitycareerlabs.io%2Fapi%2Fholder%2Fv0.6%2Forg%2Fdid%3Aion%3AEiApMLdMb4NPb8sae9-hXGHP79W1gisApVSE80USPEbtJA%2Fissue%2Fget-credential-manifest%3Fid%3D611b5836e93d08000af6f1bc%26credential_types%3DPastEmploymentPosition%26issuerDid%3Ddid%3Aion%3AEiApMLdMb4NPb8sae9-hXGHP79W1gisApVSE80USPEbtJA"

const val CredentialManifestDeepLinkDevNetStr = "$DevNetProtocol://issue?request_uri=$CredentialManifestRequestUriStr"
const val CredentialManifestDeepLinkTestNetStr = "$TestNetProtocol://issue?request_uri=$CredentialManifestRequestUriStr"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,6 @@ class PresentationRequestMocks {
const val EncodedPresentationRequestResponse =
"{\"presentation_request\":\"$EncodedPresentationRequest\"}"

const val PresentationRequestJwtDecodedHeaderJson =
"{ \"typ\": \"JWT\", \"kid\": \"did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692#key-1\", \"alg\": \"ES256K\" }"

const val PresentationRequestJwtDecodedPayloadJson =
"{ \"exchange_id\": \"60ec1f766d274e00086748ca\", \"metadata\": { \"client_name\": \"Microsoft Corporation\", \"logo_uri\": \"https://agsol.com/wp-content/uploads/2018/09/new-microsoft-logo-SIZED-SQUARE.jpg\", \"tos_uri\": \"https://www.velocityexperiencecenter.com/terms-and-conditions-vnf\", \"max_retention_period\": \"6m\" }, \"presentation_definition\": { \"id\": \"60ec1f766d274e00086748ca.60ec143e6d274e00086748bc\", \"purpose\": \"Id Check\", \"format\": { \"jwt_vp\": { \"alg\": [ \"secp256k1\" ] } }, \"input_descriptors\": [ { \"id\": \"IdDocument\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/id-document.v1.schema.json\" } ] }, { \"id\": \"Email\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/email.schema.json\" } ] }, { \"id\": \"Phone\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/phone.schema.json\" } ] }, { \"id\": \"PastEmploymentPosition\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/past-employment-position.schema.json\" } ] }, { \"id\": \"CurrentEmploymentPosition\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/current-employment-position.schema.json\" } ] }, { \"id\": \"EducationDegree\", \"schema\": [ { \"uri\": \"https://devservices.velocitycareerlabs.io/api/v0.6/schemas/education-degree.schema.json\" } ] } ] }, \"iss\": \"did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692\", \"iat\": 1626087286, \"exp\": 1626692086, \"nbf\": 1626087286 }"

const val PresentationRequestJwtSignature =
"BSQnMNNJyicCsh6zeh7k5GBHC6T9QgPNV4SHhSXsnz3sBJMwNBFz7v4axLCoCiKHtIxNj5"

val PresentationRequestJwt = VCLJwt(
encodedJwt = EncodedPresentationRequest
)
Expand Down
Loading

0 comments on commit 7c0eac5

Please sign in to comment.