Files
sonr/pkl/webauth.pkl
T
Prad NukalaandGitHub 4f2d342649 feature/ipfs vault allocation (#8)
* refactor: move constants to genesis.proto

* feat: add ipfs_active flag to genesis state

* feat: add IPFS connection initialization to keeper

* feat: add testnet process-compose

* refactor: rename sonr-testnet docker image to sonr-runner

* refactor: update docker-vm-release workflow to use 'latest' tag

* feat: add permission to workflows

* feat: add new service chain execution

* feat: add abstract vault class to pkl

* feat: use jetpackio/devbox image for runner

* feat: introduce dwn for local service worker

* refactor: remove unnecessary dockerfile layers

* refactor(deploy): Update Dockerfile to copy go.mod and go.sum from the parent directory

* build: move Dockerfile to root directory

* build: Add Dockerfile for deployment

* feat: Update Dockerfile to work with Go project in parent directory

* build: Update docker-compose.yaml to use relative paths

* feat: Update docker-compose to work with new image and parent git directory

* refactor: remove unnecessary test script

* <no value>

* feat: add test_node script for running node tests

* feat: add IPFS cluster to testnet

* feat: add docker image for sonr-runner

* fix: typo in export path

* feat(did): Add Localhost Registration Enabled Genesis Option

* feat: add support for Sqlite DB in vault

* feat: improve vault model JSON serialization

* feat: support querying HTMX endpoint for DID

* feat: Add primary key, unique, default, not null, auto increment, and foreign key field types

* feat: Add PublicKey model in pkl/vault.pkl

* feat: add frontend server

* refactor: move dwn.wasm to vfs directory

* feat(frontend): remove frontend server implementation

* feat: Add a frontend server and web auth protocol

* feat: implement new key types for MPC and ZK proofs

* fix: Update enum types and DefaultKeyInfos

* fix: correct typo in KeyAlgorithm enum

* feat(did): add attestation format validation

* feat: Add x/did/builder/extractor.go

* feat: Update JWK parsing in x/did/builder/extractor.go

* feat: Use github.com/onsonr/sonr/x/did/types package

* feat: Extract and format public keys from WebAuthn credentials

* feat: Introduce a new `mapToJWK` function to convert a map to a `types.JWK` struct

* feat: add support for extracting JWK public keys

* feat: remove VerificationMethod struct

* refactor: extract public key extraction logic

* feat: add helper functions to map COSECurveID to JWK curve names

* feat: pin initial vault
2024-09-07 18:12:58 -04:00

102 lines
5.2 KiB
Plaintext

@go.Package { name = "github.com/onsonr/sonr/gen/protocol" }
module protocol
import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl"
class CredentialCreation {
response: PublicKeyCredentialCreationOptions = new JsonField { name = "publicKey"; type = "PublicKeyCredentialCreationOptions" }
}
class CredentialAssertion {
response: PublicKeyCredentialRequestOptions = new JsonField { name = "publicKey"; type = "PublicKeyCredentialRequestOptions" }
}
class PublicKeyCredentialCreationOptions {
relyingParty: RelyingPartyEntity = new JsonField { name = "rp"; type = "RelyingPartyEntity" }
user: UserEntity = new JsonField { name = "user"; type = "UserEntity" }
challenge: URLEncodedBase64 = new JsonField { name = "challenge"; type = "URLEncodedBase64" }
parameters: Listing[CredentialParameter]? = new JsonField { name = "pubKeyCredParams"; type = "[]CredentialParameter" }
timeout: Int? = new JsonField { name = "timeout"; type = "int" }
credentialExcludeList: Listing[CredentialDescriptor]? = new JsonField { name = "excludeCredentials"; type = "[]CredentialDescriptor" }
authenticatorSelection: AuthenticatorSelection? = new JsonField { name = "authenticatorSelection"; type = "AuthenticatorSelection" }
hints: Listing[PublicKeyCredentialHints]? = new JsonField { name = "hints"; type = "[]PublicKeyCredentialHints" }
attestation: ConveyancePreference? = new JsonField { name = "attestation"; type = "ConveyancePreference" }
attestationFormats: Listing[AttestationFormat]? = new JsonField { name = "attestationFormats"; type = "[]AttestationFormat" }
extensions: AuthenticationExtensions? = new JsonField { name = "extensions"; type = "AuthenticationExtensions" }
}
class PublicKeyCredentialRequestOptions {
challenge: URLEncodedBase64 = new JsonField { name = "challenge"; type = "URLEncodedBase64" }
timeout: Int? = new JsonField { name = "timeout"; type = "int" }
relyingPartyID: String? = new JsonField { name = "rpId"; type = "string" }
allowedCredentials: Listing[CredentialDescriptor]? = new JsonField { name = "allowCredentials"; type = "[]CredentialDescriptor" }
userVerification: UserVerificationRequirement? = new JsonField { name = "userVerification"; type = "UserVerificationRequirement" }
hints: Listing[PublicKeyCredentialHints]? = new JsonField { name = "hints"; type = "[]PublicKeyCredentialHints" }
extensions: AuthenticationExtensions? = new JsonField { name = "extensions"; type = "AuthenticationExtensions" }
function getAllowedCredentialIDs(): Listing[Listing[Int8]] {
this.allowedCredentials?.map((credential) -> credential.credentialID) ?? Listing()
}
}
class CredentialDescriptor {
type: CredentialType = new JsonField { name = "type"; type = "CredentialType" }
credentialID: URLEncodedBase64 = new JsonField { name = "id"; type = "URLEncodedBase64" }
transport: Listing[AuthenticatorTransport]? = new JsonField { name = "transports"; type = "[]AuthenticatorTransport" }
attestationType: String? = new JsonField { name = "-"; type = "string" }
}
class CredentialParameter {
type: CredentialType = new JsonField { name = "type"; type = "CredentialType" }
algorithm: Int = new JsonField { name = "alg"; type = "int" }
}
typealias CredentialType = String
const PublicKeyCredentialType: CredentialType = "public-key"
typealias AuthenticationExtensions = Mapping[String, Dynamic]
class AuthenticatorSelection {
authenticatorAttachment: AuthenticatorAttachment? = new JsonField { name = "authenticatorAttachment"; type = "AuthenticatorAttachment" }
requireResidentKey: Boolean? = new JsonField { name = "requireResidentKey"; type = "bool" }
residentKey: ResidentKeyRequirement? = new JsonField { name = "residentKey"; type = "ResidentKeyRequirement" }
userVerification: UserVerificationRequirement? = new JsonField { name = "userVerification"; type = "UserVerificationRequirement" }
}
typealias ConveyancePreference = String
const PreferNoAttestation: ConveyancePreference = "none"
const PreferIndirectAttestation: ConveyancePreference = "indirect"
const PreferDirectAttestation: ConveyancePreference = "direct"
const PreferEnterpriseAttestation: ConveyancePreference = "enterprise"
typealias AttestationFormat = String
const AttestationFormatPacked: AttestationFormat = "packed"
const AttestationFormatTPM: AttestationFormat = "tpm"
const AttestationFormatAndroidKey: AttestationFormat = "android-key"
const AttestationFormatAndroidSafetyNet: AttestationFormat = "android-safetynet"
const AttestationFormatFIDOUniversalSecondFactor: AttestationFormat = "fido-u2f"
const AttestationFormatApple: AttestationFormat = "apple"
const AttestationFormatNone: AttestationFormat = "none"
typealias PublicKeyCredentialHints = String
const PublicKeyCredentialHintSecurityKey: PublicKeyCredentialHints = "security-key"
const PublicKeyCredentialHintClientDevice: PublicKeyCredentialHints = "client-device"
const PublicKeyCredentialHintHybrid: PublicKeyCredentialHints = "hybrid"
typealias Extensions = Dynamic
class ServerResponse {
status: ServerResponseStatus = new JsonField { name = "status"; type = "ServerResponseStatus" }
message: String = new JsonField { name = "errorMessage"; type = "string" }
}
typealias ServerResponseStatus = String
const StatusOk: ServerResponseStatus = "ok"
const StatusFailed= ServerResponseStatus = "failed"