get method
- AtKey atKey,
- {bool isDedicated = false,
- GetRequestOptions? getRequestOptions}
Get the value of AtKey.key from user's cloud secondary if AtKey.sharedBy is set. Otherwise looks up the key from local secondary.
If the key was stored with public access, set AtKey.metadata.isPublic
to true. If the key was shared with another atSign set AtKey.sharedWith
isDedicated
is currently ignored and will be removed in next major version
e.g alice is current atsign
llookup:phone@alice
var atKey = AtKey()..key='phone'
get(atKey);
llookup:public:phone@alice
var metaData = Metadata()..isPublic=true;
var atKey = AtKey()..key='phone'
..metadata=metaData
get(atKey);
lookup:phone@bob
var metaData = Metadata()..sharedWith='@bob';
var key = AtKey()..key='phone'
..metadata=metaData
get(key);
llookup:@alice:phone.persona@alice
var key = AtKey()..key='phone'
..sharedWith='@alice'
get(key);
llookup:@alice:phone@alice
var metaData = Metadata()..namespaceAware=false
var key = AtKey()..key='phone'
..sharedWith='@alice'
get(key);
plookup public phone number of @bob
plookup:phone@bob
var metadata = Metadata()..isPublic=true;
var publicPhoneKey = AtKey()..key = 'phone'
..sharedBy = '@bob'
..metadata = metadata;
get(publicPhoneKey);
@alice : update:@bob:phone.personal@alice
@bob : lookup:phone.persona@alice
var key = AtKey()..key='phone'
..sharedBy='@bob';
get(key);
lookup:public:phone@alice
var metaData = Metadata()..isPublic=true
..namespaceAware='false'
var key = AtKey()..key='phone'
..metadata=metaData
get(key);
Throws AtKeyException for the invalid key formed
Throws AtDecryptionException if fails to decrypt the value
Throws AtPrivateKeyNotFoundException if the encryption private key is not found to decrypt the value
Throws AtPublicKeyChangeException if the encryption public key used encrypt the value is different from the current encryption public key(at the time of decryption)
Throws SharedKeyNotFoundException if the shared key to decrypt the value is not found
Throws SelfKeyNotFoundException if the self encryption key is not found.
Throws AtClientException if the cloud secondary is invalid or not reachable
Implementation
@override
Future<AtValue> get(AtKey atKey,
{bool isDedicated = false, GetRequestOptions? getRequestOptions}) async {
Secondary? secondary;
try {
// validate the get request.
await AtClientValidation().validateAtKey(atKey);
// Get the verb builder for the atKey
var verbBuilder = GetRequestTransformer(this)
.transform(atKey, requestOptions: getRequestOptions);
// Execute the verb.
secondary = SecondaryManager.getSecondary(this, verbBuilder);
var getResponse = await secondary.executeVerb(verbBuilder);
// Return empty value if getResponse is null.
if (getResponse == null ||
getResponse.isEmpty ||
getResponse == 'data:null') {
return AtValue();
}
// Send AtKey and AtResponse to transform the response to AtValue.
var getResponseTuple = Tuple<AtKey, String>()
..one = atKey
..two = (getResponse);
// Transform the response and return
var atValue =
await GetResponseTransformer(this).transform(getResponseTuple);
return atValue;
} on AtException catch (e) {
var exceptionScenario = (secondary is LocalSecondary)
? ExceptionScenario.localVerbExecutionFailed
: ExceptionScenario.remoteVerbExecutionFailed;
e.stack(
AtChainedException(Intent.fetchData, exceptionScenario, e.message));
throw AtExceptionManager.createException(e);
}
}