Exemplo n.º 1
0
 private async void GetUser_OnClick(object sender, RoutedEventArgs e)
 {
     var userManager = new UserManager("HhYZWTPIldWkWtlmIcx8CLAfE4jZacU4yPg-kv99yB5n9sP1mokPtwgGelQyjbRWcrrLpp6vAwtS7fDKN68U1fh_--k3XQ-LgKraK6W2IktCjuLkYqkIA7KB5G5Qv8Ym6YhSo7y62Fo9Uz4nzHatm5EFaDRk8odPYmkr9ksGi9sH5PaCI5_HjY6UKb2fNIpjHYqpYiBNkJ1EnWlnYHDK1JJp4fk3RSWp9ohFpuXjNmKtzRTqomF28OuCfUvME_Lf9mLsP0peTQX4_yGMtFPdjYJ0qx0b4vcRBEQos4Q8hHf0vmG2ZPNB6ARKgw5ZVzuKf1zkQOqaQe76e0VwvHrZ8fF9S6leZE0wfknGwDglpGfyx71qqovDZ_tHgXAsp5oCDqOpbVPZwX5FgrHsKZInOsj4tLakCpjiPKQmYOmD74MzVyHj2ExOukpR9utsY4FrLiBh3NOcaeau9U_ZjLkGDIcKVSX8SRbr9SnHms3HvQ6-zfSe_isudmFHNxAcZ_t0IuTwC_WR4J26N0IsusjvgHiAvBXLh_73cvmcxvJfIbw");
     var result = await userManager.GetUser("*****@*****.**");
 }
Exemplo n.º 2
0
		public async Task ExecuteValidatePinCommand ()
		{
			if (App.FakeSignup) {
				await App.InitDatabase();
				CanProgress = true;
				OnPropertyChanged ("CanProgress");
				return;
			}

			if (IsBusy)
				return;

			CanProgress = false;

			using (BusyContext ()) {
				using (App.Logger.TrackTimeContext ("FinalizeSignup")) {
					try {
						App.CryptoService.GenerateKeys ();

						var pk = Convert.ToBase64String (App.CryptoService.PublicKey);
						var token = await authenticationService.CreateUserDeviceViaEmail (Settings.Email, Pin, pk, nickName);
						if (token == null || token.AccessToken == null || token.DeviceId == null) {
							App.MessageDialog.SendToast ("Invalid PIN, please try again");
							return;
						}
						// Initial "AccessToken" is actually the devices password, and needed to get new tokens
						Settings.DevicePassword = token.AccessToken;
						Settings.UserDeviceLoginId = token.DeviceLoginId;
						Settings.UserDeviceId = token.DeviceId;

						var finalToken = await authenticationService.Authenticate (Settings.UserDeviceLoginId, Settings.DevicePassword);
						if (finalToken == null || finalToken.AccessToken == null) {

							Settings.AccessToken = string.Empty;
							Settings.UserDeviceId = string.Empty;
							Settings.UserDeviceLoginId = string.Empty;
							App.MessageDialog.SendToast ("Invalid PIN, please try again");
							return;
						}

						Settings.AccessToken = finalToken.AccessToken;
						var nextTime = DateTime.UtcNow.AddSeconds (finalToken.ExpiresIn).Ticks;
						Settings.KeyValidUntil = nextTime;
						//need to store when to refresh

						var userManager = new UserManager (Settings.AccessToken);
						var user = await userManager.GetUser (Settings.Email);

						if (user == null || user.Devices == null) {
							Settings.AccessToken = string.Empty;
							Settings.UserDeviceId = string.Empty;
							Settings.UserDeviceLoginId = string.Empty;
							App.MessageDialog.SendToast ("Issue in registration, please try again.");
							return;
						}

						Settings.MyId = user.Id;
						Settings.Avatar = user.Avatar.Location;

						#pragma warning disable 4014
						// This is like "fire and forget" we are not interested in result
						// also we are not interested in possible exceptions
						ServiceContainer.Resolve<ConnectionManager> ().TryKeepConnectionAsync (); //we don't need to await it
						#pragma warning disable restore

						App.Logger.Track ("PickTheme", new Dictionary<string, string> {
							{ "nickname", Settings.NickName },
							{ "avatar", user.Avatar.Location },
							{ "theme", Settings.AppTheme == AppTheme.Blue ? "blue" : "pink" }
						});
						CanProgress = true;
					} catch (Exception ex) {
						Settings.AccessToken = string.Empty;
						Settings.UserDeviceId = string.Empty;
						Settings.UserDeviceLoginId = string.Empty;
						App.Logger.Report (ex);
						App.MessageDialog.SendToast ("Invalid PIN, please try again");
					}
				}
			}
		}
