Skip to content

Commit 4b5f277

Browse files
committed
Upgrade libsignal-service-dotnet and fix registration
1 parent edb9109 commit 4b5f277

File tree

6 files changed

+91
-80
lines changed

6 files changed

+91
-80
lines changed

Signal-Windows.Lib/Signal-Windows.Lib.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@
150150
</ItemGroup>
151151
<ItemGroup>
152152
<PackageReference Include="libsignal-service-dotnet">
153-
<Version>2.5.10.9</Version>
153+
<Version>2.5.15.1</Version>
154154
</PackageReference>
155155
<PackageReference Include="Microsoft.EntityFrameworkCore">
156156
<Version>1.1.4</Version>

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ public async Task Acquire(CoreDispatcher d, ISignalFrontend w) //TODO wrap tryca
113113
{
114114
return LibsignalDBContext.GetSignalStore();
115115
});
116+
if (Store == null)
117+
{
118+
SemaphoreSlim.Release();
119+
throw new Exception("Signal Store has not been setup yet.");
120+
}
116121
await Task.Run(() =>
117122
{
118123
InitNetwork();

Signal-Windows.Lib/Storage/DB.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,9 +594,8 @@ public static void RemoveSignedPreKey(uint id)
594594
public static void RefreshPreKeys(SignalServiceAccountManager accountManager) //TODO wrap in extra lock? enforce reload?
595595
{
596596
List<PreKeyRecord> oneTimePreKeys = GeneratePreKeys();
597-
PreKeyRecord lastResortKey = getOrGenerateLastResortPreKey();
598597
SignedPreKeyRecord signedPreKeyRecord = generateSignedPreKey(GetIdentityKeyPair());
599-
accountManager.setPreKeys(GetIdentityKeyPair().getPublicKey(), lastResortKey, signedPreKeyRecord, oneTimePreKeys);
598+
accountManager.setPreKeys(GetIdentityKeyPair().getPublicKey(), signedPreKeyRecord, oneTimePreKeys);
600599
}
601600

602601
private static List<PreKeyRecord> GeneratePreKeys()

Signal-Windows/App.xaml.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ protected override async void OnActivated(IActivatedEventArgs args)
9393
Logger.LogInformation("OnActivated() {0}", args.GetType());
9494
if (args is ToastNotificationActivatedEventArgs toastArgs)
9595
{
96-
if (!CreateMainWindow(toastArgs.Argument))
96+
bool createdMainWindow = await CreateMainWindow(toastArgs.Argument);
97+
if (!createdMainWindow)
9798
{
9899
if (args is IViewSwitcherProvider viewSwitcherProvider && viewSwitcherProvider.ViewSwitcher != null)
99100
{
@@ -130,7 +131,8 @@ protected override async void OnLaunched(LaunchActivatedEventArgs e)
130131
Logger.LogInformation("Launching ({0})", e.PreviousExecutionState);
131132
Logger.LogDebug(LocalCacheFolder.Path);
132133

133-
if (!CreateMainWindow(null))
134+
bool createdMainWindow = await CreateMainWindow(null);
135+
if (!createdMainWindow)
134136
{
135137
ActivationViewSwitcher switcher = e.ViewSwitcher;
136138
int currentId = e.CurrentlyShownApplicationViewId;
@@ -171,7 +173,7 @@ await newView.Dispatcher.RunTaskAsync(() =>
171173
Logger.LogInformation("OnLaunched added view {0}", newViewId);
172174
}
173175

174-
private bool CreateMainWindow(string conversationId)
176+
private async Task<bool> CreateMainWindow(string conversationId)
175177
{
176178
Frame rootFrame = Window.Current.Content as Frame;
177179
if (rootFrame == null)
@@ -199,7 +201,8 @@ private bool CreateMainWindow(string conversationId)
199201
rootFrame.Navigate(typeof(MainPage), conversationId);
200202
Window.Current.Activate();
201203
TileUpdateManager.CreateTileUpdaterForApplication().Clear();
202-
var acquisition = Handle.Acquire(frontend.Dispatcher, frontend);
204+
// We need to await here so that any exception that Acquire throws actually gets caught
205+
await Handle.Acquire(frontend.Dispatcher, frontend);
203206
}
204207
catch (Exception ex)
205208
{
Lines changed: 75 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,76 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Diagnostics;
4-
using System.Linq;
5-
using System.Text;
6-
using System.Threading.Tasks;
7-
using GalaSoft.MvvmLight;
8-
using libsignalservice;
9-
using libsignalservice.util;
10-
using Signal_Windows.Models;
11-
using Signal_Windows.Storage;
12-
using Signal_Windows.Views;
13-
using Windows.UI.Popups;
14-
15-
namespace Signal_Windows.ViewModels
16-
{
17-
public class FinishRegistrationPageViewModel : ViewModelBase
18-
{
19-
public FinishRegistrationPage View { get; set; }
20-
21-
internal async Task OnNavigatedTo()
22-
{
23-
try
24-
{
25-
await Task.Run(() =>
26-
{
27-
string SignalingKey = Base64.encodeBytes(Util.getSecretBytes(52));
28-
App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.AccountManager.verifyAccountWithCode(
29-
App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.VerificationCode,
30-
SignalingKey, App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.SignalRegistrationId,
31-
false, false, true);
32-
SignalStore store = new SignalStore()
33-
{
34-
DeviceId = 1,
35-
IdentityKeyPair = Base64.encodeBytes(App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.IdentityKeyPair.serialize()),
36-
NextSignedPreKeyId = 1,
37-
Password = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.Password,
38-
PreKeyIdOffset = 1,
39-
Registered = true,
40-
RegistrationId = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.SignalRegistrationId,
41-
SignalingKey = SignalingKey,
42-
Username = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterPageInstance.FinalNumber,
43-
};
44-
LibsignalDBContext.SaveOrUpdateSignalStore(store);
45-
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
46-
{
47-
App.Store = store;
48-
}).AsTask().Wait();
49-
50-
/* create prekeys */
51-
LibsignalDBContext.RefreshPreKeys(
52-
new SignalServiceAccountManager(App.ServiceUrls, store.Username, store.Password, (int)store.DeviceId, App.USER_AGENT));
53-
54-
/* reload again with prekeys and their offsets */
55-
store = LibsignalDBContext.GetSignalStore();
56-
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
57-
{
58-
App.Store = store;
59-
}).AsTask().Wait();
60-
});
61-
View.Frame.Navigate(typeof(MainPage));
62-
}
63-
catch (Exception e)
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using GalaSoft.MvvmLight;
8+
using libsignalservice;
9+
using libsignalservice.util;
10+
using Signal_Windows.Lib;
11+
using Signal_Windows.Models;
12+
using Signal_Windows.Storage;
13+
using Signal_Windows.Views;
14+
using Windows.UI.Popups;
15+
16+
namespace Signal_Windows.ViewModels
17+
{
18+
public class FinishRegistrationPageViewModel : ViewModelBase
19+
{
20+
public FinishRegistrationPage View { get; set; }
21+
22+
internal async Task OnNavigatedTo()
23+
{
24+
try
6425
{
65-
// TODO log exception
66-
var title = "Verification failed";
67-
var content = "Please enter the correct verification code.";
68-
MessageDialog dialog = new MessageDialog(content, title);
69-
var result = dialog.ShowAsync();
70-
View.Frame.Navigate(typeof(RegisterPage));
71-
}
72-
}
73-
}
74-
}
26+
await Task.Run(() =>
27+
{
28+
string SignalingKey = Base64.encodeBytes(Util.getSecretBytes(52));
29+
App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.AccountManager.verifyAccountWithCode(
30+
App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.VerificationCode,
31+
SignalingKey, App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.SignalRegistrationId,
32+
true);
33+
SignalStore store = new SignalStore()
34+
{
35+
DeviceId = 1,
36+
IdentityKeyPair = Base64.encodeBytes(App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.IdentityKeyPair.serialize()),
37+
NextSignedPreKeyId = 1,
38+
Password = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.Password,
39+
PreKeyIdOffset = 1,
40+
Registered = true,
41+
RegistrationId = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterFinalizationPageInstance.SignalRegistrationId,
42+
SignalingKey = SignalingKey,
43+
Username = App.CurrentSignalWindowsFrontend(App.MainViewId).Locator.RegisterPageInstance.FinalNumber,
44+
};
45+
LibsignalDBContext.SaveOrUpdateSignalStore(store);
46+
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
47+
{
48+
App.Store = store;
49+
SignalLibHandle.Instance.Store = store;
50+
}).AsTask().Wait();
51+
52+
/* create prekeys */
53+
LibsignalDBContext.RefreshPreKeys(
54+
new SignalServiceAccountManager(App.ServiceUrls, store.Username, store.Password, (int)store.DeviceId, App.USER_AGENT));
55+
56+
/* reload again with prekeys and their offsets */
57+
store = LibsignalDBContext.GetSignalStore();
58+
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
59+
{
60+
App.Store = store;
61+
}).AsTask().Wait();
62+
});
63+
View.Frame.Navigate(typeof(MainPage));
64+
}
65+
catch (Exception e)
66+
{
67+
// TODO log exception
68+
var title = "Verification failed";
69+
var content = "Please enter the correct verification code.";
70+
MessageDialog dialog = new MessageDialog(content, title);
71+
var result = dialog.ShowAsync();
72+
View.Frame.Navigate(typeof(RegisterPage));
73+
}
74+
}
75+
}
76+
}

Signal-Windows/ViewModels/LinkPageViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using libsignalservice;
55
using libsignalservice.util;
66
using Microsoft.Extensions.Logging;
7+
using Signal_Windows.Lib;
78
using Signal_Windows.Models;
89
using Signal_Windows.Storage;
910
using Signal_Windows.Views;
@@ -123,6 +124,7 @@ public async Task BeginLinking()
123124
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
124125
{
125126
App.Store = store;
127+
SignalLibHandle.Instance.Store = store;
126128
View.Finish(true);
127129
}).AsTask().Wait();
128130
});

0 commit comments

Comments
 (0)