mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-05 23:43:07 +00:00
* feat(credentials): store and processing generic app credentials * feat(credentials): separate module; minimal tests * more work * feat(credentials): check presence of idCredential in keystore and add only new membership groups * feat(credential): refactor, new data structure, dynamic add credential, filter * feat(credential): add filter, get credentials * feat(credential): encode/decode utility * feat(credential): sort groups, test credential retrieval/group merging * fix(credential): remove unnecessary order in sort * fix(credentials): fix vendor commits * fix(credential/rln): embed credential module in rln relay * feat(credentials/rln): use credentials API in rln-relay to store/read credentials * refactor(credentials): implement hasKeys for JsonNode * fix(credentials): restore connectToNodes call * refactor(credentials): remove unnecessary imports * refactor(credentials): add Res suffix to results * refactor(credential): moved save json to separate proc; added comments * feat(credentials): use appInfo * refactor(keystore): refactor code in a more structured module; address reviewers * fix(keystore): fix indentation
29 lines
1001 B
Nim
29 lines
1001 B
Nim
when (NimMajor, NimMinor) < (1, 4):
|
|
{.push raises: [Defect].}
|
|
else:
|
|
{.push raises: [].}
|
|
|
|
import
|
|
json,
|
|
stew/[results, byteutils],
|
|
./protocol_types
|
|
|
|
# Encodes a Membership credential to a byte sequence
|
|
proc encode*(credential: MembershipCredentials): seq[byte] =
|
|
# TODO: use custom encoding, avoid wordy json
|
|
var stringCredential: string
|
|
# NOTE: toUgly appends to the string, doesn't replace its contents
|
|
stringCredential.toUgly(%credential)
|
|
return toBytes(stringCredential)
|
|
|
|
# Decodes a byte sequence to a Membership credential
|
|
proc decode*(encodedCredential: seq[byte]): KeystoreResult[MembershipCredentials] =
|
|
# TODO: use custom decoding, avoid wordy json
|
|
try:
|
|
# we parse the json decrypted keystoreCredential
|
|
let jsonObject = parseJson(string.fromBytes(encodedCredential))
|
|
return ok(to(jsonObject, MembershipCredentials))
|
|
except JsonParsingError:
|
|
return err(KeystoreJsonError)
|
|
except Exception: #parseJson raises Exception
|
|
return err(KeystoreOsError) |