Example #1
0
        public IActionResult socialLogin([FromBody] user user)
        {
            Login login  = new Login();
            var   isUser = login.socialLogin(user);

            if (isUser)
            {
                //  var role = login.Role(user.Email);
                var Id     = login.getUserId(user);
                var tokenn = GenerateJSONWebToken();
                // return Ok("User Login Successfull");
                LoginSuccess obj = new LoginSuccess()
                {
                    A     = "user",
                    token = tokenn,
                    id    = Id,
                    Name  = login.getUserName(Id)
                };
                return(Ok(obj));
            }
            else
            {
                return(BadRequest());
            }
        }
        private object DeserializeLoginPacket(UncompressedPacket packet)
        {
            var    br = new SpanReader(packet.Data);
            object innerPacket;

            switch (packet.PacketId)
            {
            // Disconnect
            case 0x00:
                innerPacket = LoginDisconnect.Deserialize(ref br);
                break;

            // Login Success
            case 0x02:
                innerPacket = LoginSuccess.Deserialize(ref br);
                break;

            default:
                throw new InvalidDataException($"Unrecognizable packet id: 0x{packet.PacketId:X2}.");
            }

            if (!br.IsCosumed)
            {
                throw new InvalidDataException($"Packet data is not fully consumed.");
            }
            return(innerPacket);
        }
Example #3
0
        private void LoginButton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(IdText.Text) ||
                string.IsNullOrWhiteSpace(PasswordText.Text))
            {
                MessageBox.Show("누락된 항목이 있습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            var userList = Globals.UserListSheet.GetUserList().ToList();

            var id = IdText.Text;
            var pw = PasswordText.Text;

            var user = userList
                       .Where(x => x.Id == id)
                       .Where(x => x.Password == pw)
                       .FirstOrDefault();

            if (user != null)
            {
                LoginSuccess?.Invoke(this, user);
            }
            else
            {
                MessageBox.Show("아이디 혹은 비밀번호가 일치하지 않습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #4
0
 private void LoginBtn_Click(object sender, EventArgs e)
 {
     //UserAcount的登录方法 实现登陆
     userAcount = UserAcount.LoginAcount(userTxt.Text.Trim(), pwdTxt.Text.Trim());
     if (userAcount != null)//登录成功
     {
         if (userAcount.accountState == 0)
         {
             MessageBox.Show("密码过期!");
             return;
         }
         if (userAcount.accountState == 2)
         {
             MessageBox.Show("登录失败,用户名或密码错误!");
             return;
         }
         if (userAcount.accountState == 1)
         {
             //登录成功后,用户控件的父级窗体要关闭,显示出主窗体
             //使用事件实现,触发事件
             LoginSuccess?.Invoke(this, null);
         }
     }
     else
     {
         MessageBox.Show("无法登陆,请重试!");
         return;
     }
 }
Example #5
0
        public void Process(Context context)
        {
            var user = context.Server.Database.QueryUser(Username);

            if (user != null)
            {
                if (user.Password != Password)
                {
                    context.SendAndProcessMessage(new LoginFailure());
                    return;
                }
            }
            else
            {
                user = context.Server.Database.InsertUser(Username, Password, context.Salt);
            }

            // Remove any older sessions from this user (duplicate logins)
            var otherSession = context.Server.GetSession(user);

            if (otherSession != null)
            {
                context.Server.RemoveSession(otherSession);
                otherSession.TcpClient.Close();
            }

            context.User = user;

            var success = new LoginSuccess();

            context.SendAndProcessMessage(success);
        }
Example #6
0
        public override async Task Process(IXFireClient context)
        {
            var user = await context.Server.Database.QueryUser(Username);

            if (user != null)
            {
                if (!BCrypt.Net.BCrypt.Verify(Password, user.Password))
                {
                    await context.SendAndProcessMessage(new LoginFailure());

                    return;
                }
            }
            else
            {
                var hashPassword = BCrypt.Net.BCrypt.HashPassword(Password);
                user = await context.Server.Database.InsertUser(Username, hashPassword, context.Salt);
            }

            // Remove any older sessions from this user (duplicate logins)
            context.RemoveDuplicatedSessions(user);

            context.User = user;

            var success = new LoginSuccess();
            await context.SendAndProcessMessage(success);
        }
Example #7
0
        public override void Process(IXFireClient context)
        {
            var user = context.Server.Database.QueryUser(Username);

            if (user != null)
            {
                if (user.Password != Password)
                {
                    context.SendAndProcessMessage(new LoginFailure());
                    return;
                }
            }
            else
            {
                user = context.Server.Database.InsertUser(Username, Password, context.Salt);
            }

            // Remove any older sessions from this user (duplicate logins)
            context.RemoveDuplicatedSessions(user);

            context.User = user;

            var success = new LoginSuccess();

            context.SendAndProcessMessage(success);
        }
Example #8
0
        public void SetResult(int status)
        {
            Authenticated = status == 0;
            try
            {
                switch (status)
                {
                case LOGIN_SUCCESS:
                    LoginSuccess?.Invoke(this, EventArgs.Empty);
                    return;

                case LOGIN_INVALID:
                    LoginFailed?.Invoke(this, new LoginFailedEventArgs(false));
                    return;

                case LOGIN_BANNED:
                    LoginFailed?.Invoke(this, new LoginFailedEventArgs(true));
                    return;
                }
            }
            finally
            {
                Interlocked.CompareExchange(ref activeAuthRequest, 0, 1);
            }
        }
        // POST: api/Login
        public HttpResponseMessage Post(LoginModel creds)
        {
            HttpResponseMessage response;

            if (creds != null)
            {
                response = Request.CreateResponse(HttpStatusCode.OK);
                string       body;
                string       result  = client.Login(creds.username, creds.password, "");
                LoginSuccess Success = JsonSerializer.Deserialize <LoginSuccess>(result);
                if (Success.Email != null)
                {
                    body = "success";
                }
                else
                {
                    body = "fail";
                }
                response.Content = new StringContent(body);
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.InternalServerError);
            }
            return(response);
        }
Example #10
0
        public async void Login()
        {
            Busy = true;

            if (string.IsNullOrEmpty(Email) || string.IsNullOrEmpty(Password))
            {
                LoginFailed?.Invoke(this, "Email and Password are required.");

                Busy = false;

                return;
            }

            var result = await Services.Host.AuthService.Authenticate(Email, Password);

            if (result.Success)
            {
                LoginSuccess?.Invoke(this, EventArgs.Empty);

                Busy = false;

                return;
            }

            LoginFailed?.Invoke(this, result.error_description);

            Busy = false;
        }
Example #11
0
        static async Task Main(string[] args)
        {
            // Run this together with SnoopApp for diagnostics
            connection = new DeviceConnection();
            connection.UnknownCommandReceived += Connection_UnknownCommandReceived;
            await connection.Connect("127.0.0.1", 5000);

            Console.WriteLine("Connected");
            Console.Write("Password: "******"admin", password);

            Console.WriteLine("Logged in");
            Console.WriteLine("Device name: {0}", loginSuccess.ProductInfo.DeviceName);
            Console.WriteLine("Firmware version: {0}", loginSuccess.ProductInfo.FirmwareVersion);
            StreamFrame keyframe = await connection.SnapKeyframe(0);

            Console.WriteLine("Keyframe received");
            Console.WriteLine("Width: {0}", keyframe.Width);
            Console.WriteLine("Height: {0}", keyframe.Height);
            // File.WriteAllBytes("C:\\temp\\keyframe.h264", keyframe.Data);
            connection.StreamFrameReceived += Connection_StreamFrameReceived;
            fs       = new FileStream("C:\\temp\\channel0a.h264", FileMode.Create, FileAccess.Write, FileShare.Read);
            streamId = await connection.StreamStart(0);

            // Console.ReadKey();
            await(new TaskCompletionSource <bool>().Task);
        }
Example #12
0
        void Login(ServerMessage request)
        {
            if (loggedIn != null)
            {
                SingleResponse.Send(clientStream, ServerMessageType.Fail,
                                    "You're already logged in");
                return;
            }
            var login = (LoginRequest)request;

            if (!s.Db.AuthenticateUser(login.Username, login.Password))
            {
                SingleResponse.Send(clientStream, ServerMessageType.AuthenticationError,
                                    "The username or password provided was incorrect");
                return;
            }
            loggedIn           = login.Username;
            currentPermissions = s.Db.GetPermissions(loggedIn);
            var maxIPcount = s.Permissions.MaxConcurrentIPs(currentPermissions);

            if (!s.IpManager.AddIP(loggedIn, ip, maxIPcount))
            {
                SingleResponse.Send(clientStream, ServerMessageType.NotPermitted,
                                    "You're logged into too many devices. The most your account level allows is "
                                    + maxIPcount);
                return;
            }
            sessionKey = s.HolePunchServer.Add(ip);
            LoginSuccess.Send(clientStream, sessionKey);
        }
        private Task DispatchPacket(LoginSuccess packet)
        {
            var requestGrain = _sessionScope.ServiceProvider.Resolve <ILoginHandler>();

            requestGrain.OnLoginSuccess(packet);
            return(Task.CompletedTask);
        }
Example #14
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Msgnum != 0)
            {
                hash ^= Msgnum.GetHashCode();
            }
            if (Uin.Length != 0)
            {
                hash ^= Uin.GetHashCode();
            }
            if (Sessionid.Length != 0)
            {
                hash ^= Sessionid.GetHashCode();
            }
            if (Plat != 0)
            {
                hash ^= Plat.GetHashCode();
            }
            if (LoginSuccess != 0)
            {
                hash ^= LoginSuccess.GetHashCode();
            }
            if (Nsid != 0)
            {
                hash ^= Nsid.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Example #15
0
 private void LoginSuccessCommand(NetworkMessage message)
 {
     Console.WriteLine("Success!!!");
     if (message.TryGetObject <LoginSuccess>(out LoginSuccess success))
     {
         LoginSuccess?.Invoke(success.Users);
     }
 }
 public void OnLoginSuccess()
 {
     if (LoginSuccess != null)
     {
         LoginSuccess.Invoke();
         UpdateDisplayName();
     }
 }
Example #17
0
        private void ButtonEnterRoom_OnClick(object sender, RoutedEventArgs e)
        {
            string roomKey = RoomKey.Text.Trim();

            if (CheckRoomKey(roomKey))
            {
                LoginSuccess?.Invoke(roomKey);
            }
        }
Example #18
0
        public string PostD([FromBody] user model)
        {
            Login login = new Login();

            if (ModelState.IsValid)
            {
                if (login.login(model) == 1)
                {
                    var tokenn = GenerateJSONWebToken();
                    var Id     = login.getUserId(model);

                    // return Ok("User Login Successfull");
                    LoginSuccess obj = new LoginSuccess()
                    {
                        A     = "user",
                        token = tokenn,
                        id    = Id,
                        Name  = login.getUserName(Id)
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
                }
                else if (login.login(model) == 2)
                {
                    var          tokenn = GenerateJSONWebToken();
                    var          Id     = login.getUserId(model);
                    LoginSuccess obj    = new LoginSuccess()
                    {
                        A     = "admin",
                        token = tokenn,
                        id    = Id,
                        Name  = login.getUserName(Id)
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));

                    // return Ok("Admin Login Successfull");
                }
                else
                {
                    // return BadRequest("Email or password Invalid");
                    LoginSuccess obj = new LoginSuccess()
                    {
                        A = "Email or password Invalid"
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
                }
            }
            else
            {
                // return BadRequest("Model Invalid");
                LoginSuccess obj = new LoginSuccess()
                {
                    A = "Email or password Invalid"
                };
                return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
            }
        }
 private Task LoggedIn(string message)
 {
     if (debug)
     {
         Console.WriteLine($"OBSERVER: NetworkManagerClient LoggedIn");
     }
     MyData = JsonConvert.DeserializeObject <Player>(message);
     LoginSuccess?.Invoke(this, message);
     return(Task.CompletedTask);
 }
Example #20
0
        private void ParseLoginSuccess(byte[] msg, int currIndex)
        {
            LoginSuccess.parseUsersGames(msg, ref users, ref games, currIndex);

            GUIBundle bund = new GUIBundle();

            bund.Users = new UserList(users);
            gamesChanged(games);
            WindowMngr.updateWindow(bund);
        }
Example #21
0
        private void OnUserLoggedIn(User user)
        {
            User = user;
            LoginSuccess success = new LoginSuccess();

            success.Users = server.ConnectedUsers();

            Send(MessageProtocols.LoginSuccess, success);
            //TODO Tell other clients another user has logged in
        }
Example #22
0
 void ILoginHandler.OnLoginSuccess(LoginSuccess loginSuccess)
 {
     if (_pendingLogins.TryDequeue(out var tcs))
     {
         var user = new User.User(Guid.Parse(loginSuccess.UUID), loginSuccess.Username, _eventAggregator);
         _packetRouter.BindToUser(user);
         tcs.SetResult(new LoginStartSuccessResponse {
             User = user
         });
     }
 }
Example #23
0
        private async void LoginBtn_Click(object sender, EventArgs e)
        {
            var user = await GetUserAsync(nameBox.Text, passwordBox.Text);

            if (user != null)   // User exists
            {
                LoginSuccess?.Invoke(sender, new UserEventArgs {
                    User = user
                });
            }
        }
Example #24
0
 public void SignIn()
 {
     authService.StartSignIn((authId) =>
     {
         HuaweiId = authId;
         LoginSuccess?.Invoke(authId);
     }, (error) =>
     {
         HuaweiId = null;
         LoginFailed?.Invoke(error);
     });
 }
Example #25
0
        public static void LoginSuccess(LoginSuccess P)
        {
            SceneFunctions.LoginSuccess();

            if (P.CharacterList != null)
            {
                P.CharacterList.Sort(delegate(SelectCharacterInfo S1, SelectCharacterInfo S2) { return(S2.LastAccess.CompareTo(S1.LastAccess)); });
            }

            SelectScene.CharacterList = P.CharacterList;
            SelectScene.UpdateSelectButtons();
        }
        public string PostD([FromBody] user model)
        {
            Login login = new Login();

            if (ModelState.IsValid)
            {
                if (login.login(model) != 0 && login.login(model) != 2)    //if  BLL return 1 it means it is an user then store id, to be used in browser local storage.
                {
                    var tokenn = GenerateJSONWebToken();
                    //IN THIS case users login is successfull.
                    LoginSuccess obj = new LoginSuccess()
                    {
                        UserId = login.login(model),    // store the userid in loginsuccess class.
                        A      = "user",
                        token  = tokenn,
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
                }
                else if (login.login(model) == 2)
                {
                    var          tokenn = GenerateJSONWebToken();
                    LoginSuccess obj    = new LoginSuccess()
                    {
                        A     = "admin",
                        token = tokenn
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));



                    // return Ok("Admin Login Successfull");
                }
                else
                {
                    LoginSuccess obj = new LoginSuccess()
                    {
                        A = "Email or password Invalid"
                    };
                    return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
                }
            }
            else
            {
                LoginSuccess obj = new LoginSuccess()
                {
                    A = "Email or password Invalid"
                };
                return(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
            }
        }
		/// <summary>
		/// See docs in <see cref="SoomlaProfile.Login"/>
		/// </summary>
		/// <param name="success">Callback function that is called if login was successful.</param>
		/// <param name="fail">Callback function that is called if login failed.</param>
		/// <param name="cancel">Callback function that is called if login was cancelled.</param>
		public override void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel) {
			FB.LogInWithReadPermissions(this.loginPermissions, (ILoginResult result) => {
				if (result.Error != null) {
					SoomlaUtils.LogDebug (TAG, "LoginCallback[result.Error]: " + result.Error);
					fail(result.Error);
				}
				else if (!FB.IsLoggedIn) {
					SoomlaUtils.LogDebug (TAG, "LoginCallback[cancelled]");
					cancel();
				}
				else {
					success();
				}
			});
		}
Example #28
0
        protected override void HandleAppPacket(AppPacket packet)
        {
            Hexdump(packet.Data);

            switch ((LoginOp)packet.Opcode)
            {
            case LoginOp.ChatMessage:
                Send(AppPacket.Create(LoginOp.Login, new Login(), cryptoBlob));
                break;

            case LoginOp.LoginAccepted:
                if (packet.Data.Length < 80)
                {
                    LoginSuccess?.Invoke(this, false);
                }
                else
                {
                    var dec = Decrypt(packet.Data, 10);
                    var rep = new LoginReply(dec);
                    accountID  = rep.AcctID;
                    sessionKey = rep.Key;
                    LoginSuccess?.Invoke(this, true);
                }
                break;

            case LoginOp.ServerListResponse:
                var header = packet.Get <ServerListHeader>();
                ServerList?.Invoke(this, header.Servers);
                break;

            case LoginOp.PlayEverquestResponse:
                var resp = packet.Get <PlayResponse>();

                if (!resp.Allowed)
                {
                    UnityEngine.Debug.LogError("Response flagged Allowed false");
                    curPlay = null;
                }

                PlaySuccess?.Invoke(this, curPlay);
                break;

            default:
                UnityEngine.Debug.Log($"Unhandled packet in LoginStream: {(LoginOp) packet.Opcode} (0x{packet.Opcode:X04})");
                Hexdump(packet.Data);
                break;
            }
        }
Example #29
0
        /// <summary>
        /// See docs in <see cref="SoomlaProfile.Login"/>
        /// </summary>
        /// <param name="success">Callback function that is called if login was successful.</param>
        /// <param name="fail">Callback function that is called if login failed.</param>
        /// <param name="cancel">Callback function that is called if login was cancelled.</param>
        public override void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel)
        {
            FB.Login(this.permissionsStr, (FBResult result) => {
                if (result.Error != null)
                {
                    SoomlaUtils.LogDebug(TAG, "LoginCallback[result.Error]: " + result.Error);
                    fail(result.Error);
                }
                else if (!FB.IsLoggedIn)
                {
                    SoomlaUtils.LogDebug(TAG, "LoginCallback[cancelled]");
                    cancel();
                }
                else
                {
                    checkPermissions("publish_actions", "user_birthday");

                    FB.API("/me/permissions", Facebook.HttpMethod.GET, delegate(FBResult response) {
                        // inspect the response and adapt your UI as appropriate
                        // check response.Text and response.Error
                        SoomlaUtils.LogWarning(TAG, "me/permissions " + response.Text);
                    });

                    FB.API("/me?fields=id,name,email,first_name,last_name,picture",
                           Facebook.HttpMethod.GET, (FBResult result2) => {
                        if (result2.Error != null)
                        {
                            SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Error]: " + result2.Error);

                            fail(result2.Error);
                        }
                        else
                        {
                            SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Text]: " + result2.Text);
                            SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Texture]: " + result2.Texture);
                            string fbUserJson       = result2.Text;
                            UserProfile userProfile = UserProfileFromFBJsonString(fbUserJson);

                            SoomlaProfile.StoreUserProfile(userProfile, true);

                            success(userProfile);
                        }
                    });
                }
            });
        }
Example #30
0
        public void OnEvent(SdkEvent sdkEvent)
        {
            if (sdkEvent.Event.Equals("Connected"))
            {
                Connected?.Invoke(this);
            }
            else if (sdkEvent.Event.Equals("ConnectionFailed"))
            {
                ConnectionFailed?.Invoke(this, sdkEvent.GetEventArgs <ConnectionFailedEventArgs>());
            }
            else if (sdkEvent.Event.Equals("Disconnected"))
            {
                Disconnected?.Invoke(this);
            }
            else if (sdkEvent.Event.Equals("LoginSuccess"))
            {
                LoginSuccess?.Invoke(this, sdkEvent.GetEventArgs <LoginSuccessEventArgs>());
            }
            else if (sdkEvent.Event.Equals("LoginFailed"))
            {
                LoginFailed?.Invoke(this, sdkEvent.GetEventArgs <LoginFailedEventArgs>());
            }
            else if (sdkEvent.Event.Equals("RefreshTokenSuccess"))
            {
                RefreshTokenSuccess?.Invoke(this, sdkEvent.GetEventArgs <RefreshTokenSuccessEventArgs>());
            }
            else if (sdkEvent.Event.Equals("RefreshTokenFailed"))
            {
                RefreshTokenFailed?.Invoke(this, sdkEvent.GetEventArgs <RefreshTokenFailedEventArgs>());
            }
            else if (sdkEvent.Event.Equals("OneTimeKeyGenerated"))
            {
                OneTimeKeyGenerated?.Invoke(this, sdkEvent.GetEventArgs <OneTimeKeyGeneratedEventArgs>());
            }
            else if (sdkEvent.Event.Equals("IncomingCall"))
            {
                var eventArgs = sdkEvent.GetEventArgs <IncomingCallEventArgs>();
                eventArgs.Call = GetIncomingCall(eventArgs.callId);

                IncomingCall?.Invoke(this, eventArgs);
            }
            else
            {
                Debug.LogError($"Unknown Event '{sdkEvent.Event}'");
            }
        }
