internal static string PickEndpoint(string[] endpoints, string prefix) { if (_selected != null) { return(_selected); } if (_preferred != null && endpoints.Contains(_preferred) && CheckAvailability(_preferred, prefix).Item1 >= 0) { _selected = _preferred; return(_selected); } var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; var results = new Task <Tuple <int, string> > [endpoints.Length]; var i = 0; foreach (var endpoint in endpoints) { results[i] = Task.Run(() => CheckAvailability(endpoint, prefix), token); i++; } var result = RestApi.Synchronize(() => WhenAny(results, x => !CheckVendor.NotValidResponseCode(x.Item1))); _selected = CheckVendor.NotValidResponseCode(result.Item1) ? null : result.Item2; return(_selected); }
private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { _sr.InteractiveTask(() => { int ret; _sr.Procedure = null; var local = new LogoutProcedure(); try { ret = local.Step1(); } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { ApiVendor.SetRenew(null); SubwindowNavigator.Navigate(SubwindowPage.LoggedOut); } }); _sr.InteractiveTask(() => SubwindowNavigator.Navigate(SubwindowPage.LoggedOut)); }
public int Step3() { if (CheckVendor.NotValidResponse(_serverResponse)) { return(02_0008); } var authRequest = new AuthRequest(); authRequest.Username = _username; authRequest.AuthToken = _serverResponse.AuthToken; authRequest.ReportTime = DateTime.Now; var result = ApiCall.SessionChange.Call(null, new MilvanethProtocol { Context = null, Data = authRequest }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } return(sr.Message); }
public int Step1(string username, byte[] renewToken) { if (CheckVendor.NotValidRenewToken(renewToken)) { return(03_0009); } var authRenew = new AuthRenew(); authRenew.Username = username; authRenew.RenewToken = renewToken; authRenew.ReportTime = DateTime.Now; var result = ApiCall.SessionRenew.Call(null, new MilvanethProtocol { Context = null, Data = authRenew }); if (!(result.Data is AuthResponse ar)) { return(02_0007); } if (!CheckVendor.NotValidResponse(ar)) { _authResponse = ar; } return(ar.Message); }
public int Step2(int[] itemid, int partid, out OverviewResponse res) { res = null; if (itemid.Any(CheckVendor.NotValidItemId) || !ApiVendor.HasToken()) { return(02_0008); } var or = new OverviewRequest(); or.QueryItems = itemid; or.ReportTime = DateTime.Now; var result = ApiCall.DataOverview.Call(partid.ToString(), new MilvanethProtocol { Context = null, Data = or }); if (!(result.Data is OverviewResponse pr)) { return(02_0007); } if (CheckVendor.NotValidResponse(pr)) { return(pr.Message); } res = pr; return(00_0000); }
public int Step1(out bool needUpdate, out VersionInfo info) { needUpdate = false; info = null; var result = ApiCall.VersionCurrent.Call($"{MilvanethConfig.Store.Global.MilVersion},{MilvanethConfig.Store.Global.DataVersion},{MilvanethConfig.Store.Global.GameVersion}", null); if (!(result.Data is VersionInfo vi)) { return(02_0007); } if (CheckVendor.NotValidResponse(vi)) { return(vi.Message); } needUpdate = vi.Message == 00_0004; if (needUpdate) { info = vi; _versionInfo = vi; } return(00_0000); }
public int Step2(out VersionDownload download) { download = null; if (CheckVendor.NotValidResponse(_versionInfo) || _versionInfo.Message != 00_0004) { return(02_0008); } var result = ApiCall.VersionDownload.Call(_versionInfo.EligibleBundleKey, null); if (!(result.Data is VersionDownload vd)) { return(02_0007); } if (CheckVendor.NotValidResponse(vd)) { return(vd.Message); } vd.Argument = UpdateVendor.FormatArgumentString(vd); download = vd; return(00_0000); }
private void Button_Click_1(object sender, RoutedEventArgs e) { var username = Username.Text; _sr.InteractiveTask(() => { int ret; _sr.Procedure = null; var local = new LoginProcedure(); try { ret = local.Step1(username, Helper.GetTrace()); } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { _sr.Procedure = local; SubwindowNavigator.Navigate(SubwindowPage.Login2); } }); }
public int Step3(out byte[] renewToken) { renewToken = null; if (CheckVendor.NotValidResponse(_serverResponse)) { return(02_0008); } var authRequest = new AuthRequest(); authRequest.Username = _username; authRequest.AuthToken = _serverResponse.AuthToken; authRequest.ReportTime = DateTime.Now; var result = ApiCall.SessionCreate.Call(null, new MilvanethProtocol { Context = null, Data = authRequest }); if (!(result.Data is AuthResponse ar)) { return(02_0007); } if (!CheckVendor.NotValidResponse(ar)) { renewToken = ar.RenewToken; ApiVendor.SetToken(ar.SessionToken); } return(ar.Message); }
public PageLoggedIn(SubwindowRouter sr) { _sr = sr; InitializeComponent(); if (_sr.Dispname == " ") { _sr.InteractiveTask(() => { int ret; string displayName = null; var local = new ProfileProcedure(); try { ret = local.Step2(out var status); if (!CheckVendor.NotValidResponseCode(ret) && status != null) { displayName = status.DisplayName; } } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { _sr.Dispname = displayName; if (this.Dispatcher != null && !this.Dispatcher.CheckAccess()) { this.Dispatcher.Invoke(() => NameDisplay.Text = !string.IsNullOrWhiteSpace(_sr.Dispname) ? $"已登录 {_sr.Dispname}" : $"已登录 {_sr.Username}"); } else { NameDisplay.Text = !string.IsNullOrWhiteSpace(_sr.Dispname) ? $"已登录 {_sr.Dispname}" : $"已登录 {_sr.Username}"; } } }); } NameDisplay.Text = !string.IsNullOrWhiteSpace(_sr.Dispname) ? $"已登录 {_sr.Dispname}" : $"已登录 {_sr.Username}"; }
public int Step2(byte[] oldPassword) { if (CheckVendor.NotValidPassword(oldPassword)) { return(03_0010); } var ret = _loginProcedure.Step2(oldPassword); _serverResponse = _loginProcedure.Step2GetResult(); return(ret); }
public int Step1(string username, long[] trace) { if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidTrace(trace)) { return(03_0010); } _username = username; _trace = trace; _loginProcedure = new LoginProcedure(); return(_loginProcedure.Step1(username, trace)); }
private void Button_Click_2(object sender, RoutedEventArgs e) { var password = Password.Password.ToCharArray(); _sr.InteractiveTask(() => { int ret = 00_0000; try { if (!(_sr.Procedure is LoginProcedure local)) { ret = 02_0009; goto FAIL; } ret = CheckVendor.NotValidResponseCode(ret) ? ret : local.Step2(Encoding.UTF8.GetBytes(password)); byte[] token = null; ret = CheckVendor.NotValidResponseCode(ret) ? ret : local.Step3(out token); _sr.RenewToken = token; if (!CheckVendor.NotValidResponseCode(ret)) { var prof = new ProfileProcedure(); ret = prof.Step2(out var status); _sr.Username = status.Username; _sr.Dispname = status.DisplayName; } } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } FAIL: if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { _sr.Procedure = null; SubwindowNavigator.Navigate(SubwindowPage.LoggedIn); } }); }
public int Step2(out byte[] renewToken) { renewToken = null; if (CheckVendor.NotValidResponse(_authResponse)) { return(02_0008); } renewToken = _authResponse.RenewToken; ApiVendor.SetToken(_authResponse.SessionToken); return(_authResponse.Message); }
public int Step1(string username, LobbyServiceResult service, LobbyCharacterResult character, long[] trace) { if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidService(service) || CheckVendor.NotValidCharacter(character) || CheckVendor.NotValidTrace(trace)) { return(03_0010); } _username = username; var recoveryGame = new RecoveryGame(); recoveryGame.Username = username; recoveryGame.Service = service; recoveryGame.Character = character; recoveryGame.Trace = trace; recoveryGame.ReportTime = DateTime.Now; for (var i = 0; i < 3; i++) { var result = ApiCall.AccountRecoveryGame.Call(null, new MilvanethProtocol { Context = null, Data = recoveryGame }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } if (sr.Message != 01_0003) // retry with pow { return(sr.Message); } recoveryGame.ProofOfWork = ProofOfWorkVendor.CalculateProofOfWork(sr.AuthToken); } return(01_0002); }
public PageRecoveryAccount1(SubwindowRouter sr) { _sr = sr; InitializeComponent(); _sr.InteractiveTask(() => { int ret; if (!SubwindowDataCollector.Collect(5 * 60 * 1000, out var service, out var character)) { Growl.Error("等待超时,请返回上一页重试"); } _sr.Procedure = null; var local = new RecoveryProcedure(); try { if (string.IsNullOrEmpty(_sr.Username)) { ret = 02_0009; goto FAIL; } ret = local.Step1(_sr.Username, service, character, Helper.GetTrace()); } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } FAIL: if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { _sr.Procedure = local; SubwindowNavigator.Navigate(SubwindowPage.Recovery2); } }); }
public int Step3(byte[] newPassword, string email) { if (CheckVendor.NotValidPassword(newPassword)) { return(03_0007); } if (CheckVendor.NotValidEmail(email)) { return(03_0005); } if (CheckVendor.NotValidResponse(_serverResponse)) { return(02_0008); } _password = newPassword; var recoveryRequest = new RecoveryRequest(); recoveryRequest.Email = email; recoveryRequest.Verifier = Srp6Vendor.Srp6Init(_username, _password, out var salt).ToByteArray(); recoveryRequest.Salt = salt; recoveryRequest.GroupParam = Srp6Vendor.BitLength; recoveryRequest.OperationToken = _serverResponse.AuthToken; recoveryRequest.ReportTime = DateTime.Now; var result = ApiCall.AuthReset.Call(null, new MilvanethProtocol { Context = null, Data = recoveryRequest }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } return(sr.Message); }
private void Button_Click_1(object sender, RoutedEventArgs e) { var password = OldPassword.Password.ToCharArray(); _sr.InteractiveTask(() => { int ret; _sr.Procedure = null; var local = new ChangeProcedure(); try { if (string.IsNullOrEmpty(_sr.Username)) { ret = 02_0009; goto FAIL; } ret = local.Step1(_sr.Username, Helper.GetTrace()); ret = CheckVendor.NotValidResponseCode(ret) ? ret : local.Step2(Encoding.UTF8.GetBytes(password)); ret = CheckVendor.NotValidResponseCode(ret) ? ret : local.Step3(); } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } FAIL: if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { _sr.Procedure = local; SubwindowNavigator.Navigate(SubwindowPage.Change2); } }); }
private void Button_Click_2(object sender, RoutedEventArgs e) { var email = Email.Text; _sr.InteractiveTask(() => { if (CheckVendor.NotValidEmail(email)) { Growl.Error("无效邮件地址"); return; } _sr.Email = email; SubwindowNavigator.Navigate(SubwindowPage.RecoveryEmail2); }); }
public int Step2(string code) { if (CheckVendor.NotValidCode(code)) { return(03_0011); } if (CheckVendor.NotValidResponse(_serverResponse)) { return(02_0008); } if (_email == null) { return(00_0000); } var recoveryEmail = new RecoveryEmail(); recoveryEmail.Username = _username; recoveryEmail.Email = _email; recoveryEmail.Trace = _trace; recoveryEmail.Code = code; recoveryEmail.ReportTime = DateTime.Now; var result = ApiCall.AccountRecoveryEmail.Call(null, new MilvanethProtocol { Context = null, Data = recoveryEmail }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } return(sr.Message); }
private void Button_Click(object sender, RoutedEventArgs e) { var displayName = DisplayName.Text; _sr.InteractiveTask(() => { int ret; _sr.Procedure = null; var local = new ProfileProcedure(); try { ret = local.Step1(displayName, Helper.GetTrace(), null); AccountStatus status = null; ret = CheckVendor.NotValidResponseCode(ret) ? ret : local.Step2(out status); if (!CheckVendor.NotValidResponseCode(ret) && status != null) { displayName = status.DisplayName; } } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { Growl.Success("成功修改显示名称"); _sr.Dispname = displayName; SubwindowNavigator.Navigate(SubwindowPage.LoggedIn); } }); }
public int Step1(string username, long[] trace) { var clientChallenge = new ClientChallenge(); if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidTrace(trace)) { return(03_0010); } clientChallenge.Trace = trace; _username = username; clientChallenge.Username = username; clientChallenge.ReportTime = DateTime.Now; for (var i = 0; i < 3; i++) { var result = ApiCall.AuthStart.Call(null, new MilvanethProtocol { Context = null, Data = clientChallenge }); if (!(result.Data is ServerChallenge sc)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sc)) { _serverChallenge = sc; } if (sc.Message != 01_0003) // retry with pow { return(sc.Message); } clientChallenge.SessionId = sc.SessionId; clientChallenge.ProofOfWork = ProofOfWorkVendor.CalculateProofOfWork(sc.ProofOfWork); } return(01_0002); }
private void UploadTask() { if (_dataQueue.TryDequeue(out var data)) { try { var ret = _exchange.Step1(data); if (ret == 04_0511 && ApiVendor.HasToken()) { ApiVendor.RenewToken(DataHolder.Username, ref DataHolder.RenewToken); _exchange.Step1(data); } if (!CheckVendor.NotValidResponseCode(ret)) { _onDataUploaded?.Invoke($"Data Uploaded: {((PackedResult)data.Data).Type.ToString()}"); } } catch (HttpRequestException e) { try { if ((int)e.Data["StatusCode"] == 511 && ApiVendor.HasToken()) { ApiVendor.RenewToken(DataHolder.Username, ref DataHolder.RenewToken); _exchange.Step1(data); } } catch { // ignored } } catch { // ignored } } Thread.Sleep(250); }
public int Step1(string displayName, long[] trace, byte[] additional) { if (CheckVendor.NotValidDisplayName(displayName) || CheckVendor.NotValidTrace(trace) || !ApiVendor.HasToken()) { return(02_0008); } var au = new AccountUpdate(); au.DisplayName = displayName; au.Trace = trace; au.AdditionalData = additional; au.ReportTime = DateTime.Now; var result = ApiCall.AccountUpdate.Call(null, new MilvanethProtocol { Context = null, Data = au }); return(00_0000); }
public int Step1(MilvanethProtocol mp) { if (!ApiVendor.HasToken()) { return(02_0008); } if (mp == null) // as we have karma, this is not too serious { return(00_0001); } if (CheckVendor.NotValidData(mp)) { return(02_0008); } var result = ApiCall.DataUpload.Call(null, mp); return(00_0000); }
public int Step2(byte[] password) { if (CheckVendor.NotValidPassword(password)) { return(03_0010); } if (CheckVendor.NotValidResponse(_serverChallenge)) { return(02_0008); } var clientResponse = new ClientResponse(); clientResponse.SessionId = _serverChallenge.SessionId; clientResponse.ClientEvidence = Srp6Vendor.Srp6Response(_username, password, _serverChallenge.Salt, new BigInteger(_serverChallenge.ServerToken), out var token).ToByteArray(); clientResponse.ClientToken = token.ToByteArray(); clientResponse.ReportTime = DateTime.Now; var result = ApiCall.AuthFinish.Call(null, new MilvanethProtocol { Context = null, Data = clientResponse }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } return(sr.Message); }
public int Step1(string username, string email, long[] trace) { if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidEmail(email) || CheckVendor.NotValidTrace(trace)) { return(03_0010); } _username = username; _email = email; _trace = trace; var recoveryEmail = new RecoveryEmail(); recoveryEmail.Username = username; recoveryEmail.Email = email; recoveryEmail.Trace = trace; recoveryEmail.ReportTime = DateTime.Now; var result = ApiCall.AccountRecoveryEmail.Call(null, new MilvanethProtocol { Context = null, Data = recoveryEmail }); if (!(result.Data is ServerResponse sr)) { return(02_0007); } if (!CheckVendor.NotValidResponse(sr)) { _serverResponse = sr; } return(sr.Message); }
private void Button_Click_2(object sender, RoutedEventArgs e) { var code = VerifyCode.Text; _sr.InteractiveTask(() => { int ret; try { if (!(_sr.Procedure is RecoveryProcedure local)) { ret = 02_0009; goto FAIL; } ret = local.Step2(code); } catch (HttpRequestException ex) { ret = 02_0000 + (int)(ex.Data["StatusCode"]); } catch (Exception) { ret = 02_0000; } FAIL: if (CheckVendor.NotValidResponseCode(ret)) { Growl.Error(MessageVendor.FormatError(ret)); } else { SubwindowNavigator.Navigate(SubwindowPage.Recovery2); } }); }
public int Step2(int itemid, out PackedResultBundle res) { res = null; if (CheckVendor.NotValidItemId(itemid) || !ApiVendor.HasToken()) { return(02_0008); } var result = ApiCall.DataItem.Call(itemid.ToString(), null); if (!(result.Data is PackedResultBundle pr)) { return(02_0007); } if (CheckVendor.NotValidResponse(pr)) { return(pr.Message); } res = pr; return(00_0000); }
public int Step2(out AccountStatus status) { status = null; if (!ApiVendor.HasToken()) { return(02_0008); } var result = ApiCall.AccountStatus.Call(null, null); if (!(result.Data is AccountStatus ac)) { return(02_0007); } if (CheckVendor.NotValidResponse(ac)) { return(ac.Message); } status = ac; return(00_0000); }