Skip to content

Commit eec72e2

Browse files
authored
Merge pull request #49 from session-foundation/unmock-extradata
fix: use extradata for proconfig & features
2 parents d44a967 + 03f96de commit eec72e2

File tree

12 files changed

+87
-98
lines changed

12 files changed

+87
-98
lines changed

include/pro/pro.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_PROVIDER v);
2020
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_STATUS v);
2121
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PLAN v);
2222
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v);
23-
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT v);
23+
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT v);
2424
std::string_view proBackendEnumToString(session::ProFeaturesForMsgStatus v);
2525

2626
template <typename T>
@@ -193,7 +193,7 @@ class ProWrapper : public Napi::ObjectWrap<ProWrapper> {
193193
auto master_privkey_decoded = from_hex(master_privkey);
194194
auto rotating_privkey_decoded = from_hex(rotating_privkey);
195195

196-
std::string json = pro_backend::GetProProofRequest::build_to_json(
196+
std::string json = pro_backend::GenerateProProofRequest::build_to_json(
197197
static_cast<uint8_t>(requestVersion.Int32Value()),
198198
to_span(master_privkey_decoded),
199199
to_span(rotating_privkey_decoded),
@@ -267,7 +267,7 @@ class ProWrapper : public Napi::ObjectWrap<ProWrapper> {
267267

268268
auto master_privkey_decoded = from_hex(master_privkey);
269269

270-
auto json = pro_backend::GetProStatusRequest::build_to_json(
270+
auto json = pro_backend::GetProDetailsRequest::build_to_json(
271271
static_cast<uint8_t>(requestVersion.Int32Value()),
272272
to_span(master_privkey_decoded),
273273
unix_ts_ms,

include/pro/types.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ struct toJs_impl<session::Envelope> {
4444

4545
obj["timestampMs"] = toJs(env, envelope.timestamp.count());
4646
obj["source"] = envelope.source.size() ? toJs(env, envelope.source) : env.Null();
47-
obj["proSigHex"] =
48-
envelope.pro_sig.size() ? toJs(env, oxenc::to_hex(envelope.pro_sig)) : env.Null();
4947

5048
return obj;
5149
}
@@ -75,8 +73,7 @@ struct toJs_impl<session::DecodedPro> {
7573
toJs(env,
7674
decoded_pro.status == ProStatus::InvalidProBackendSig ? "InvalidProBackendSig"
7775
: decoded_pro.status == ProStatus::InvalidUserSig ? "InvalidUserSig"
78-
: decoded_pro.status == ProStatus::Valid ? "Valid"
79-
: "Expired");
76+
: "Valid");
8077
obj["proProof"] = toJs(env, decoded_pro.proof);
8178
obj["proFeaturesBitset"] = proFeaturesToJsBitset(env, decoded_pro.features);
8279

include/user_config.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ class UserConfigWrapper : public ConfigBaseImpl, public Napi::ObjectWrap<UserCon
1616
explicit UserConfigWrapper(const Napi::CallbackInfo& info);
1717

1818
private:
19-
// FIXME: wrap those in the extra data field of UserConfig instead
20-
std::optional<config::ProConfig> pro_config;
21-
int64_t pro_user_features = 0;
22-
2319
config::UserProfile& config{get_config<config::UserProfile>()};
2420

2521
Napi::Value getPriority(const Napi::CallbackInfo& info);
@@ -42,8 +38,11 @@ class UserConfigWrapper : public ConfigBaseImpl, public Napi::ObjectWrap<UserCon
4238

4339
Napi::Value getProConfig(const Napi::CallbackInfo& info);
4440
void setProConfig(const Napi::CallbackInfo& info);
41+
Napi::Value removeProConfig(const Napi::CallbackInfo& info);
42+
4543
Napi::Value getProFeaturesBitset(const Napi::CallbackInfo& info);
46-
void setProFeaturesBitset(const Napi::CallbackInfo& info);
44+
void setProBadge(const Napi::CallbackInfo& info);
45+
void setAnimatedAvatar(const Napi::CallbackInfo& info);
4746

4847
Napi::Value generateProMasterKey(const Napi::CallbackInfo& info);
4948
Napi::Value generateRotatingPrivKeyHex(const Napi::CallbackInfo& info);

include/utilities.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -413,11 +413,10 @@ template <std::size_t N>
413413
std::array<uint8_t, N> from_hex_to_array(std::string x) {
414414
std::string as_hex = oxenc::from_hex(x);
415415
if (as_hex.size() != N) {
416-
throw std::invalid_argument(
417-
fmt::format(
418-
"from_hex_to_array: Decoded hex size mismatch: expected {}, got {}",
419-
N,
420-
as_hex.size()));
416+
throw std::invalid_argument(fmt::format(
417+
"from_hex_to_array: Decoded hex size mismatch: expected {}, got {}",
418+
N,
419+
as_hex.size()));
421420
}
422421

423422
std::array<uint8_t, N> result;
@@ -433,15 +432,16 @@ std::vector<unsigned char> from_base64_to_vector(std::string_view x);
433432
// Concept to match containers with a size() method
434433
template <typename T>
435434
concept HasSize = requires(T t) {
436-
{t.size()}->std::convertible_to<size_t>;
435+
{
436+
t.size()
437+
} -> std::convertible_to<size_t>;
437438
};
438439

439440
template <HasSize T>
440441
void assert_length(const T& x, size_t n, std::string_view base_identifier) {
441442
if (x.size() != n) {
442-
throw std::invalid_argument(
443-
fmt::format(
444-
"assert_length: expected {}, got {} for {}", n, x.size(), base_identifier));
443+
throw std::invalid_argument(fmt::format(
444+
"assert_length: expected {}, got {} for {}", n, x.size(), base_identifier));
445445
}
446446
}
447447

src/constants.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
4040
env,
4141
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
4242
.platform_account);
43-
pro_provider_nil["refund_url"] = toJs(
43+
pro_provider_nil["refund_support_url"] = toJs(
4444
env,
4545
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
46-
.refund_url);
47-
pro_provider_nil["refund_after_platform_deadline_url"] = toJs(
46+
.refund_support_url);
47+
pro_provider_nil["refund_platform_url"] = toJs(
4848
env,
4949
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
50-
.refund_after_platform_deadline_url);
50+
.refund_platform_url);
5151
pro_provider_nil["update_subscription_url"] = toJs(
5252
env,
5353
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
@@ -82,16 +82,16 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
8282
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
8383
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
8484
.platform_account);
85-
pro_provider_google["refund_url"] =
85+
pro_provider_google["refund_support_url"] =
8686
toJs(env,
8787
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
8888
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
89-
.refund_url);
90-
pro_provider_google["refund_after_platform_deadline_url"] =
89+
.refund_support_url);
90+
pro_provider_google["refund_platform_url"] =
9191
toJs(env,
9292
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
9393
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
94-
.refund_after_platform_deadline_url);
94+
.refund_platform_url);
9595
pro_provider_google["update_subscription_url"] =
9696
toJs(env,
9797
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
@@ -129,16 +129,16 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
129129
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
130130
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
131131
.platform_account);
132-
pro_provider_ios["refund_url"] =
132+
pro_provider_ios["refund_support_url"] =
133133
toJs(env,
134134
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
135135
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
136-
.refund_url);
137-
pro_provider_ios["refund_after_platform_deadline_url"] =
136+
.refund_support_url);
137+
pro_provider_ios["refund_platform_url"] =
138138
toJs(env,
139139
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
140140
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
141-
.refund_after_platform_deadline_url);
141+
.refund_platform_url);
142142
pro_provider_ios["update_subscription_url"] =
143143
toJs(env,
144144
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA

src/encrypt_decrypt/encrypt_decrypt.cpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -636,9 +636,8 @@ Napi::Value MultiEncryptWrapper::decryptForCommunity(const Napi::CallbackInfo& i
636636

637637
auto contentOrEnvelope =
638638
extractContentOrEnvelope(obj, "decryptForCommunity.obj.contentOrEnvelope");
639-
decrypted.push_back(
640-
session::decode_for_community(
641-
contentOrEnvelope, nowMs, proBackendPubkeyHex));
639+
decrypted.push_back(session::decode_for_community(
640+
contentOrEnvelope, nowMs, proBackendPubkeyHex));
642641
decryptedServerIds.push_back(serverId);
643642

644643
} catch (const std::exception& e) {
@@ -661,9 +660,6 @@ Napi::Value MultiEncryptWrapper::decryptForCommunity(const Napi::CallbackInfo& i
661660
to_insert.Set("contentPlaintextUnpadded", toJs(info.Env(), d.content_plaintext));
662661
to_insert.Set("serverId", toJs(info.Env(), decryptedServerIds[i]));
663662

664-
to_insert.Set(
665-
"proSigHex",
666-
d.pro_sig ? toJs(info.Env(), oxenc::to_hex(*d.pro_sig)) : info.Env().Null());
667663
to_insert.Set("decodedPro", d.pro ? toJs(info.Env(), d.pro) : info.Env().Null());
668664

669665
ret.Set(i, to_insert);
@@ -731,9 +727,8 @@ Napi::Value MultiEncryptWrapper::decryptFor1o1(const Napi::CallbackInfo& info) {
731727

732728
auto envelopePayload =
733729
extractEnvelopePayload(obj, "decryptFor1o1.obj.envelopePayload");
734-
decrypted.push_back(
735-
session::decode_envelope(
736-
keys, envelopePayload, nowMs, proBackendPubkeyHex));
730+
decrypted.push_back(session::decode_envelope(
731+
keys, envelopePayload, nowMs, proBackendPubkeyHex));
737732
decryptedMessageHashes.push_back(messageHash);
738733
} catch (const std::exception& e) {
739734
log::warning(
@@ -835,9 +830,8 @@ Napi::Value MultiEncryptWrapper::decryptForGroup(const Napi::CallbackInfo& info)
835830

836831
auto envelopePayload =
837832
extractEnvelopePayload(obj, "decryptForGroup.obj.envelopePayload");
838-
decrypted.push_back(
839-
session::decode_envelope(
840-
keys, envelopePayload, nowMs, proBackendPubkeyHex));
833+
decrypted.push_back(session::decode_envelope(
834+
keys, envelopePayload, nowMs, proBackendPubkeyHex));
841835
decryptedMessageHashes.push_back(messageHash);
842836
} catch (const std::exception& e) {
843837
log::warning(

src/pro/pro.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v) {
4949
UNREACHABLE();
5050
}
5151

52-
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT v) {
52+
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT v) {
5353
switch (v) {
54-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_SUCCESS: return "SUCCESS";
55-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_GENERIC_ERROR: return "GENERIC_ERROR";
56-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT:
57-
throw std::invalid_argument("SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT");
54+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_SUCCESS: return "SUCCESS";
55+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_GENERIC_ERROR: return "GENERIC_ERROR";
56+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_COUNT:
57+
throw std::invalid_argument("SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT");
5858
}
5959
UNREACHABLE();
6060
}

src/user_config.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22

33
#include <napi.h>
44

5-
#include <iostream>
6-
75
#include "base_config.hpp"
8-
#include "oxen/log.hpp"
96
#include "oxenc/hex.h"
107
#include "pro/types.hpp"
118
#include "profile_pic.hpp"
12-
#include "session/config/base.hpp"
139
#include "session/config/user_profile.hpp"
1410
#include "session/ed25519.hpp"
1511
#include "utilities.hpp"
@@ -107,8 +103,9 @@ void UserConfigWrapper::Init(Napi::Env env, Napi::Object exports) {
107103
InstanceMethod("setNoteToSelfExpiry", &UserConfigWrapper::setNoteToSelfExpiry),
108104
InstanceMethod("getProConfig", &UserConfigWrapper::getProConfig),
109105
InstanceMethod("setProConfig", &UserConfigWrapper::setProConfig),
110-
InstanceMethod(
111-
"setProFeaturesBitset", &UserConfigWrapper::setProFeaturesBitset),
106+
InstanceMethod("removeProConfig", &UserConfigWrapper::removeProConfig),
107+
InstanceMethod("setProBadge", &UserConfigWrapper::setProBadge),
108+
InstanceMethod("setAnimatedAvatar", &UserConfigWrapper::setAnimatedAvatar),
112109
InstanceMethod(
113110
"getProFeaturesBitset", &UserConfigWrapper::getProFeaturesBitset),
114111
InstanceMethod(
@@ -266,11 +263,8 @@ void UserConfigWrapper::setNoteToSelfExpiry(const Napi::CallbackInfo& info) {
266263

267264
Napi::Value UserConfigWrapper::getProConfig(const Napi::CallbackInfo& info) {
268265
return wrapResult(info, [&] {
269-
// TODO fixme once extra_data is implemented
270-
271-
oxen::log::warning(cat, "getProConfig() is not wrapped to libsession");
272-
if (this->pro_config.has_value()) {
273-
return toJs(info.Env(), this->pro_config);
266+
if (config.get_pro_config().has_value()) {
267+
return toJs(info.Env(), config.get_pro_config().value());
274268
}
275269

276270
return info.Env().Null();
@@ -285,38 +279,43 @@ void UserConfigWrapper::setProConfig(const Napi::CallbackInfo& info) {
285279

286280
session::config::ProConfig pro_config =
287281
pro_config_from_object(pro_config_js.As<Napi::Object>());
288-
// TODO fixme once extra_data is implemented
289282

290-
// config.set_pro_config(pro_config);
291-
this->pro_config = pro_config;
283+
config.set_pro_config(pro_config);
292284
});
293285
}
294286

295-
Napi::Value UserConfigWrapper::getProFeaturesBitset(const Napi::CallbackInfo& info) {
287+
Napi::Value UserConfigWrapper::removeProConfig(const Napi::CallbackInfo& info) {
296288
return wrapResult(info, [&] {
297-
// TODO fixme once extra_data is implemented
298-
// config.get_pro_features_bitset();
299-
oxen::log::warning(cat, "getProFeaturesBitset() is not wrapped to libsession");
300-
return proFeaturesToJsBitset(info.Env(), this->pro_user_features);
289+
assertInfoLength(info, 0);
290+
291+
return config.remove_pro_config();
301292
});
302293
}
303294

304-
void UserConfigWrapper::setProFeaturesBitset(const Napi::CallbackInfo& info) {
295+
Napi::Value UserConfigWrapper::getProFeaturesBitset(const Napi::CallbackInfo& info) {
296+
return wrapResult(
297+
info, [&] { return proFeaturesToJsBitset(info.Env(), config.get_pro_features()); });
298+
}
299+
300+
void UserConfigWrapper::setProBadge(const Napi::CallbackInfo& info) {
305301
wrapExceptions(info, [&] {
306302
assertInfoLength(info, 1);
307-
auto pro_features = info[0];
308-
assertIsObject(info[0]);
309-
auto obj = info[0].As<Napi::Object>();
310-
assertIsBigint(obj.Get("proFeaturesBitset"), "UserConfigWrapper::setProFeaturesBitset");
303+
assertIsBoolean(info[0], "setProBadge");
304+
305+
auto enabled = toCppBoolean(info[0], "UserConfigWrapper::setProBadge");
311306

312-
auto pro_user_features_js = obj.Get("proFeaturesBitset");
313-
auto pro_user_features_cpp = toCppIntegerB(
314-
pro_user_features_js, "UserConfigWrapper::setProFeaturesBitset", false);
307+
config.set_pro_badge(enabled);
308+
});
309+
}
310+
311+
void UserConfigWrapper::setAnimatedAvatar(const Napi::CallbackInfo& info) {
312+
wrapExceptions(info, [&] {
313+
assertInfoLength(info, 1);
314+
assertIsBoolean(info[0], "setAnimatedAvatar");
315315

316-
// TODO fixme once extra_data is implemented
316+
auto enabled = toCppBoolean(info[0], "UserConfigWrapper::setAnimatedAvatar");
317317

318-
// config.set_pro_features_bitset(pro_user_features_cpp);
319-
this->pro_user_features = pro_user_features_cpp;
318+
config.set_animated_avatar(enabled);
320319
});
321320
}
322321

types/multi_encrypt/multi_encrypt.d.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,20 @@ declare module 'libsession_util_nodejs' {
6161
type WithDecodedPro = {
6262
decodedPro: DecodedPro | null;
6363
};
64-
type WithProSigHex = {
65-
/**
66-
* HexString
67-
*/
68-
proSigHex: string | null;
69-
};
7064

7165
type Envelope = {
7266
timestampMs: number;
7367
/**
7468
* HexString, 33 bytes, 66 chars
7569
*/
7670
source: string | null;
77-
/**
78-
* HexString
79-
*/
80-
proSigHex: string | null;
8171
};
8272

8373
type WithEnvelope = {
74+
/**
75+
* The envelope payload, if present. For communities, the envelope is not currently included, but will eventually be.
76+
* We want to support both cases, hence why we use this type for decryptForCommunity, instead of WithNonNullableEnvelope
77+
*/
8478
envelope: Envelope | null;
8579
};
8680

0 commit comments

Comments
 (0)