Exemplo n.º 3
0
	    public async Task<Dictionary<string, string>> GetUserDevicesAndPublicKeys(int userId)
	    {
	        var result = await DataManager.GetFriendPublicKeysAsync(userId);
	        if (result.Count < 1)
            {
                var userManager = new UserManager(Settings.AccessToken);
                var user = await userManager.GetUser(userId);
                return await SaveUserDevices(user);
            }
			return result;
	    }
Exemplo n.º 4
0
		public async Task ExecuteSearchForFriendCommand (string search)
		{
			search.Trim ();

			if (IsBusy)
				return;

			LoadingMessage = "Finding Friend...";

			using (BusyContext ()) {
				using (App.Logger.TrackTimeContext ("FriendSearch")) {
					try {
						App.Logger.Track ("FriendSearch");

						if (!search.IsValidEmail ()) {
							App.MessageDialog.SendToast ("Please enter a valide email address.");
							return;
						}

						if (!await RefreshToken ())
							return;

						var userManager = new UserManager (Settings.AccessToken);

						var result = await userManager.GetUser (search);
						IsBusy = false;

						//did not find anyone
						//add them and send invite
						if (result == null || result.Devices == null) {
							var newFriend = new Friend {
								FriendId = Settings.GenerateTempFriendId (),
								Name = search
							};

							await DataManager.AddOrSaveFriendAsync (newFriend);
							await FriendsSemaphore.WaitAsync();
							Friends.Add (newFriend);
							FriendsSemaphore.Release ();
							await userManager.SendUserInvite (search);
							RaiseNotification ("Your friend hasn't signed up for Kinder Chat yet. We have sent them an invite!", "Friend Request Sent");
							App.Logger.Track ("FriendRequestSent");

							Settings.KinderPoints = Settings.KinderPoints + 60;
							return;
						}

						//did you enter yourself?
						if (result.Email.ToLowerInvariant () == Settings.Email.ToLowerInvariant ()) {
							RaiseNotification ("This is you!");
							return;
						}

						//did you already friend them?
						await FriendsSemaphore.WaitAsync ();
						var alreadyFriend = Friends.FirstOrDefault (f => f.FriendId == result.Id) != null;
						FriendsSemaphore.Release ();

						if (alreadyFriend) {
							RaiseNotification ("Friend already added.");
							return;
						}

						//new friend found and we want to add them.
						var msg = string.Format ("We found {0} do you want to add to friend list?", result.NickName);
						App.MessageDialog.SendConfirmation (msg, "Friend found!",
							async add => {
								if (!add)
									return;

								var newFriend = new Friend {
									FriendId = result.Id,
									Name = result.NickName,
									Photo = EndPoints.BaseUrl + result.Avatar.Location,
									AvatarType = result.Avatar.Type
								};

								await DataManager.AddOrSaveFriendAsync (newFriend);

								await FriendsSemaphore.WaitAsync ();
								Friends.Add (newFriend);
								FriendsSemaphore.Release ();

								RaiseNotification ("Friend added!");
								App.Logger.Track ("FriendAdded");
								Settings.KinderPoints = Settings.KinderPoints + 30;
							});
					} catch (Exception ex) {
						App.Logger.Report (ex);
						RaiseError ("Something has gone wrong, please try to search again.");
					}
				}
			}
		}
Exemplo n.º 5
0
	    public async Task UpdateFriendInfoAsync(Friend item)
        {
			if (App.FakeSignup)
				return;
			
            var userManager = new UserManager(Settings.AccessToken);  //should it be cached?
            User user = null;
            if (item.FriendId < 0)
				user = await userManager.GetUser(item.Name).ConfigureAwait (false);
            else
				user = await userManager.GetUser((int)item.FriendId).ConfigureAwait (false);

            if (user != null && user.Devices != null)
            {

				//update messages for newly connected friends)
				if(item.FriendId < 0){
					var messages = await DataManager.GetUnsentMessagesAsync (item.FriendId).ConfigureAwait (false);

					//update each message with new information.
					foreach (var message in messages) {
						message.FriendName = user.NickName;
						message.FriendPhoto = EndPoints.BaseUrl + user.Avatar.Location;
						message.Recipient = user.Id;
						message.RecipientName = user.NickName;
						await DataManager.AddMessageAsync (message).ConfigureAwait (false);
					}
				}

                //user found
                item.FriendId = user.Id;
                item.Name = user.NickName;
                item.Photo = EndPoints.BaseUrl + user.Avatar.Location;
				item.AvatarType = user.Avatar.Type;
				await SaveUserDevices(user).ConfigureAwait (false);
				await DataManager.AddOrSaveFriendAsync(item).ConfigureAwait (false);
            }
	    }