Example #31
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (LoginSuccess != false)
            {
                hash ^= LoginSuccess.GetHashCode();
            }
            if (SessionTicket.Length != 0)
            {
                hash ^= SessionTicket.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
		/// <summary>
		/// See docs in <see cref="SoomlaProfile.Login"/>
		/// </summary>
		/// <param name="success">Callback function that is called if login was successful.</param>
		/// <param name="fail">Callback function that is called if login failed.</param>
		/// <param name="cancel">Callback function that is called if login was cancelled.</param>
		public override void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel) {
			FB.Login("email,publish_actions", (FBResult result) => {
				if (result.Error != null) {
					SoomlaUtils.LogDebug (TAG, "LoginCallback[result.Error]: " + result.Error);
					fail(result.Error);
				}
				else if (!FB.IsLoggedIn) {
					SoomlaUtils.LogDebug (TAG, "LoginCallback[cancelled]");
					cancel();
				}
				else {
					FB.API("/me/permissions", Facebook.HttpMethod.GET, delegate (FBResult response) {
						// inspect the response and adapt your UI as appropriate
						// check response.Text and response.Error
						SoomlaUtils.LogWarning(TAG, "me/permissions " + response.Text);
					});
					
					FB.API("/me?fields=id,name,email,first_name,last_name,picture",
					       Facebook.HttpMethod.GET, (FBResult result2) => {
						if (result2.Error != null) {
							SoomlaUtils.LogDebug (TAG, "ProfileCallback[result.Error]: " + result2.Error);
							
							fail(result2.Error);
						}
						else {
							SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Text]: "+result2.Text);
							SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Texture]: "+result2.Texture);
							string fbUserJson = result2.Text;
							UserProfile userProfile = UserProfileFromFBJsonString(fbUserJson);
							
							SoomlaProfile.StoreUserProfile (userProfile, true);
							
							success(userProfile);
						}
					});
				}
			});
		}
        /// <summary>
        /// See docs in <see cref="SoomlaProfile.Login"/>
        /// </summary>
        /// <param name="success">Callback function that is called if login was successful.</param>
        /// <param name="fail">Callback function that is called if login failed.</param>
        /// <param name="cancel">Callback function that is called if login was cancelled.</param>
        public override void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel)
        {
            FB.Login(this.loginPermissionsStr, (FBResult result) => {
                if (result.Error != null) {
                    SoomlaUtils.LogDebug (TAG, "LoginCallback[result.Error]: " + result.Error);
                    fail(result.Error);
                }
                else if (!FB.IsLoggedIn) {
                    SoomlaUtils.LogDebug (TAG, "LoginCallback[cancelled]");
                    cancel();
                }
                else {
                    this.fetchPermissions(() => {
                        FB.API("/me?fields=id,name,email,first_name,last_name,picture",
                               Facebook.HttpMethod.GET, (FBResult meResult) => {
                            if (meResult.Error != null) {
                                SoomlaUtils.LogDebug (TAG, "ProfileCallback[result.Error]: " + meResult.Error);
                                fail(meResult.Error);
                            }
                            else {
                                SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Text]: "+meResult.Text);
                                SoomlaUtils.LogDebug(TAG, "ProfileCallback[result.Texture]: "+meResult.Texture);
                                string fbUserJson = meResult.Text;
                                UserProfile userProfile = UserProfileFromFBJsonString(fbUserJson);

                                SoomlaProfile.StoreUserProfile (userProfile, true);

                                success(userProfile);
                            }
                        });
                    },
                    (string errorMessage) => {
                        fail(errorMessage);
                    });
                }
            });
        }
 /// <summary>
 /// See docs in <see cref="SoomlaProfile.Login"/>
 /// </summary>
 public abstract void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel);
		/// <summary>
		/// See docs in <see cref="SoomlaProfile.Login"/>
		/// </summary>
		public override void Login(LoginSuccess success, LoginFailed fail, LoginCancelled cancel) {}