mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 13:08:42 +00:00
add user to signal database
This commit is contained in:
parent
b856859061
commit
e8e1061926
14 changed files with 643 additions and 157 deletions
|
|
@ -1,5 +1,3 @@
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'package:cv/cv.dart';
|
import 'package:cv/cv.dart';
|
||||||
|
|
||||||
class DbMessages extends CvModelBase {
|
class DbMessages extends CvModelBase {
|
||||||
|
|
@ -8,6 +6,9 @@ class DbMessages extends CvModelBase {
|
||||||
static const columnMessageId = "messageId";
|
static const columnMessageId = "messageId";
|
||||||
final messageId = CvField<int>(columnMessageId);
|
final messageId = CvField<int>(columnMessageId);
|
||||||
|
|
||||||
|
static const columnBody = "body";
|
||||||
|
final messageBody = CvField<int>(columnBody);
|
||||||
|
|
||||||
static const columnCreatedAt = "created_at";
|
static const columnCreatedAt = "created_at";
|
||||||
final createdAt = CvField<DateTime>(columnCreatedAt);
|
final createdAt = CvField<DateTime>(columnCreatedAt);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
const String dbName = 'connect.db';
|
const String dbName = 'twonly.db';
|
||||||
|
|
||||||
const int kVersion1 = 1;
|
const int kVersion1 = 1;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,7 @@ class Handshake_Register extends $pb.GeneratedMessage {
|
||||||
$core.List<$core.int>? signedPrekey,
|
$core.List<$core.int>? signedPrekey,
|
||||||
$core.List<$core.int>? signedPrekeySignature,
|
$core.List<$core.int>? signedPrekeySignature,
|
||||||
$fixnum.Int64? signedPrekeyId,
|
$fixnum.Int64? signedPrekeyId,
|
||||||
|
$fixnum.Int64? registrationId,
|
||||||
}) {
|
}) {
|
||||||
final $result = create();
|
final $result = create();
|
||||||
if (username != null) {
|
if (username != null) {
|
||||||
|
|
@ -224,6 +225,9 @@ class Handshake_Register extends $pb.GeneratedMessage {
|
||||||
if (signedPrekeyId != null) {
|
if (signedPrekeyId != null) {
|
||||||
$result.signedPrekeyId = signedPrekeyId;
|
$result.signedPrekeyId = signedPrekeyId;
|
||||||
}
|
}
|
||||||
|
if (registrationId != null) {
|
||||||
|
$result.registrationId = registrationId;
|
||||||
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
Handshake_Register._() : super();
|
Handshake_Register._() : super();
|
||||||
|
|
@ -237,6 +241,7 @@ class Handshake_Register extends $pb.GeneratedMessage {
|
||||||
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'signedPrekey', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'signedPrekey', $pb.PbFieldType.OY)
|
||||||
..a<$core.List<$core.int>>(5, _omitFieldNames ? '' : 'signedPrekeySignature', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(5, _omitFieldNames ? '' : 'signedPrekeySignature', $pb.PbFieldType.OY)
|
||||||
..aInt64(6, _omitFieldNames ? '' : 'signedPrekeyId')
|
..aInt64(6, _omitFieldNames ? '' : 'signedPrekeyId')
|
||||||
|
..aInt64(7, _omitFieldNames ? '' : 'registrationId')
|
||||||
..hasRequiredFields = false
|
..hasRequiredFields = false
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -314,6 +319,15 @@ class Handshake_Register extends $pb.GeneratedMessage {
|
||||||
$core.bool hasSignedPrekeyId() => $_has(5);
|
$core.bool hasSignedPrekeyId() => $_has(5);
|
||||||
@$pb.TagNumber(6)
|
@$pb.TagNumber(6)
|
||||||
void clearSignedPrekeyId() => clearField(6);
|
void clearSignedPrekeyId() => clearField(6);
|
||||||
|
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
$fixnum.Int64 get registrationId => $_getI64(6);
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
set registrationId($fixnum.Int64 v) { $_setInt64(6, v); }
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
$core.bool hasRegistrationId() => $_has(6);
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
void clearRegistrationId() => clearField(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
class Handshake_GetChallenge extends $pb.GeneratedMessage {
|
class Handshake_GetChallenge extends $pb.GeneratedMessage {
|
||||||
|
|
@ -677,10 +691,140 @@ class ApplicationData_GetPrekeysByUserId extends $pb.GeneratedMessage {
|
||||||
void clearUserId() => clearField(1);
|
void clearUserId() => clearField(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ApplicationData_GetUploadToken extends $pb.GeneratedMessage {
|
||||||
|
factory ApplicationData_GetUploadToken({
|
||||||
|
$core.int? len,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (len != null) {
|
||||||
|
$result.len = len;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
ApplicationData_GetUploadToken._() : super();
|
||||||
|
factory ApplicationData_GetUploadToken.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory ApplicationData_GetUploadToken.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.GetUploadToken', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
||||||
|
..a<$core.int>(1, _omitFieldNames ? '' : 'len', $pb.PbFieldType.OU3)
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
ApplicationData_GetUploadToken clone() => ApplicationData_GetUploadToken()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
ApplicationData_GetUploadToken copyWith(void Function(ApplicationData_GetUploadToken) updates) => super.copyWith((message) => updates(message as ApplicationData_GetUploadToken)) as ApplicationData_GetUploadToken;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ApplicationData_GetUploadToken create() => ApplicationData_GetUploadToken._();
|
||||||
|
ApplicationData_GetUploadToken createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<ApplicationData_GetUploadToken> createRepeated() => $pb.PbList<ApplicationData_GetUploadToken>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ApplicationData_GetUploadToken getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_GetUploadToken>(create);
|
||||||
|
static ApplicationData_GetUploadToken? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.int get len => $_getIZ(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set len($core.int v) { $_setUnsignedInt32(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasLen() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearLen() => clearField(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ApplicationData_UploadData extends $pb.GeneratedMessage {
|
||||||
|
factory ApplicationData_UploadData({
|
||||||
|
$core.List<$core.int>? uploadToken,
|
||||||
|
$core.int? offset,
|
||||||
|
$core.List<$core.int>? data,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (uploadToken != null) {
|
||||||
|
$result.uploadToken = uploadToken;
|
||||||
|
}
|
||||||
|
if (offset != null) {
|
||||||
|
$result.offset = offset;
|
||||||
|
}
|
||||||
|
if (data != null) {
|
||||||
|
$result.data = data;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
ApplicationData_UploadData._() : super();
|
||||||
|
factory ApplicationData_UploadData.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory ApplicationData_UploadData.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.UploadData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'uploadToken', $pb.PbFieldType.OY)
|
||||||
|
..a<$core.int>(2, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.OU3)
|
||||||
|
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
ApplicationData_UploadData clone() => ApplicationData_UploadData()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
ApplicationData_UploadData copyWith(void Function(ApplicationData_UploadData) updates) => super.copyWith((message) => updates(message as ApplicationData_UploadData)) as ApplicationData_UploadData;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ApplicationData_UploadData create() => ApplicationData_UploadData._();
|
||||||
|
ApplicationData_UploadData createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<ApplicationData_UploadData> createRepeated() => $pb.PbList<ApplicationData_UploadData>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ApplicationData_UploadData getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_UploadData>(create);
|
||||||
|
static ApplicationData_UploadData? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get uploadToken => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set uploadToken($core.List<$core.int> v) { $_setBytes(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasUploadToken() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearUploadToken() => clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.int get offset => $_getIZ(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set offset($core.int v) { $_setUnsignedInt32(1, v); }
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasOffset() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearOffset() => clearField(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.List<$core.int> get data => $_getN(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set data($core.List<$core.int> v) { $_setBytes(2, v); }
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasData() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearData() => clearField(3);
|
||||||
|
}
|
||||||
|
|
||||||
enum ApplicationData_ApplicationData {
|
enum ApplicationData_ApplicationData {
|
||||||
textmessage,
|
textmessage,
|
||||||
getuserbyusername,
|
getuserbyusername,
|
||||||
getprekeysbyuserid,
|
getprekeysbyuserid,
|
||||||
|
getuploadtoken,
|
||||||
|
uploaddata,
|
||||||
notSet
|
notSet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -689,6 +833,8 @@ class ApplicationData extends $pb.GeneratedMessage {
|
||||||
ApplicationData_TextMessage? textmessage,
|
ApplicationData_TextMessage? textmessage,
|
||||||
ApplicationData_GetUserByUsername? getuserbyusername,
|
ApplicationData_GetUserByUsername? getuserbyusername,
|
||||||
ApplicationData_GetPrekeysByUserId? getprekeysbyuserid,
|
ApplicationData_GetPrekeysByUserId? getprekeysbyuserid,
|
||||||
|
ApplicationData_GetUploadToken? getuploadtoken,
|
||||||
|
ApplicationData_UploadData? uploaddata,
|
||||||
}) {
|
}) {
|
||||||
final $result = create();
|
final $result = create();
|
||||||
if (textmessage != null) {
|
if (textmessage != null) {
|
||||||
|
|
@ -700,6 +846,12 @@ class ApplicationData extends $pb.GeneratedMessage {
|
||||||
if (getprekeysbyuserid != null) {
|
if (getprekeysbyuserid != null) {
|
||||||
$result.getprekeysbyuserid = getprekeysbyuserid;
|
$result.getprekeysbyuserid = getprekeysbyuserid;
|
||||||
}
|
}
|
||||||
|
if (getuploadtoken != null) {
|
||||||
|
$result.getuploadtoken = getuploadtoken;
|
||||||
|
}
|
||||||
|
if (uploaddata != null) {
|
||||||
|
$result.uploaddata = uploaddata;
|
||||||
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
ApplicationData._() : super();
|
ApplicationData._() : super();
|
||||||
|
|
@ -710,13 +862,17 @@ class ApplicationData extends $pb.GeneratedMessage {
|
||||||
1 : ApplicationData_ApplicationData.textmessage,
|
1 : ApplicationData_ApplicationData.textmessage,
|
||||||
2 : ApplicationData_ApplicationData.getuserbyusername,
|
2 : ApplicationData_ApplicationData.getuserbyusername,
|
||||||
3 : ApplicationData_ApplicationData.getprekeysbyuserid,
|
3 : ApplicationData_ApplicationData.getprekeysbyuserid,
|
||||||
|
4 : ApplicationData_ApplicationData.getuploadtoken,
|
||||||
|
5 : ApplicationData_ApplicationData.uploaddata,
|
||||||
0 : ApplicationData_ApplicationData.notSet
|
0 : ApplicationData_ApplicationData.notSet
|
||||||
};
|
};
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
||||||
..oo(0, [1, 2, 3])
|
..oo(0, [1, 2, 3, 4, 5])
|
||||||
..aOM<ApplicationData_TextMessage>(1, _omitFieldNames ? '' : 'textmessage', subBuilder: ApplicationData_TextMessage.create)
|
..aOM<ApplicationData_TextMessage>(1, _omitFieldNames ? '' : 'textmessage', subBuilder: ApplicationData_TextMessage.create)
|
||||||
..aOM<ApplicationData_GetUserByUsername>(2, _omitFieldNames ? '' : 'getuserbyusername', subBuilder: ApplicationData_GetUserByUsername.create)
|
..aOM<ApplicationData_GetUserByUsername>(2, _omitFieldNames ? '' : 'getuserbyusername', subBuilder: ApplicationData_GetUserByUsername.create)
|
||||||
..aOM<ApplicationData_GetPrekeysByUserId>(3, _omitFieldNames ? '' : 'getprekeysbyuserid', subBuilder: ApplicationData_GetPrekeysByUserId.create)
|
..aOM<ApplicationData_GetPrekeysByUserId>(3, _omitFieldNames ? '' : 'getprekeysbyuserid', subBuilder: ApplicationData_GetPrekeysByUserId.create)
|
||||||
|
..aOM<ApplicationData_GetUploadToken>(4, _omitFieldNames ? '' : 'getuploadtoken', subBuilder: ApplicationData_GetUploadToken.create)
|
||||||
|
..aOM<ApplicationData_UploadData>(5, _omitFieldNames ? '' : 'uploaddata', subBuilder: ApplicationData_UploadData.create)
|
||||||
..hasRequiredFields = false
|
..hasRequiredFields = false
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -776,11 +932,97 @@ class ApplicationData extends $pb.GeneratedMessage {
|
||||||
void clearGetprekeysbyuserid() => clearField(3);
|
void clearGetprekeysbyuserid() => clearField(3);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
ApplicationData_GetPrekeysByUserId ensureGetprekeysbyuserid() => $_ensure(2);
|
ApplicationData_GetPrekeysByUserId ensureGetprekeysbyuserid() => $_ensure(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
ApplicationData_GetUploadToken get getuploadtoken => $_getN(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
set getuploadtoken(ApplicationData_GetUploadToken v) { setField(4, v); }
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$core.bool hasGetuploadtoken() => $_has(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
void clearGetuploadtoken() => clearField(4);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
ApplicationData_GetUploadToken ensureGetuploadtoken() => $_ensure(3);
|
||||||
|
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
ApplicationData_UploadData get uploaddata => $_getN(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
set uploaddata(ApplicationData_UploadData v) { setField(5, v); }
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
$core.bool hasUploaddata() => $_has(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
void clearUploaddata() => clearField(5);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
ApplicationData_UploadData ensureUploaddata() => $_ensure(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Response_PreKey extends $pb.GeneratedMessage {
|
||||||
|
factory Response_PreKey({
|
||||||
|
$fixnum.Int64? id,
|
||||||
|
$core.List<$core.int>? prekey,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (id != null) {
|
||||||
|
$result.id = id;
|
||||||
|
}
|
||||||
|
if (prekey != null) {
|
||||||
|
$result.prekey = prekey;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
Response_PreKey._() : super();
|
||||||
|
factory Response_PreKey.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory Response_PreKey.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.PreKey', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
||||||
|
..aInt64(1, _omitFieldNames ? '' : 'id')
|
||||||
|
..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'prekey', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
Response_PreKey clone() => Response_PreKey()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
Response_PreKey copyWith(void Function(Response_PreKey) updates) => super.copyWith((message) => updates(message as Response_PreKey)) as Response_PreKey;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static Response_PreKey create() => Response_PreKey._();
|
||||||
|
Response_PreKey createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<Response_PreKey> createRepeated() => $pb.PbList<Response_PreKey>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static Response_PreKey getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response_PreKey>(create);
|
||||||
|
static Response_PreKey? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$fixnum.Int64 get id => $_getI64(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set id($fixnum.Int64 v) { $_setInt64(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasId() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearId() => clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get prekey => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set prekey($core.List<$core.int> v) { $_setBytes(1, v); }
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasPrekey() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearPrekey() => clearField(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
class Response_Prekeys extends $pb.GeneratedMessage {
|
class Response_Prekeys extends $pb.GeneratedMessage {
|
||||||
factory Response_Prekeys({
|
factory Response_Prekeys({
|
||||||
$core.Iterable<$core.List<$core.int>>? prekeys,
|
$core.Iterable<Response_PreKey>? prekeys,
|
||||||
}) {
|
}) {
|
||||||
final $result = create();
|
final $result = create();
|
||||||
if (prekeys != null) {
|
if (prekeys != null) {
|
||||||
|
|
@ -793,7 +1035,7 @@ class Response_Prekeys extends $pb.GeneratedMessage {
|
||||||
factory Response_Prekeys.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
factory Response_Prekeys.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.Prekeys', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.Prekeys', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
|
||||||
..p<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'prekeys', $pb.PbFieldType.PY)
|
..pc<Response_PreKey>(1, _omitFieldNames ? '' : 'prekeys', $pb.PbFieldType.PM, subBuilder: Response_PreKey.create)
|
||||||
..hasRequiredFields = false
|
..hasRequiredFields = false
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -819,7 +1061,7 @@ class Response_Prekeys extends $pb.GeneratedMessage {
|
||||||
static Response_Prekeys? _defaultInstance;
|
static Response_Prekeys? _defaultInstance;
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$core.List<$core.List<$core.int>> get prekeys => $_getList(0);
|
$core.List<Response_PreKey> get prekeys => $_getList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Response_Ok_Ok {
|
enum Response_Ok_Ok {
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ const Handshake_Register$json = {
|
||||||
{'1': 'signed_prekey', '3': 4, '4': 1, '5': 12, '10': 'signedPrekey'},
|
{'1': 'signed_prekey', '3': 4, '4': 1, '5': 12, '10': 'signedPrekey'},
|
||||||
{'1': 'signed_prekey_signature', '3': 5, '4': 1, '5': 12, '10': 'signedPrekeySignature'},
|
{'1': 'signed_prekey_signature', '3': 5, '4': 1, '5': 12, '10': 'signedPrekeySignature'},
|
||||||
{'1': 'signed_prekey_id', '3': 6, '4': 1, '5': 3, '10': 'signedPrekeyId'},
|
{'1': 'signed_prekey_id', '3': 6, '4': 1, '5': 3, '10': 'signedPrekeyId'},
|
||||||
|
{'1': 'registration_id', '3': 7, '4': 1, '5': 3, '10': 'registrationId'},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': '_invite_code'},
|
{'1': '_invite_code'},
|
||||||
|
|
@ -101,14 +102,14 @@ final $typed_data.Uint8List handshakeDescriptor = $convert.base64Decode(
|
||||||
'FrZS5SZWdpc3RlckgAUghyZWdpc3RlchJOCgxnZXRjaGFsbGVuZ2UYAiABKAsyKC5jbGllbnRf'
|
'FrZS5SZWdpc3RlckgAUghyZWdpc3RlchJOCgxnZXRjaGFsbGVuZ2UYAiABKAsyKC5jbGllbnRf'
|
||||||
'dG9fc2VydmVyLkhhbmRzaGFrZS5HZXRDaGFsbGVuZ2VIAFIMZ2V0Y2hhbGxlbmdlEksKC29wZW'
|
'dG9fc2VydmVyLkhhbmRzaGFrZS5HZXRDaGFsbGVuZ2VIAFIMZ2V0Y2hhbGxlbmdlEksKC29wZW'
|
||||||
'5zZXNzaW9uGAMgASgLMicuY2xpZW50X3RvX3NlcnZlci5IYW5kc2hha2UuT3BlblNlc3Npb25I'
|
'5zZXNzaW9uGAMgASgLMicuY2xpZW50X3RvX3NlcnZlci5IYW5kc2hha2UuT3BlblNlc3Npb25I'
|
||||||
'AFILb3BlbnNlc3Npb24akwIKCFJlZ2lzdGVyEhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZR'
|
'AFILb3BlbnNlc3Npb24avAIKCFJlZ2lzdGVyEhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZR'
|
||||||
'IkCgtpbnZpdGVfY29kZRgCIAEoCUgAUgppbnZpdGVDb2RliAEBEi4KE3B1YmxpY19pZGVudGl0'
|
'IkCgtpbnZpdGVfY29kZRgCIAEoCUgAUgppbnZpdGVDb2RliAEBEi4KE3B1YmxpY19pZGVudGl0'
|
||||||
'eV9rZXkYAyABKAxSEXB1YmxpY0lkZW50aXR5S2V5EiMKDXNpZ25lZF9wcmVrZXkYBCABKAxSDH'
|
'eV9rZXkYAyABKAxSEXB1YmxpY0lkZW50aXR5S2V5EiMKDXNpZ25lZF9wcmVrZXkYBCABKAxSDH'
|
||||||
'NpZ25lZFByZWtleRI2ChdzaWduZWRfcHJla2V5X3NpZ25hdHVyZRgFIAEoDFIVc2lnbmVkUHJl'
|
'NpZ25lZFByZWtleRI2ChdzaWduZWRfcHJla2V5X3NpZ25hdHVyZRgFIAEoDFIVc2lnbmVkUHJl'
|
||||||
'a2V5U2lnbmF0dXJlEigKEHNpZ25lZF9wcmVrZXlfaWQYBiABKANSDnNpZ25lZFByZWtleUlkQg'
|
'a2V5U2lnbmF0dXJlEigKEHNpZ25lZF9wcmVrZXlfaWQYBiABKANSDnNpZ25lZFByZWtleUlkEi'
|
||||||
'4KDF9pbnZpdGVfY29kZRoOCgxHZXRDaGFsbGVuZ2UaQgoLT3BlblNlc3Npb24SFwoHdXNlcl9p'
|
'cKD3JlZ2lzdHJhdGlvbl9pZBgHIAEoA1IOcmVnaXN0cmF0aW9uSWRCDgoMX2ludml0ZV9jb2Rl'
|
||||||
'ZBgBIAEoDFIGdXNlcklkEhoKCHJlc3BvbnNlGAIgASgMUghyZXNwb25zZUILCglIYW5kc2hha2'
|
'Gg4KDEdldENoYWxsZW5nZRpCCgtPcGVuU2Vzc2lvbhIXCgd1c2VyX2lkGAEgASgMUgZ1c2VySW'
|
||||||
'U=');
|
'QSGgoIcmVzcG9uc2UYAiABKAxSCHJlc3BvbnNlQgsKCUhhbmRzaGFrZQ==');
|
||||||
|
|
||||||
@$core.Deprecated('Use applicationDataDescriptor instead')
|
@$core.Deprecated('Use applicationDataDescriptor instead')
|
||||||
const ApplicationData$json = {
|
const ApplicationData$json = {
|
||||||
|
|
@ -117,8 +118,10 @@ const ApplicationData$json = {
|
||||||
{'1': 'textmessage', '3': 1, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.TextMessage', '9': 0, '10': 'textmessage'},
|
{'1': 'textmessage', '3': 1, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.TextMessage', '9': 0, '10': 'textmessage'},
|
||||||
{'1': 'getuserbyusername', '3': 2, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUserByUsername', '9': 0, '10': 'getuserbyusername'},
|
{'1': 'getuserbyusername', '3': 2, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUserByUsername', '9': 0, '10': 'getuserbyusername'},
|
||||||
{'1': 'getprekeysbyuserid', '3': 3, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetPrekeysByUserId', '9': 0, '10': 'getprekeysbyuserid'},
|
{'1': 'getprekeysbyuserid', '3': 3, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetPrekeysByUserId', '9': 0, '10': 'getprekeysbyuserid'},
|
||||||
|
{'1': 'getuploadtoken', '3': 4, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUploadToken', '9': 0, '10': 'getuploadtoken'},
|
||||||
|
{'1': 'uploaddata', '3': 5, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UploadData', '9': 0, '10': 'uploaddata'},
|
||||||
],
|
],
|
||||||
'3': [ApplicationData_TextMessage$json, ApplicationData_GetUserByUsername$json, ApplicationData_GetPrekeysByUserId$json],
|
'3': [ApplicationData_TextMessage$json, ApplicationData_GetUserByUsername$json, ApplicationData_GetPrekeysByUserId$json, ApplicationData_GetUploadToken$json, ApplicationData_UploadData$json],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': 'ApplicationData'},
|
{'1': 'ApplicationData'},
|
||||||
],
|
],
|
||||||
|
|
@ -149,6 +152,24 @@ const ApplicationData_GetPrekeysByUserId$json = {
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@$core.Deprecated('Use applicationDataDescriptor instead')
|
||||||
|
const ApplicationData_GetUploadToken$json = {
|
||||||
|
'1': 'GetUploadToken',
|
||||||
|
'2': [
|
||||||
|
{'1': 'len', '3': 1, '4': 1, '5': 13, '10': 'len'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
@$core.Deprecated('Use applicationDataDescriptor instead')
|
||||||
|
const ApplicationData_UploadData$json = {
|
||||||
|
'1': 'UploadData',
|
||||||
|
'2': [
|
||||||
|
{'1': 'upload_token', '3': 1, '4': 1, '5': 12, '10': 'uploadToken'},
|
||||||
|
{'1': 'offset', '3': 2, '4': 1, '5': 13, '10': 'offset'},
|
||||||
|
{'1': 'data', '3': 3, '4': 1, '5': 12, '10': 'data'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
/// Descriptor for `ApplicationData`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `ApplicationData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List applicationDataDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List applicationDataDescriptor = $convert.base64Decode(
|
||||||
'Cg9BcHBsaWNhdGlvbkRhdGESUQoLdGV4dG1lc3NhZ2UYASABKAsyLS5jbGllbnRfdG9fc2Vydm'
|
'Cg9BcHBsaWNhdGlvbkRhdGESUQoLdGV4dG1lc3NhZ2UYASABKAsyLS5jbGllbnRfdG9fc2Vydm'
|
||||||
|
|
@ -156,10 +177,16 @@ final $typed_data.Uint8List applicationDataDescriptor = $convert.base64Decode(
|
||||||
'Ynl1c2VybmFtZRgCIAEoCzIzLmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldF'
|
'Ynl1c2VybmFtZRgCIAEoCzIzLmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldF'
|
||||||
'VzZXJCeVVzZXJuYW1lSABSEWdldHVzZXJieXVzZXJuYW1lEmYKEmdldHByZWtleXNieXVzZXJp'
|
'VzZXJCeVVzZXJuYW1lSABSEWdldHVzZXJieXVzZXJuYW1lEmYKEmdldHByZWtleXNieXVzZXJp'
|
||||||
'ZBgDIAEoCzI0LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldFByZWtleXNCeV'
|
'ZBgDIAEoCzI0LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldFByZWtleXNCeV'
|
||||||
'VzZXJJZEgAUhJnZXRwcmVrZXlzYnl1c2VyaWQaOgoLVGV4dE1lc3NhZ2USFwoHdXNlcl9pZBgB'
|
'VzZXJJZEgAUhJnZXRwcmVrZXlzYnl1c2VyaWQSWgoOZ2V0dXBsb2FkdG9rZW4YBCABKAsyMC5j'
|
||||||
'IAEoDFIGdXNlcklkEhIKBGJvZHkYAyABKAxSBGJvZHkaLwoRR2V0VXNlckJ5VXNlcm5hbWUSGg'
|
'bGllbnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5HZXRVcGxvYWRUb2tlbkgAUg5nZXR1cG'
|
||||||
'oIdXNlcm5hbWUYASABKAlSCHVzZXJuYW1lGi0KEkdldFByZWtleXNCeVVzZXJJZBIXCgd1c2Vy'
|
'xvYWR0b2tlbhJOCgp1cGxvYWRkYXRhGAUgASgLMiwuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNh'
|
||||||
'X2lkGAEgASgMUgZ1c2VySWRCEQoPQXBwbGljYXRpb25EYXRh');
|
'dGlvbkRhdGEuVXBsb2FkRGF0YUgAUgp1cGxvYWRkYXRhGjoKC1RleHRNZXNzYWdlEhcKB3VzZX'
|
||||||
|
'JfaWQYASABKAxSBnVzZXJJZBISCgRib2R5GAMgASgMUgRib2R5Gi8KEUdldFVzZXJCeVVzZXJu'
|
||||||
|
'YW1lEhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZRotChJHZXRQcmVrZXlzQnlVc2VySWQSFw'
|
||||||
|
'oHdXNlcl9pZBgBIAEoDFIGdXNlcklkGiIKDkdldFVwbG9hZFRva2VuEhAKA2xlbhgBIAEoDVID'
|
||||||
|
'bGVuGlsKClVwbG9hZERhdGESIQoMdXBsb2FkX3Rva2VuGAEgASgMUgt1cGxvYWRUb2tlbhIWCg'
|
||||||
|
'ZvZmZzZXQYAiABKA1SBm9mZnNldBISCgRkYXRhGAMgASgMUgRkYXRhQhEKD0FwcGxpY2F0aW9u'
|
||||||
|
'RGF0YQ==');
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
@$core.Deprecated('Use responseDescriptor instead')
|
||||||
const Response$json = {
|
const Response$json = {
|
||||||
|
|
@ -168,17 +195,26 @@ const Response$json = {
|
||||||
{'1': 'ok', '3': 1, '4': 1, '5': 11, '6': '.client_to_server.Response.Ok', '9': 0, '10': 'ok'},
|
{'1': 'ok', '3': 1, '4': 1, '5': 11, '6': '.client_to_server.Response.Ok', '9': 0, '10': 'ok'},
|
||||||
{'1': 'error', '3': 2, '4': 1, '5': 14, '6': '.error.ErrorCode', '9': 0, '10': 'error'},
|
{'1': 'error', '3': 2, '4': 1, '5': 14, '6': '.error.ErrorCode', '9': 0, '10': 'error'},
|
||||||
],
|
],
|
||||||
'3': [Response_Prekeys$json, Response_Ok$json],
|
'3': [Response_PreKey$json, Response_Prekeys$json, Response_Ok$json],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': 'Response'},
|
{'1': 'Response'},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@$core.Deprecated('Use responseDescriptor instead')
|
||||||
|
const Response_PreKey$json = {
|
||||||
|
'1': 'PreKey',
|
||||||
|
'2': [
|
||||||
|
{'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
|
||||||
|
{'1': 'prekey', '3': 2, '4': 1, '5': 12, '10': 'prekey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
@$core.Deprecated('Use responseDescriptor instead')
|
||||||
const Response_Prekeys$json = {
|
const Response_Prekeys$json = {
|
||||||
'1': 'Prekeys',
|
'1': 'Prekeys',
|
||||||
'2': [
|
'2': [
|
||||||
{'1': 'prekeys', '3': 1, '4': 3, '5': 12, '10': 'prekeys'},
|
{'1': 'prekeys', '3': 1, '4': 3, '5': 11, '6': '.client_to_server.Response.PreKey', '10': 'prekeys'},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -197,8 +233,9 @@ const Response_Ok$json = {
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
||||||
'CghSZXNwb25zZRIvCgJvaxgBIAEoCzIdLmNsaWVudF90b19zZXJ2ZXIuUmVzcG9uc2UuT2tIAF'
|
'CghSZXNwb25zZRIvCgJvaxgBIAEoCzIdLmNsaWVudF90b19zZXJ2ZXIuUmVzcG9uc2UuT2tIAF'
|
||||||
'ICb2sSKAoFZXJyb3IYAiABKA4yEC5lcnJvci5FcnJvckNvZGVIAFIFZXJyb3IaIwoHUHJla2V5'
|
'ICb2sSKAoFZXJyb3IYAiABKA4yEC5lcnJvci5FcnJvckNvZGVIAFIFZXJyb3IaMAoGUHJlS2V5'
|
||||||
'cxIYCgdwcmVrZXlzGAEgAygMUgdwcmVrZXlzGmAKAk9rEhQKBE5vbmUYASABKAhIAFIETm9uZR'
|
'Eg4KAmlkGAEgASgDUgJpZBIWCgZwcmVrZXkYAiABKAxSBnByZWtleRpGCgdQcmVrZXlzEjsKB3'
|
||||||
'I+CgdwcmVrZXlzGAIgASgLMiIuY2xpZW50X3RvX3NlcnZlci5SZXNwb25zZS5QcmVrZXlzSABS'
|
'ByZWtleXMYASADKAsyIS5jbGllbnRfdG9fc2VydmVyLlJlc3BvbnNlLlByZUtleVIHcHJla2V5'
|
||||||
'B3ByZWtleXNCBAoCT2tCCgoIUmVzcG9uc2U=');
|
'cxpgCgJPaxIUCgROb25lGAEgASgISABSBE5vbmUSPgoHcHJla2V5cxgCIAEoCzIiLmNsaWVudF'
|
||||||
|
'90b19zZXJ2ZXIuUmVzcG9uc2UuUHJla2V5c0gAUgdwcmVrZXlzQgQKAk9rQgoKCFJlc3BvbnNl');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ class ErrorCode extends $pb.ProtobufEnum {
|
||||||
static const ErrorCode SessionAlreadyAuthenticated = ErrorCode._(1008, _omitEnumNames ? '' : 'SessionAlreadyAuthenticated');
|
static const ErrorCode SessionAlreadyAuthenticated = ErrorCode._(1008, _omitEnumNames ? '' : 'SessionAlreadyAuthenticated');
|
||||||
static const ErrorCode SessionNotAuthenticated = ErrorCode._(1009, _omitEnumNames ? '' : 'SessionNotAuthenticated');
|
static const ErrorCode SessionNotAuthenticated = ErrorCode._(1009, _omitEnumNames ? '' : 'SessionNotAuthenticated');
|
||||||
static const ErrorCode OnlyOneSessionAllowed = ErrorCode._(1010, _omitEnumNames ? '' : 'OnlyOneSessionAllowed');
|
static const ErrorCode OnlyOneSessionAllowed = ErrorCode._(1010, _omitEnumNames ? '' : 'OnlyOneSessionAllowed');
|
||||||
|
static const ErrorCode UploadLimitReached = ErrorCode._(1011, _omitEnumNames ? '' : 'UploadLimitReached');
|
||||||
|
static const ErrorCode InvalidUpdateToken = ErrorCode._(1012, _omitEnumNames ? '' : 'InvalidUpdateToken');
|
||||||
|
|
||||||
static const $core.List<ErrorCode> values = <ErrorCode> [
|
static const $core.List<ErrorCode> values = <ErrorCode> [
|
||||||
Unknown,
|
Unknown,
|
||||||
|
|
@ -42,6 +44,8 @@ class ErrorCode extends $pb.ProtobufEnum {
|
||||||
SessionAlreadyAuthenticated,
|
SessionAlreadyAuthenticated,
|
||||||
SessionNotAuthenticated,
|
SessionNotAuthenticated,
|
||||||
OnlyOneSessionAllowed,
|
OnlyOneSessionAllowed,
|
||||||
|
UploadLimitReached,
|
||||||
|
InvalidUpdateToken,
|
||||||
];
|
];
|
||||||
|
|
||||||
static final $core.Map<$core.int, ErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values);
|
static final $core.Map<$core.int, ErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ const ErrorCode$json = {
|
||||||
{'1': 'SessionAlreadyAuthenticated', '2': 1008},
|
{'1': 'SessionAlreadyAuthenticated', '2': 1008},
|
||||||
{'1': 'SessionNotAuthenticated', '2': 1009},
|
{'1': 'SessionNotAuthenticated', '2': 1009},
|
||||||
{'1': 'OnlyOneSessionAllowed', '2': 1010},
|
{'1': 'OnlyOneSessionAllowed', '2': 1010},
|
||||||
|
{'1': 'UploadLimitReached', '2': 1011},
|
||||||
|
{'1': 'InvalidUpdateToken', '2': 1012},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -40,5 +42,6 @@ final $typed_data.Uint8List errorCodeDescriptor = $convert.base64Decode(
|
||||||
'EhkKFFVzZXJuYW1lQWxyZWFkeVRha2VuEOsHEhYKEVNpZ25hdHVyZU5vdFZhbGlkEOwHEhUKEF'
|
'EhkKFFVzZXJuYW1lQWxyZWFkeVRha2VuEOsHEhYKEVNpZ25hdHVyZU5vdFZhbGlkEOwHEhUKEF'
|
||||||
'VzZXJuYW1lTm90Rm91bmQQ7QcSFQoQVXNlcm5hbWVOb3RWYWxpZBDuBxIVChBJbnZhbGlkUHVi'
|
'VzZXJuYW1lTm90Rm91bmQQ7QcSFQoQVXNlcm5hbWVOb3RWYWxpZBDuBxIVChBJbnZhbGlkUHVi'
|
||||||
'bGljS2V5EO8HEiAKG1Nlc3Npb25BbHJlYWR5QXV0aGVudGljYXRlZBDwBxIcChdTZXNzaW9uTm'
|
'bGljS2V5EO8HEiAKG1Nlc3Npb25BbHJlYWR5QXV0aGVudGljYXRlZBDwBxIcChdTZXNzaW9uTm'
|
||||||
'90QXV0aGVudGljYXRlZBDxBxIaChVPbmx5T25lU2Vzc2lvbkFsbG93ZWQQ8gc=');
|
'90QXV0aGVudGljYXRlZBDxBxIaChVPbmx5T25lU2Vzc2lvbkFsbG93ZWQQ8gcSFwoSVXBsb2Fk'
|
||||||
|
'TGltaXRSZWFjaGVkEPMHEhcKEkludmFsaWRVcGRhdGVUb2tlbhD0Bw==');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -244,14 +244,79 @@ class NewMessage extends $pb.GeneratedMessage {
|
||||||
void clearBody() => clearField(1);
|
void clearBody() => clearField(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Response_PreKey extends $pb.GeneratedMessage {
|
||||||
|
factory Response_PreKey({
|
||||||
|
$fixnum.Int64? id,
|
||||||
|
$core.List<$core.int>? prekey,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (id != null) {
|
||||||
|
$result.id = id;
|
||||||
|
}
|
||||||
|
if (prekey != null) {
|
||||||
|
$result.prekey = prekey;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
Response_PreKey._() : super();
|
||||||
|
factory Response_PreKey.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory Response_PreKey.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.PreKey', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
|
||||||
|
..aInt64(1, _omitFieldNames ? '' : 'id')
|
||||||
|
..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'prekey', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
Response_PreKey clone() => Response_PreKey()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
Response_PreKey copyWith(void Function(Response_PreKey) updates) => super.copyWith((message) => updates(message as Response_PreKey)) as Response_PreKey;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static Response_PreKey create() => Response_PreKey._();
|
||||||
|
Response_PreKey createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<Response_PreKey> createRepeated() => $pb.PbList<Response_PreKey>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static Response_PreKey getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response_PreKey>(create);
|
||||||
|
static Response_PreKey? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$fixnum.Int64 get id => $_getI64(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set id($fixnum.Int64 v) { $_setInt64(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasId() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearId() => clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get prekey => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set prekey($core.List<$core.int> v) { $_setBytes(1, v); }
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasPrekey() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearPrekey() => clearField(2);
|
||||||
|
}
|
||||||
|
|
||||||
class Response_UserData extends $pb.GeneratedMessage {
|
class Response_UserData extends $pb.GeneratedMessage {
|
||||||
factory Response_UserData({
|
factory Response_UserData({
|
||||||
$core.List<$core.int>? userId,
|
$core.List<$core.int>? userId,
|
||||||
$core.Iterable<$core.List<$core.int>>? prekeys,
|
$core.Iterable<Response_PreKey>? prekeys,
|
||||||
$core.List<$core.int>? publicIdentityKey,
|
$core.List<$core.int>? publicIdentityKey,
|
||||||
$core.List<$core.int>? signedPrekey,
|
$core.List<$core.int>? signedPrekey,
|
||||||
$core.List<$core.int>? signedPrekeySignature,
|
$core.List<$core.int>? signedPrekeySignature,
|
||||||
$fixnum.Int64? signedPrekeyId,
|
$fixnum.Int64? signedPrekeyId,
|
||||||
|
$fixnum.Int64? registrationId,
|
||||||
}) {
|
}) {
|
||||||
final $result = create();
|
final $result = create();
|
||||||
if (userId != null) {
|
if (userId != null) {
|
||||||
|
|
@ -272,6 +337,9 @@ class Response_UserData extends $pb.GeneratedMessage {
|
||||||
if (signedPrekeyId != null) {
|
if (signedPrekeyId != null) {
|
||||||
$result.signedPrekeyId = signedPrekeyId;
|
$result.signedPrekeyId = signedPrekeyId;
|
||||||
}
|
}
|
||||||
|
if (registrationId != null) {
|
||||||
|
$result.registrationId = registrationId;
|
||||||
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
Response_UserData._() : super();
|
Response_UserData._() : super();
|
||||||
|
|
@ -280,11 +348,12 @@ class Response_UserData extends $pb.GeneratedMessage {
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.UserData', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.UserData', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
|
||||||
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'userId', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'userId', $pb.PbFieldType.OY)
|
||||||
..p<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'prekeys', $pb.PbFieldType.PY)
|
..pc<Response_PreKey>(2, _omitFieldNames ? '' : 'prekeys', $pb.PbFieldType.PM, subBuilder: Response_PreKey.create)
|
||||||
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'publicIdentityKey', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'publicIdentityKey', $pb.PbFieldType.OY)
|
||||||
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'signedPrekey', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'signedPrekey', $pb.PbFieldType.OY)
|
||||||
..a<$core.List<$core.int>>(5, _omitFieldNames ? '' : 'signedPrekeySignature', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(5, _omitFieldNames ? '' : 'signedPrekeySignature', $pb.PbFieldType.OY)
|
||||||
..aInt64(6, _omitFieldNames ? '' : 'signedPrekeyId')
|
..aInt64(6, _omitFieldNames ? '' : 'signedPrekeyId')
|
||||||
|
..aInt64(7, _omitFieldNames ? '' : 'registrationId')
|
||||||
..hasRequiredFields = false
|
..hasRequiredFields = false
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -319,7 +388,7 @@ class Response_UserData extends $pb.GeneratedMessage {
|
||||||
void clearUserId() => clearField(1);
|
void clearUserId() => clearField(1);
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$core.List<$core.List<$core.int>> get prekeys => $_getList(1);
|
$core.List<Response_PreKey> get prekeys => $_getList(1);
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$core.List<$core.int> get publicIdentityKey => $_getN(2);
|
$core.List<$core.int> get publicIdentityKey => $_getN(2);
|
||||||
|
|
@ -356,12 +425,22 @@ class Response_UserData extends $pb.GeneratedMessage {
|
||||||
$core.bool hasSignedPrekeyId() => $_has(5);
|
$core.bool hasSignedPrekeyId() => $_has(5);
|
||||||
@$pb.TagNumber(6)
|
@$pb.TagNumber(6)
|
||||||
void clearSignedPrekeyId() => clearField(6);
|
void clearSignedPrekeyId() => clearField(6);
|
||||||
|
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
$fixnum.Int64 get registrationId => $_getI64(6);
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
set registrationId($fixnum.Int64 v) { $_setInt64(6, v); }
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
$core.bool hasRegistrationId() => $_has(6);
|
||||||
|
@$pb.TagNumber(7)
|
||||||
|
void clearRegistrationId() => clearField(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Response_Ok_Ok {
|
enum Response_Ok_Ok {
|
||||||
none,
|
none,
|
||||||
userid,
|
userid,
|
||||||
challenge,
|
challenge,
|
||||||
|
uploadtoken,
|
||||||
userdata,
|
userdata,
|
||||||
notSet
|
notSet
|
||||||
}
|
}
|
||||||
|
|
@ -371,6 +450,7 @@ class Response_Ok extends $pb.GeneratedMessage {
|
||||||
$core.bool? none,
|
$core.bool? none,
|
||||||
$core.List<$core.int>? userid,
|
$core.List<$core.int>? userid,
|
||||||
$core.List<$core.int>? challenge,
|
$core.List<$core.int>? challenge,
|
||||||
|
$core.List<$core.int>? uploadtoken,
|
||||||
Response_UserData? userdata,
|
Response_UserData? userdata,
|
||||||
}) {
|
}) {
|
||||||
final $result = create();
|
final $result = create();
|
||||||
|
|
@ -383,6 +463,9 @@ class Response_Ok extends $pb.GeneratedMessage {
|
||||||
if (challenge != null) {
|
if (challenge != null) {
|
||||||
$result.challenge = challenge;
|
$result.challenge = challenge;
|
||||||
}
|
}
|
||||||
|
if (uploadtoken != null) {
|
||||||
|
$result.uploadtoken = uploadtoken;
|
||||||
|
}
|
||||||
if (userdata != null) {
|
if (userdata != null) {
|
||||||
$result.userdata = userdata;
|
$result.userdata = userdata;
|
||||||
}
|
}
|
||||||
|
|
@ -396,15 +479,17 @@ class Response_Ok extends $pb.GeneratedMessage {
|
||||||
1 : Response_Ok_Ok.none,
|
1 : Response_Ok_Ok.none,
|
||||||
2 : Response_Ok_Ok.userid,
|
2 : Response_Ok_Ok.userid,
|
||||||
3 : Response_Ok_Ok.challenge,
|
3 : Response_Ok_Ok.challenge,
|
||||||
4 : Response_Ok_Ok.userdata,
|
4 : Response_Ok_Ok.uploadtoken,
|
||||||
|
5 : Response_Ok_Ok.userdata,
|
||||||
0 : Response_Ok_Ok.notSet
|
0 : Response_Ok_Ok.notSet
|
||||||
};
|
};
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.Ok', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Response.Ok', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
|
||||||
..oo(0, [1, 2, 3, 4])
|
..oo(0, [1, 2, 3, 4, 5])
|
||||||
..aOB(1, _omitFieldNames ? '' : 'None', protoName: 'None')
|
..aOB(1, _omitFieldNames ? '' : 'None', protoName: 'None')
|
||||||
..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'userid', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'userid', $pb.PbFieldType.OY)
|
||||||
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'challenge', $pb.PbFieldType.OY)
|
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'challenge', $pb.PbFieldType.OY)
|
||||||
..aOM<Response_UserData>(4, _omitFieldNames ? '' : 'userdata', subBuilder: Response_UserData.create)
|
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'uploadtoken', $pb.PbFieldType.OY)
|
||||||
|
..aOM<Response_UserData>(5, _omitFieldNames ? '' : 'userdata', subBuilder: Response_UserData.create)
|
||||||
..hasRequiredFields = false
|
..hasRequiredFields = false
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -460,15 +545,24 @@ class Response_Ok extends $pb.GeneratedMessage {
|
||||||
void clearChallenge() => clearField(3);
|
void clearChallenge() => clearField(3);
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
@$pb.TagNumber(4)
|
||||||
Response_UserData get userdata => $_getN(3);
|
$core.List<$core.int> get uploadtoken => $_getN(3);
|
||||||
@$pb.TagNumber(4)
|
@$pb.TagNumber(4)
|
||||||
set userdata(Response_UserData v) { setField(4, v); }
|
set uploadtoken($core.List<$core.int> v) { $_setBytes(3, v); }
|
||||||
@$pb.TagNumber(4)
|
@$pb.TagNumber(4)
|
||||||
$core.bool hasUserdata() => $_has(3);
|
$core.bool hasUploadtoken() => $_has(3);
|
||||||
@$pb.TagNumber(4)
|
@$pb.TagNumber(4)
|
||||||
void clearUserdata() => clearField(4);
|
void clearUploadtoken() => clearField(4);
|
||||||
@$pb.TagNumber(4)
|
|
||||||
Response_UserData ensureUserdata() => $_ensure(3);
|
@$pb.TagNumber(5)
|
||||||
|
Response_UserData get userdata => $_getN(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
set userdata(Response_UserData v) { setField(5, v); }
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
$core.bool hasUserdata() => $_has(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
void clearUserdata() => clearField(5);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
Response_UserData ensureUserdata() => $_ensure(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Response_Response {
|
enum Response_Response {
|
||||||
|
|
|
||||||
|
|
@ -69,27 +69,38 @@ const Response$json = {
|
||||||
{'1': 'ok', '3': 1, '4': 1, '5': 11, '6': '.server_to_client.Response.Ok', '9': 0, '10': 'ok'},
|
{'1': 'ok', '3': 1, '4': 1, '5': 11, '6': '.server_to_client.Response.Ok', '9': 0, '10': 'ok'},
|
||||||
{'1': 'error', '3': 2, '4': 1, '5': 14, '6': '.error.ErrorCode', '9': 0, '10': 'error'},
|
{'1': 'error', '3': 2, '4': 1, '5': 14, '6': '.error.ErrorCode', '9': 0, '10': 'error'},
|
||||||
],
|
],
|
||||||
'3': [Response_UserData$json, Response_Ok$json],
|
'3': [Response_PreKey$json, Response_UserData$json, Response_Ok$json],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': 'Response'},
|
{'1': 'Response'},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@$core.Deprecated('Use responseDescriptor instead')
|
||||||
|
const Response_PreKey$json = {
|
||||||
|
'1': 'PreKey',
|
||||||
|
'2': [
|
||||||
|
{'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
|
||||||
|
{'1': 'prekey', '3': 2, '4': 1, '5': 12, '10': 'prekey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
@$core.Deprecated('Use responseDescriptor instead')
|
||||||
const Response_UserData$json = {
|
const Response_UserData$json = {
|
||||||
'1': 'UserData',
|
'1': 'UserData',
|
||||||
'2': [
|
'2': [
|
||||||
{'1': 'user_id', '3': 1, '4': 1, '5': 12, '10': 'userId'},
|
{'1': 'user_id', '3': 1, '4': 1, '5': 12, '10': 'userId'},
|
||||||
{'1': 'prekeys', '3': 2, '4': 3, '5': 12, '10': 'prekeys'},
|
{'1': 'prekeys', '3': 2, '4': 3, '5': 11, '6': '.server_to_client.Response.PreKey', '10': 'prekeys'},
|
||||||
{'1': 'public_identity_key', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'publicIdentityKey', '17': true},
|
{'1': 'public_identity_key', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'publicIdentityKey', '17': true},
|
||||||
{'1': 'signed_prekey', '3': 4, '4': 1, '5': 12, '9': 1, '10': 'signedPrekey', '17': true},
|
{'1': 'signed_prekey', '3': 4, '4': 1, '5': 12, '9': 1, '10': 'signedPrekey', '17': true},
|
||||||
{'1': 'signed_prekey_signature', '3': 5, '4': 1, '5': 12, '9': 2, '10': 'signedPrekeySignature', '17': true},
|
{'1': 'signed_prekey_signature', '3': 5, '4': 1, '5': 12, '9': 2, '10': 'signedPrekeySignature', '17': true},
|
||||||
{'1': 'signed_prekey_id', '3': 6, '4': 1, '5': 3, '9': 3, '10': 'signedPrekeyId', '17': true},
|
{'1': 'registration_id', '3': 7, '4': 1, '5': 3, '9': 3, '10': 'registrationId', '17': true},
|
||||||
|
{'1': 'signed_prekey_id', '3': 6, '4': 1, '5': 3, '9': 4, '10': 'signedPrekeyId', '17': true},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': '_public_identity_key'},
|
{'1': '_public_identity_key'},
|
||||||
{'1': '_signed_prekey'},
|
{'1': '_signed_prekey'},
|
||||||
{'1': '_signed_prekey_signature'},
|
{'1': '_signed_prekey_signature'},
|
||||||
|
{'1': '_registration_id'},
|
||||||
{'1': '_signed_prekey_id'},
|
{'1': '_signed_prekey_id'},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
@ -101,7 +112,8 @@ const Response_Ok$json = {
|
||||||
{'1': 'None', '3': 1, '4': 1, '5': 8, '9': 0, '10': 'None'},
|
{'1': 'None', '3': 1, '4': 1, '5': 8, '9': 0, '10': 'None'},
|
||||||
{'1': 'userid', '3': 2, '4': 1, '5': 12, '9': 0, '10': 'userid'},
|
{'1': 'userid', '3': 2, '4': 1, '5': 12, '9': 0, '10': 'userid'},
|
||||||
{'1': 'challenge', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'challenge'},
|
{'1': 'challenge', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'challenge'},
|
||||||
{'1': 'userdata', '3': 4, '4': 1, '5': 11, '6': '.server_to_client.Response.UserData', '9': 0, '10': 'userdata'},
|
{'1': 'uploadtoken', '3': 4, '4': 1, '5': 12, '9': 0, '10': 'uploadtoken'},
|
||||||
|
{'1': 'userdata', '3': 5, '4': 1, '5': 11, '6': '.server_to_client.Response.UserData', '9': 0, '10': 'userdata'},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
{'1': 'Ok'},
|
{'1': 'Ok'},
|
||||||
|
|
@ -111,15 +123,18 @@ const Response_Ok$json = {
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
||||||
'CghSZXNwb25zZRIvCgJvaxgBIAEoCzIdLnNlcnZlcl90b19jbGllbnQuUmVzcG9uc2UuT2tIAF'
|
'CghSZXNwb25zZRIvCgJvaxgBIAEoCzIdLnNlcnZlcl90b19jbGllbnQuUmVzcG9uc2UuT2tIAF'
|
||||||
'ICb2sSKAoFZXJyb3IYAiABKA4yEC5lcnJvci5FcnJvckNvZGVIAFIFZXJyb3Ia4wIKCFVzZXJE'
|
'ICb2sSKAoFZXJyb3IYAiABKA4yEC5lcnJvci5FcnJvckNvZGVIAFIFZXJyb3IaMAoGUHJlS2V5'
|
||||||
'YXRhEhcKB3VzZXJfaWQYASABKAxSBnVzZXJJZBIYCgdwcmVrZXlzGAIgAygMUgdwcmVrZXlzEj'
|
'Eg4KAmlkGAEgASgDUgJpZBIWCgZwcmVrZXkYAiABKAxSBnByZWtleRrIAwoIVXNlckRhdGESFw'
|
||||||
'MKE3B1YmxpY19pZGVudGl0eV9rZXkYAyABKAxIAFIRcHVibGljSWRlbnRpdHlLZXmIAQESKAoN'
|
'oHdXNlcl9pZBgBIAEoDFIGdXNlcklkEjsKB3ByZWtleXMYAiADKAsyIS5zZXJ2ZXJfdG9fY2xp'
|
||||||
'c2lnbmVkX3ByZWtleRgEIAEoDEgBUgxzaWduZWRQcmVrZXmIAQESOwoXc2lnbmVkX3ByZWtleV'
|
'ZW50LlJlc3BvbnNlLlByZUtleVIHcHJla2V5cxIzChNwdWJsaWNfaWRlbnRpdHlfa2V5GAMgAS'
|
||||||
'9zaWduYXR1cmUYBSABKAxIAlIVc2lnbmVkUHJla2V5U2lnbmF0dXJliAEBEi0KEHNpZ25lZF9w'
|
'gMSABSEXB1YmxpY0lkZW50aXR5S2V5iAEBEigKDXNpZ25lZF9wcmVrZXkYBCABKAxIAVIMc2ln'
|
||||||
'cmVrZXlfaWQYBiABKANIA1IOc2lnbmVkUHJla2V5SWSIAQFCFgoUX3B1YmxpY19pZGVudGl0eV'
|
'bmVkUHJla2V5iAEBEjsKF3NpZ25lZF9wcmVrZXlfc2lnbmF0dXJlGAUgASgMSAJSFXNpZ25lZF'
|
||||||
'9rZXlCEAoOX3NpZ25lZF9wcmVrZXlCGgoYX3NpZ25lZF9wcmVrZXlfc2lnbmF0dXJlQhMKEV9z'
|
'ByZWtleVNpZ25hdHVyZYgBARIsCg9yZWdpc3RyYXRpb25faWQYByABKANIA1IOcmVnaXN0cmF0'
|
||||||
'aWduZWRfcHJla2V5X2lkGp0BCgJPaxIUCgROb25lGAEgASgISABSBE5vbmUSGAoGdXNlcmlkGA'
|
'aW9uSWSIAQESLQoQc2lnbmVkX3ByZWtleV9pZBgGIAEoA0gEUg5zaWduZWRQcmVrZXlJZIgBAU'
|
||||||
'IgASgMSABSBnVzZXJpZBIeCgljaGFsbGVuZ2UYAyABKAxIAFIJY2hhbGxlbmdlEkEKCHVzZXJk'
|
'IWChRfcHVibGljX2lkZW50aXR5X2tleUIQCg5fc2lnbmVkX3ByZWtleUIaChhfc2lnbmVkX3By'
|
||||||
'YXRhGAQgASgLMiMuc2VydmVyX3RvX2NsaWVudC5SZXNwb25zZS5Vc2VyRGF0YUgAUgh1c2VyZG'
|
'ZWtleV9zaWduYXR1cmVCEgoQX3JlZ2lzdHJhdGlvbl9pZEITChFfc2lnbmVkX3ByZWtleV9pZB'
|
||||||
'F0YUIECgJPa0IKCghSZXNwb25zZQ==');
|
'rBAQoCT2sSFAoETm9uZRgBIAEoCEgAUgROb25lEhgKBnVzZXJpZBgCIAEoDEgAUgZ1c2VyaWQS'
|
||||||
|
'HgoJY2hhbGxlbmdlGAMgASgMSABSCWNoYWxsZW5nZRIiCgt1cGxvYWR0b2tlbhgEIAEoDEgAUg'
|
||||||
|
't1cGxvYWR0b2tlbhJBCgh1c2VyZGF0YRgFIAEoCzIjLnNlcnZlcl90b19jbGllbnQuUmVzcG9u'
|
||||||
|
'c2UuVXNlckRhdGFIAFIIdXNlcmRhdGFCBAoCT2tCCgoIUmVzcG9uc2U=');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,14 @@ import 'dart:collection';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
import 'package:fixnum/fixnum.dart';
|
import 'package:fixnum/fixnum.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
||||||
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:twonly/src/proto/api/client_to_server.pb.dart';
|
import 'package:twonly/src/proto/api/client_to_server.pb.dart' as client;
|
||||||
|
import 'package:twonly/src/proto/api/client_to_server.pbserver.dart';
|
||||||
import 'package:twonly/src/proto/api/error.pb.dart';
|
import 'package:twonly/src/proto/api/error.pb.dart';
|
||||||
import 'package:twonly/src/proto/api/server_to_client.pb.dart' as server;
|
import 'package:twonly/src/proto/api/server_to_client.pb.dart' as server;
|
||||||
|
import 'package:twonly/src/proto/api/server_to_client.pbserver.dart';
|
||||||
import 'package:twonly/src/signal/signal_helper.dart';
|
import 'package:twonly/src/signal/signal_helper.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:twonly/src/utils.dart';
|
import 'package:twonly/src/utils.dart';
|
||||||
|
|
@ -103,9 +106,9 @@ class ApiProvider {
|
||||||
void tryToReconnect() {
|
void tryToReconnect() {
|
||||||
Future.delayed(Duration(seconds: _reconnectionDelay)).then(
|
Future.delayed(Duration(seconds: _reconnectionDelay)).then(
|
||||||
(value) async {
|
(value) async {
|
||||||
_reconnectionDelay = _reconnectionDelay * 2;
|
_reconnectionDelay = _reconnectionDelay + 2;
|
||||||
if (_reconnectionDelay > 60 * 5) {
|
if (_reconnectionDelay > 20) {
|
||||||
_reconnectionDelay = 60 * 5;
|
_reconnectionDelay = 20;
|
||||||
}
|
}
|
||||||
await connect();
|
await connect();
|
||||||
},
|
},
|
||||||
|
|
@ -118,6 +121,7 @@ class ApiProvider {
|
||||||
if (msg.v0.hasResponse()) {
|
if (msg.v0.hasResponse()) {
|
||||||
messagesV0[msg.v0.seq] = msg;
|
messagesV0[msg.v0.seq] = msg;
|
||||||
} else {
|
} else {
|
||||||
|
_handleServerMessage(msg);
|
||||||
log.shout("Got a new message from the server: $msg");
|
log.shout("Got a new message from the server: $msg");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -125,6 +129,34 @@ class ApiProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future _handleServerMessage(server.ServerToClient msg) async {
|
||||||
|
client.Response? response;
|
||||||
|
|
||||||
|
if (msg.v0.requestNewPreKeys) {
|
||||||
|
List<PreKeyRecord> localPreKeys = await SignalHelper.getPreKeys();
|
||||||
|
|
||||||
|
List<client.Response_PreKey> prekeysList = [];
|
||||||
|
for (int i = 0; i < localPreKeys.length; i++) {
|
||||||
|
prekeysList.add(client.Response_PreKey()
|
||||||
|
..id = Int64(localPreKeys[i].id)
|
||||||
|
..prekey = localPreKeys[i].getKeyPair().publicKey.serialize());
|
||||||
|
}
|
||||||
|
var prekeys = client.Response_Prekeys(prekeys: prekeysList);
|
||||||
|
var ok = client.Response_Ok()..prekeys = prekeys;
|
||||||
|
response = client.Response()..ok = ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response == null) return;
|
||||||
|
|
||||||
|
var v0 = client.V0()
|
||||||
|
..seq = msg.v0.seq
|
||||||
|
..response = response;
|
||||||
|
var res = ClientToServer()..v0 = v0;
|
||||||
|
|
||||||
|
final resBytes = res.writeToBuffer();
|
||||||
|
_channel!.sink.add(resBytes);
|
||||||
|
}
|
||||||
|
|
||||||
Future<server.ServerToClient?> _waitForResponse(Int64 seq) async {
|
Future<server.ServerToClient?> _waitForResponse(Int64 seq) async {
|
||||||
final startTime = DateTime.now();
|
final startTime = DateTime.now();
|
||||||
|
|
||||||
|
|
@ -162,7 +194,7 @@ class ApiProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientToServer createClientToServerFromHandshake(Handshake handshake) {
|
ClientToServer createClientToServerFromHandshake(Handshake handshake) {
|
||||||
var v0 = V0()
|
var v0 = client.V0()
|
||||||
..seq = Int64(0)
|
..seq = Int64(0)
|
||||||
..handshake = handshake;
|
..handshake = handshake;
|
||||||
return ClientToServer()..v0 = v0;
|
return ClientToServer()..v0 = v0;
|
||||||
|
|
@ -170,7 +202,7 @@ class ApiProvider {
|
||||||
|
|
||||||
ClientToServer createClientToServerFromApplicationData(
|
ClientToServer createClientToServerFromApplicationData(
|
||||||
ApplicationData applicationData) {
|
ApplicationData applicationData) {
|
||||||
var v0 = V0()
|
var v0 = client.V0()
|
||||||
..seq = Int64(0)
|
..seq = Int64(0)
|
||||||
..applicationdata = applicationData;
|
..applicationdata = applicationData;
|
||||||
return ClientToServer()..v0 = v0;
|
return ClientToServer()..v0 = v0;
|
||||||
|
|
@ -218,9 +250,7 @@ class ApiProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future authenticate() async {
|
Future authenticate() async {
|
||||||
final reqSignal = await SignalHelper.getRegisterData();
|
if (await SignalHelper.getSignalIdentity() == null) {
|
||||||
|
|
||||||
if (reqSignal == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,19 +301,26 @@ class ApiProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Result> register(String username, String? inviteCode) async {
|
Future<Result> register(String username, String? inviteCode) async {
|
||||||
final reqSignal = await SignalHelper.getRegisterData();
|
final signalIdentity = await SignalHelper.getSignalIdentity();
|
||||||
|
if (signalIdentity == null) {
|
||||||
if (reqSignal == null) {
|
|
||||||
return Result.error(
|
return Result.error(
|
||||||
"There was an fatal error. Try reinstalling the app.");
|
"There was an fatal error. Try reinstalling the app.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final signalStore =
|
||||||
|
await SignalHelper.getSignalStoreFromIdentity(signalIdentity);
|
||||||
|
|
||||||
|
final signedPreKey = (await signalStore.loadSignedPreKeys())[0];
|
||||||
|
log.shout("handle registrationId", signalIdentity.registrationId);
|
||||||
|
|
||||||
var register = Handshake_Register()
|
var register = Handshake_Register()
|
||||||
..username = username
|
..username = username
|
||||||
..publicIdentityKey = reqSignal["identityKey"]
|
..publicIdentityKey =
|
||||||
..signedPrekey = reqSignal["signedPreKey"]?["key"]
|
(await signalStore.getIdentityKeyPair()).getPublicKey().serialize()
|
||||||
..signedPrekeySignature = reqSignal["signedPreKey"]?["signature"]
|
..registrationId = Int64(signalIdentity.registrationId)
|
||||||
..signedPrekeyId = Int64(reqSignal["signedPreKey"]?["id"]);
|
..signedPrekey = signedPreKey.getKeyPair().publicKey.serialize()
|
||||||
|
..signedPrekeySignature = signedPreKey.signature
|
||||||
|
..signedPrekeyId = Int64(signedPreKey.id);
|
||||||
|
|
||||||
if (inviteCode != null && inviteCode != "") {
|
if (inviteCode != null && inviteCode != "") {
|
||||||
register.inviteCode = inviteCode;
|
register.inviteCode = inviteCode;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
import 'package:twonly/src/model/identity_key_store_model.dart';
|
import 'package:twonly/src/model/identity_key_store_model.dart';
|
||||||
import 'package:twonly/src/model/model_constants.dart';
|
import 'package:twonly/src/model/model_constants.dart';
|
||||||
import 'package:twonly/src/model/pre_key_model.dart';
|
import 'package:twonly/src/model/pre_key_model.dart';
|
||||||
|
|
@ -71,6 +73,10 @@ class DbProvider {
|
||||||
await openPath(await fixPath(dbName));
|
await openPath(await fixPath(dbName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future remove() async {
|
||||||
|
await _createDb(db!);
|
||||||
|
}
|
||||||
|
|
||||||
Future<String> fixPath(String path) async => path;
|
Future<String> fixPath(String path) async => path;
|
||||||
|
|
||||||
Future close() async {
|
Future close() async {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ class ConnectSignedPreKeyStore extends SignedPreKeyStore {
|
||||||
return store;
|
return store;
|
||||||
}
|
}
|
||||||
final storeHashMap = json.decode(storeSerialized);
|
final storeHashMap = json.decode(storeSerialized);
|
||||||
|
print(storeHashMap);
|
||||||
for (final item in storeHashMap) {
|
for (final item in storeHashMap) {
|
||||||
store[item[0]] = base64Decode(item[1]);
|
store[item[0]] = base64Decode(item[1]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import 'dart:developer';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
||||||
import 'package:twonly/src/model/signal_identity_json.dart';
|
import 'package:twonly/src/model/signal_identity_json.dart';
|
||||||
|
import 'package:twonly/src/proto/api/server_to_client.pb.dart';
|
||||||
import 'package:twonly/src/utils.dart';
|
import 'package:twonly/src/utils.dart';
|
||||||
|
|
||||||
import 'connect_sender_key_store.dart';
|
import 'connect_sender_key_store.dart';
|
||||||
|
|
@ -39,58 +40,9 @@ class SignalDataModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// one to one implementation
|
// PreKeyBundle preKeyBundleFromJson(Map<String, dynamic> remoteBundle) {
|
||||||
Future<void> buildSession(
|
|
||||||
String target,
|
|
||||||
Map<String, dynamic> remoteBundle,
|
|
||||||
) async {
|
|
||||||
SignalProtocolAddress targetAddress =
|
|
||||||
SignalProtocolAddress(target, SignalHelper.defaultDeviceId);
|
|
||||||
SessionBuilder sessionBuilder =
|
|
||||||
SessionBuilder.fromSignalStore(signalStore, targetAddress);
|
|
||||||
PreKeyBundle temp = preKeyBundleFromJson(remoteBundle);
|
|
||||||
await sessionBuilder.processPreKeyBundle(temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
PreKeyBundle preKeyBundleFromJson(Map<String, dynamic> remoteBundle) {
|
// }
|
||||||
// One time pre key calculation
|
|
||||||
List tempPreKeys = remoteBundle["preKeys"];
|
|
||||||
ECPublicKey? tempPrePublicKey;
|
|
||||||
int? tempPreKeyId;
|
|
||||||
if (tempPreKeys.isNotEmpty) {
|
|
||||||
tempPrePublicKey = Curve.decodePoint(
|
|
||||||
DjbECPublicKey(base64Decode(tempPreKeys.first['key'])).serialize(),
|
|
||||||
1);
|
|
||||||
tempPreKeyId = remoteBundle["preKeys"].first['id'];
|
|
||||||
}
|
|
||||||
// Signed pre key calculation
|
|
||||||
int tempSignedPreKeyId = remoteBundle["signedPreKey"]['id'];
|
|
||||||
Map? tempSignedPreKey = remoteBundle["signedPreKey"];
|
|
||||||
ECPublicKey? tempSignedPreKeyPublic;
|
|
||||||
Uint8List? tempSignedPreKeySignature;
|
|
||||||
if (tempSignedPreKey != null) {
|
|
||||||
tempSignedPreKeyPublic = Curve.decodePoint(
|
|
||||||
DjbECPublicKey(base64Decode(remoteBundle["signedPreKey"]['key']))
|
|
||||||
.serialize(),
|
|
||||||
1);
|
|
||||||
tempSignedPreKeySignature =
|
|
||||||
base64Decode(remoteBundle["signedPreKey"]['signature']);
|
|
||||||
}
|
|
||||||
// Identity key calculation
|
|
||||||
IdentityKey tempIdentityKey = IdentityKey(Curve.decodePoint(
|
|
||||||
DjbECPublicKey(base64Decode(remoteBundle["identityKey"])).serialize(),
|
|
||||||
1));
|
|
||||||
return PreKeyBundle(
|
|
||||||
remoteBundle['registrationId'],
|
|
||||||
1,
|
|
||||||
tempPreKeyId,
|
|
||||||
tempPrePublicKey,
|
|
||||||
tempSignedPreKeyId,
|
|
||||||
tempSignedPreKeyPublic,
|
|
||||||
tempSignedPreKeySignature,
|
|
||||||
tempIdentityKey,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<String?> getEncryptedText(String text, String target) async {
|
Future<String?> getEncryptedText(String text, String target) async {
|
||||||
try {
|
try {
|
||||||
|
|
@ -136,62 +88,124 @@ class SignalDataModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int userIdToRegistrationId(List<int> userId) {
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 8; i < 16; i++) {
|
||||||
|
result = (result << 8) | userId[i];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String uint8ListToHex(List<int> list) {
|
||||||
|
final StringBuffer hexBuffer = StringBuffer();
|
||||||
|
for (int byte in list) {
|
||||||
|
hexBuffer.write(byte.toRadixString(16).padLeft(2, '0'));
|
||||||
|
}
|
||||||
|
return hexBuffer.toString().toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
class SignalHelper {
|
class SignalHelper {
|
||||||
static const int defaultDeviceId = 1;
|
static const int defaultDeviceId = 1;
|
||||||
|
|
||||||
static Future<ECPrivateKey?> getPrivateKey() async {
|
static Future<ECPrivateKey?> getPrivateKey() async {
|
||||||
final storage = getSecureStorage();
|
final signalIdentity = await getSignalIdentity();
|
||||||
final signalIdentityJson = await storage.read(key: "signal_identity");
|
if (signalIdentity == null) {
|
||||||
if (signalIdentityJson == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final SignalIdentity signalIdentity =
|
|
||||||
SignalIdentity.fromJson(jsonDecode(signalIdentityJson));
|
|
||||||
|
|
||||||
final IdentityKeyPair identityKeyPair =
|
final IdentityKeyPair identityKeyPair =
|
||||||
IdentityKeyPair.fromSerialized(signalIdentity.identityKeyPairU8List);
|
IdentityKeyPair.fromSerialized(signalIdentity.identityKeyPairU8List);
|
||||||
|
|
||||||
return identityKeyPair.getPrivateKey();
|
return identityKeyPair.getPrivateKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<Map<String, dynamic>?> getRegisterData() async {
|
static Future<bool> addNewContact(Response_UserData userData) async {
|
||||||
// final publicKey = identityKeyPair.getPublicKey().serialize();
|
final List<int> userId = userData.userId;
|
||||||
|
|
||||||
|
SignalProtocolAddress targetAddress = SignalProtocolAddress(
|
||||||
|
uint8ListToHex(userId), SignalHelper.defaultDeviceId);
|
||||||
|
|
||||||
|
SignalProtocolStore? signalStore = await SignalHelper.getSignalStore();
|
||||||
|
if (signalStore == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionBuilder sessionBuilder =
|
||||||
|
SessionBuilder.fromSignalStore(signalStore, targetAddress);
|
||||||
|
|
||||||
|
ECPublicKey? tempPrePublicKey;
|
||||||
|
int? tempPreKeyId;
|
||||||
|
if (userData.prekeys.isNotEmpty) {
|
||||||
|
tempPrePublicKey = Curve.decodePoint(
|
||||||
|
DjbECPublicKey(Uint8List.fromList(userData.prekeys.first.prekey))
|
||||||
|
.serialize(),
|
||||||
|
1);
|
||||||
|
tempPreKeyId = userData.prekeys.first.id.toInt();
|
||||||
|
}
|
||||||
|
// Signed pre key calculation
|
||||||
|
int tempSignedPreKeyId = userData.signedPrekeyId.toInt();
|
||||||
|
// Map? tempSignedPreKey = remoteBundle["signedPreKey"];
|
||||||
|
ECPublicKey? tempSignedPreKeyPublic;
|
||||||
|
Uint8List? tempSignedPreKeySignature;
|
||||||
|
// if (tempSignedPreKey != null) {
|
||||||
|
tempSignedPreKeyPublic = Curve.decodePoint(
|
||||||
|
DjbECPublicKey(Uint8List.fromList(userData.signedPrekey)).serialize(),
|
||||||
|
1);
|
||||||
|
tempSignedPreKeySignature =
|
||||||
|
Uint8List.fromList(userData.signedPrekeySignature);
|
||||||
|
// }
|
||||||
|
// Identity key calculation
|
||||||
|
IdentityKey tempIdentityKey = IdentityKey(Curve.decodePoint(
|
||||||
|
DjbECPublicKey(Uint8List.fromList(userData.publicIdentityKey))
|
||||||
|
.serialize(),
|
||||||
|
1));
|
||||||
|
PreKeyBundle preKeyBundle = PreKeyBundle(
|
||||||
|
userData.registrationId.toInt(),
|
||||||
|
1,
|
||||||
|
tempPreKeyId,
|
||||||
|
tempPrePublicKey,
|
||||||
|
tempSignedPreKeyId,
|
||||||
|
tempSignedPreKeyPublic,
|
||||||
|
tempSignedPreKeySignature,
|
||||||
|
tempIdentityKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
await sessionBuilder.processPreKeyBundle(preKeyBundle);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<ConnectSignalProtocolStore?> getSignalStore() async {
|
||||||
|
return await getSignalStoreFromIdentity((await getSignalIdentity())!);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<SignalIdentity?> getSignalIdentity() async {
|
||||||
final storage = getSecureStorage();
|
final storage = getSecureStorage();
|
||||||
final signalIdentityJson = await storage.read(key: "signal_identity");
|
final signalIdentityJson = await storage.read(key: "signal_identity");
|
||||||
if (signalIdentityJson == null) {
|
if (signalIdentityJson == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final SignalIdentity signalIdentity =
|
return SignalIdentity.fromJson(jsonDecode(signalIdentityJson));
|
||||||
SignalIdentity.fromJson(jsonDecode(signalIdentityJson));
|
}
|
||||||
|
|
||||||
|
static Future<ConnectSignalProtocolStore> getSignalStoreFromIdentity(
|
||||||
|
SignalIdentity signalIdentity) async {
|
||||||
final IdentityKeyPair identityKeyPair =
|
final IdentityKeyPair identityKeyPair =
|
||||||
IdentityKeyPair.fromSerialized(signalIdentity.identityKeyPairU8List);
|
IdentityKeyPair.fromSerialized(signalIdentity.identityKeyPairU8List);
|
||||||
|
|
||||||
ConnectSignalProtocolStore signalStore = ConnectSignalProtocolStore(
|
return ConnectSignalProtocolStore(
|
||||||
identityKeyPair, signalIdentity.registrationId);
|
identityKeyPair, signalIdentity.registrationId);
|
||||||
|
}
|
||||||
|
|
||||||
final signedPreKey = (await signalStore.loadSignedPreKeys())[0];
|
static Future<List<PreKeyRecord>> getPreKeys() async {
|
||||||
final Map<String, dynamic> req = {};
|
final preKeys = generatePreKeys(0, 200);
|
||||||
req['registrationId'] = signalIdentity.registrationId;
|
final signalStore = await getSignalStore();
|
||||||
req['identityKey'] =
|
if (signalStore == null) return [];
|
||||||
(await signalStore.getIdentityKeyPair()).getPublicKey().serialize();
|
for (final p in preKeys) {
|
||||||
|
await signalStore.preKeyStore.storePreKey(p.id, p);
|
||||||
req['signedPreKey'] = {
|
}
|
||||||
'id': signedPreKey.id,
|
return preKeys;
|
||||||
'signature': signedPreKey.signature,
|
|
||||||
'key': signedPreKey.getKeyPair().publicKey.serialize(),
|
|
||||||
};
|
|
||||||
// List pKeysList = [];
|
|
||||||
// for (PreKeyRecord pKey in preKeys) {
|
|
||||||
// Map<String, dynamic> pKeys = {};
|
|
||||||
// pKeys['id'] = pKey.id;
|
|
||||||
// pKeys['key'] = base64Encode(pKey.getKeyPair().publicKey.serialize());
|
|
||||||
// pKeysList.add(pKeys);
|
|
||||||
// }
|
|
||||||
// req['preKeys'] = pKeysList;
|
|
||||||
return req;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future createIfNotExistsSignalIdentity() async {
|
static Future createIfNotExistsSignalIdentity() async {
|
||||||
|
|
@ -208,14 +222,9 @@ class SignalHelper {
|
||||||
ConnectSignalProtocolStore signalStore =
|
ConnectSignalProtocolStore signalStore =
|
||||||
ConnectSignalProtocolStore(identityKeyPair, registrationId);
|
ConnectSignalProtocolStore(identityKeyPair, registrationId);
|
||||||
|
|
||||||
final preKeys = generatePreKeys(0, 100);
|
|
||||||
final signedPreKey =
|
final signedPreKey =
|
||||||
generateSignedPreKey(identityKeyPair, SignalHelper.defaultDeviceId);
|
generateSignedPreKey(identityKeyPair, SignalHelper.defaultDeviceId);
|
||||||
|
|
||||||
for (final p in preKeys) {
|
|
||||||
await signalStore.preKeyStore.storePreKey(p.id, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
await signalStore.signedPreKeyStore
|
await signalStore.signedPreKeyStore
|
||||||
.storeSignedPreKey(signedPreKey.id, signedPreKey);
|
.storeSignedPreKey(signedPreKey.id, signedPreKey);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@ import 'dart:convert';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:twonly/main.dart';
|
import 'package:twonly/main.dart';
|
||||||
import 'package:twonly/src/signal/signal_helper.dart';
|
import 'package:twonly/src/signal/signal_helper.dart';
|
||||||
|
|
@ -45,8 +47,10 @@ Future<UserData?> getUser() async {
|
||||||
|
|
||||||
Future<bool> deleteLocalUserData() async {
|
Future<bool> deleteLocalUserData() async {
|
||||||
final storage = getSecureStorage();
|
final storage = getSecureStorage();
|
||||||
await storage.delete(key: "user_data");
|
var password = await storage.read(key: "sqflite_database_password");
|
||||||
await storage.delete(key: "signal_identity");
|
await dbProvider.remove();
|
||||||
|
await storage.write(key: "sqflite_database_password", value: password);
|
||||||
|
await storage.deleteAll();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,11 +65,42 @@ Uint8List getRandomUint8List(int length) {
|
||||||
return randomBytes;
|
return randomBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int userIdToRegistrationId(Uint8List userId) {
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 8; i < 16; i++) {
|
||||||
|
result = (result << 8) | userId[i];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String uint8ListToHex(Uint8List list) {
|
||||||
|
final StringBuffer hexBuffer = StringBuffer();
|
||||||
|
for (int byte in list) {
|
||||||
|
hexBuffer.write(byte.toRadixString(16).padLeft(2, '0'));
|
||||||
|
}
|
||||||
|
return hexBuffer.toString().toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> addNewUser(String username) async {
|
Future<bool> addNewUser(String username) async {
|
||||||
final res = await apiProvider.getUserData(username);
|
final res = await apiProvider.getUserData(username);
|
||||||
|
|
||||||
if (res.isSuccess) {
|
if (res.isSuccess) {
|
||||||
print("Found user: ${res.value}");
|
print(res.value);
|
||||||
|
print(res.value.userdata.userId);
|
||||||
|
|
||||||
|
await SignalHelper.addNewContact(res.value.userdata);
|
||||||
|
|
||||||
|
// final Map<String, dynamic> req = {};
|
||||||
|
// req['identityKey'] =
|
||||||
|
// (await signalStore.getIdentityKeyPair()).getPublicKey().serialize();
|
||||||
|
|
||||||
|
// req['signedPreKey'] = {
|
||||||
|
// 'id': signedPreKey.id,
|
||||||
|
// 'signature': signedPreKey.signature,
|
||||||
|
// 'key': signedPreKey.getKeyPair().publicKey.serialize(),
|
||||||
|
// };
|
||||||
|
|
||||||
|
print("Add new user: ${res}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.isSuccess;
|
return res.isSuccess;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:twonly/main.dart';
|
||||||
import 'package:twonly/src/providers/api_provider.dart';
|
import 'package:twonly/src/providers/api_provider.dart';
|
||||||
import '../utils.dart';
|
import '../utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -123,6 +124,7 @@ class _RegisterViewState extends State<RegisterView> {
|
||||||
usernameController.text, inviteCodeController.text);
|
usernameController.text, inviteCodeController.text);
|
||||||
setState(() {
|
setState(() {
|
||||||
_isTryingToRegister = false;
|
_isTryingToRegister = false;
|
||||||
|
apiProvider.authenticate();
|
||||||
});
|
});
|
||||||
if (res.isSuccess) {
|
if (res.isSuccess) {
|
||||||
widget.callbackOnSuccess();
|
widget.callbackOnSuccess();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue