public HttpResponseMessage PostRegisterWithUsername(UserLite user)
        {
            try
            {
                /*
                 * 1. Check if all required fields are present.
                 * 2. Take hash of Password.
                 * 3. Make gender lower case.
                 * 4. Check if username is already taken.
                 * 5. Check if email is already registered.
                 * 6. If not, create a new user and return its ID to user.
                 *
                 */
                if (user == null)
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable,
                        GetErrorResponse("Missing required param."));

                if (
                    //|| ExtensionMethods.IsEmptyOrSpace(user.FirstName)
                    //|| ExtensionMethods.IsEmptyOrSpace(user.LastName)
                    //||
                    ExtensionMethods.IsEmptyOrSpace(user.RoleId)
                    || user.Credentials == null
                    || ExtensionMethods.IsEmptyOrSpace(user.Credentials.Email)
                    || ExtensionMethods.IsEmptyOrSpace(user.Credentials.Username)
                    || ExtensionMethods.IsEmptyOrSpace(user.Credentials.Password)
                    //|| ExtensionMethods.IsEmptyOrSpace(user.Credentials.MobileNumber)
                    )
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse("Missing required param."));

                user.Credentials.Password = ExtensionMethods.ToSHA1EncodedString(user.Credentials.Password);
                user.Credentials.Username = user.Credentials.Username.Trim().ToLower();

                if (user.Credentials.Email.IsValidEmail() == false)
                    return Request.CreateResponse(HttpStatusCode.BadRequest, GetErrorResponse("Incorrect email address provided."));
                // Check if already signed up.
                if (_userManager.EmailExists(user.Credentials.Email))
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse("Email already registered."));

                if (_userManager.UsernameExists(user.Credentials.Username))
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse("Username already registered."));

                User savedUser = _userManager.AddUser(user);
                UserLite lite = new UserLite();
                lite.CopyFromUserIncludeCredentials(savedUser);
                UserCreationResponse result = new UserCreationResponse
                {
                    UserId = savedUser.UserId,
                    Token = savedUser.Credential.SecurityToken,
                    User = lite
                };
                return Request.CreateResponse(HttpStatusCode.OK, result);
            }catch (ParamMissingException e){
                return Request.CreateResponse(HttpStatusCode.NotAcceptable, new ErrorResponse { Message = e.Message });
            }catch (AlreadyExistsException e){
                return Request.CreateResponse(HttpStatusCode.Conflict, new ErrorResponse{ Message = e.Message });
            }catch (InvalidValueException e){
                return Request.CreateResponse(HttpStatusCode.NotAcceptable, new ErrorResponse{ Message = e.Message });
            }catch (UserNotFoundException e){
                return Request.CreateResponse(HttpStatusCode.NotFound, new ErrorResponse{ Message = e.Message });
            }catch (Exception e){
                return Request.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse{ Message = "Oops, server encountered an issue... " + e.Message});
            }
        }
 public ActionResult LoginWithFacebook(FbCredentials userCred)
 {
     try
     {
         if (userCred == null
             || ExtensionMethods.IsEmptyOrSpace(userCred.FbId)
             || ExtensionMethods.IsEmptyOrSpace(userCred.FbAccessToken))
             //  return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse("Missing required param"));
             return null;
         User user = _userManager.LoginWithFacebook(userCred);
         if (user == null)
            // return Request.CreateResponse(HttpStatusCode.Unauthorized, GetErrorResponse("Login failed."));
             return null;
         else
         {
             UserLite lite = new UserLite();
             lite.CopyFromUserIncludeCredentials(user);
             UserCreationResponse result = new UserCreationResponse
             {
                 UserId = user.UserId,
                 Token = user.Credential.SecurityToken,
                 User = lite
             };
            // return Request.CreateResponse(HttpStatusCode.OK, result);
             return null;
         }
     }
     catch (ParamMissingException e)
     {
         return null;
        // return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse(e.Message));
     }
     catch (AlreadyExistsException e)
     {
         return null;
        // return Request.CreateResponse(HttpStatusCode.Conflict, GetErrorResponse(e.Message));
     }
     catch (InvalidValueException e)
     {
         return null;
        // return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse(e.Message));
     }
     catch (UserNotFoundException e)
     {
         return null;
         //return Request.CreateResponse(HttpStatusCode.NotFound, GetErrorResponse(e.Message));
     }
     catch (Exception e)
     {
         return null;
         //return Request.CreateResponse(HttpStatusCode.InternalServerError, GetErrorResponse("Oops, server encountered an issue... " + e.Message));
     }
 }
        public HttpResponseMessage Login(CredentialsLite userCred)
        {
            try
            {
                if (userCred == null
                    //|| ExtensionMethods.IsEmptyOrSpace(userCred.Email)
                    || (ExtensionMethods.IsEmptyOrSpace(userCred.Username)
                    && ExtensionMethods.IsEmptyOrSpace(userCred.Email))
                    || ExtensionMethods.IsEmptyOrSpace(userCred.Password))
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable, GetErrorResponse("Missing required param"));

                userCred.Password = ExtensionMethods.ToSHA1EncodedString(userCred.Password);
                //userCred.Email = userCred.Email.Trim().ToLower();
                if(string.IsNullOrWhiteSpace(userCred.Username) == false)
                    userCred.Username = userCred.Username.Trim().ToLower();
                if (string.IsNullOrWhiteSpace(userCred.Email) == false)
                    userCred.Email = userCred.Email.Trim().ToLower();
                User user = _userManager.Login(userCred);
                if (user == null)
                    return Request.CreateResponse(HttpStatusCode.Unauthorized, GetErrorResponse("Login failed."));
                else
                {
                    UserLite lite = new UserLite();
                    lite.CopyFromUserIncludeCredentials(user);
                    UserCreationResponse result = new UserCreationResponse
                    {
                        UserId = user.UserId,
                        Token = user.Credential.SecurityToken,
                        User = lite
                    };
                    return Request.CreateResponse(HttpStatusCode.OK, result);
                }
            }
            catch (ParamMissingException e){
                return Request.CreateResponse(HttpStatusCode.NotAcceptable, new ErrorResponse{ Message = e.Message });
            } catch (AlreadyExistsException e){
                return Request.CreateResponse(HttpStatusCode.Conflict, new ErrorResponse{ Message = e.Message });
            }catch (InvalidValueException e){
                return Request.CreateResponse(HttpStatusCode.NotAcceptable, new ErrorResponse{ Message = e.Message });
            }catch (UserNotFoundException e){
                return Request.CreateResponse(HttpStatusCode.NotFound, new ErrorResponse{ Message = e.Message });
            }catch (Exception e){
                return Request.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Message = "Oops, server encountered an issue... " + e.Message });
            }
        }