Ejemplo n.º 1
0
        public ActionResult <MessageModel <RegisterResponseDTO> > Login([FromBody] LoginUserRequest loginRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var loginUserRegistger = new UserRegisterType()
            {
                AuthPlatformId = loginRequest.userId,
                RegisterType   = (byte)loginRequest.loginType
            };

            dynamic verifiedData = userService.VerifyUserInfo(loginRequest.accessToken, loginRequest.permissions, loginUserRegistger).Result;



            if (verifiedData == null || verifiedData["name"] == null || verifiedData["email"] == null)
            {
                return(Unauthorized(new MessageModel <Object>
                {
                    Status = (int)HttpStatusCode.Unauthorized,
                    Success = false,
                    Msg = "Unauthorized",
                    Data = null
                }));
            }

            loginUserRegistger.Name  = verifiedData["name"].ToString();
            loginUserRegistger.Email = verifiedData["email"].ToString();

            if (userService.GetUserInfo(loginUserRegistger).Result == null)
            {
                userService.AddNewUserInfo(loginUserRegistger).Wait();
            }
            var loginUser = userService.GetUserInfo(loginUserRegistger).Result;

            var accessToken = this.jwtHandler.CreateAccessToken((int)loginUser.Id, loginUser.Email, loginUser.Name);

            var          remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
            UserLoginLog loginLog        = new UserLoginLog
            {
                Ip        = remoteIpAddress.ToString(),
                LoginType = (byte)loginRequest.loginType,
                LoginTime = DateTime.UtcNow,
                UserId    = loginUser.Id
            };

            userLoginLogService.AddLoginLog(loginLog);

            return(Ok(new MessageModel <RegisterResponseDTO>
            {
                Data = new RegisterResponseDTO()
                {
                    Jwt = accessToken.Token,
                    kycStatus = (short)loginUser.KycStatus
                }
            }));
        }
Ejemplo n.º 2
0
        public async Task <UserInfoView> GetUserInfo(UserRegisterType loginUser)
        {
            var list = await dbContext.UserInfoView.Where(user => user.AuthPlatformId == loginUser.AuthPlatformId && user.RegisterType == loginUser.RegisterType).ToListAsync();

            var loggedingUser = list.FirstOrDefault();

            return(loggedingUser);
        }
Ejemplo n.º 3
0
        public bool ReigsterUser(User user, UserArc userArc, UserRegisterType userRegisterType)
        {
            dbContext.User.Update(user);
            dbContext.UserArc.Update(userArc);
            dbContext.UserRegisterType.Update(userRegisterType);

            dbContext.SaveChanges();

            return(true);
        }
Ejemplo n.º 4
0
        public async Task <bool> AddNewUserInfo(UserRegisterType loginUser)
        {
            using var transaction = dbContext.Database.BeginTransaction();
            try
            {
                var user = new User();
                await dbContext.User.AddAsync(user);

                dbContext.SaveChanges();
                var userArc = new UserArc()
                {
                    UserId = user.Id
                };
                await dbContext.UserArc.AddAsync(userArc);

                dbContext.SaveChanges();


                var userRegisterType = new UserRegisterType()
                {
                    UserId         = user.Id,
                    AuthPlatformId = loginUser.AuthPlatformId,
                    RegisterType   = loginUser.RegisterType,
                    Email          = loginUser.Email,
                    Name           = loginUser.Name
                };
                await dbContext.UserRegisterType.AddAsync(userRegisterType);

                dbContext.SaveChanges();

                // Commit transaction if all commands succeed, transaction will auto-rollback
                // when disposed if either commands fails
                transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, null);
                transaction.Rollback();
                return(false);
            }
        }
Ejemplo n.º 5
0
        public async Task <dynamic> VerifyUserInfo(string accessToken, string permissions, UserRegisterType loginUser)
        {
            switch ((LoginType)loginUser.RegisterType)
            {
            case LoginType.FB:
                IAuthService authService = authServices.Single(service => service.LoginType == LoginType.FB);
                return(await authService.VerifyUserInfo(accessToken, permissions, loginUser));

            default:
                return(null);
            }
        }
        public ActionResult <MessageModel <RegisterResponseDTO> > ModifyOwnUserInfo([FromBody] RegisterRequest registerReq)
        {
            UserInfoDTO userModel = null;

            Tools.Utility.TokenResource accessToken = null;
            if (!ModelState.IsValid)
            {
                var errors = ModelState.Select(x => x.Value.Errors)
                             .Where(y => y.Count > 0)
                             .ToList();

                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = string.Join(",", errors)
                }));
            }


            var     userId  = long.Parse(User.FindFirstValue("id"));
            UserArc userArc = userService.GetUserArcById(userId);

            if (userArc.KycStatus != (short)KycStatusEnum.DRAFT_MEMBER)
            {
                return(BadRequest(new MessageModel <RegisterResponseDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = "Only Draft member can register"
                }
                                  ));
            }
            if (String.IsNullOrEmpty(userArc.IdImageA) || String.IsNullOrEmpty(userArc.IdImageB))
            {
                return(BadRequest(new MessageModel <RegisterResponseDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = "Please upload your ID photo"
                }
                                  ));
            }
            User             user             = userService.GetUserById(userId);
            UserRegisterType userRegisterType = userService.GetUserRegisterTypeById(userId);

            //user data
            user.Phone    = registerReq.phone;
            user.Email    = userRegisterType.Email;
            user.Gender   = (byte)registerReq.gender;
            user.Birthday = registerReq.birthday;

            //userArc data
            userArc.ArcName             = registerReq.name;
            userArc.Country             = registerReq.country;
            userArc.ArcNo               = registerReq.personalID;
            userArc.PassportId          = registerReq.passportNumber;
            userArc.BackSequence        = registerReq.backCode;
            userArc.ArcIssueDate        = registerReq.issue;
            userArc.ArcExpireDate       = registerReq.expiry;
            userArc.KycStatus           = (short)KycStatusEnum.WAITING_VERIFIED_KYC;
            userArc.KycStatusUpdateTime = DateTime.UtcNow;

            //update UserRegisterType data
            userRegisterType.RegisterTime = DateTime.Now;



            bool isRegister = userService.ReigsterUser(user, userArc, userRegisterType);

            if (isRegister == false)
            {
                return(BadRequest());
            }

            UserInfoView userInfo = userService.GetUserInfoById(userId);

            //// 將 user 置換成 ViewModel
            userModel = mapper.Map <UserInfoDTO>(userInfo);

            accessToken = jwtHandler.CreateAccessToken(userModel.Id, userModel.Email, userModel.ArcName);

            // 系統掃ARC No.
            BackgroundJob.Enqueue(() => userService.SystemVerifyArcForRegisterProcess(int.Parse(User.FindFirstValue("id"))));

            //return Ok(new MessageModel<UserInfoDTO>
            //{
            //    Data = userModel
            //});

            return(Ok(new MessageModel <RegisterResponseDTO>
            {
                Data = new RegisterResponseDTO
                {
                    Jwt = accessToken.Token,
                    kycStatus = (short)userModel.KycStatus
                }
            }));
        }
        public async Task <dynamic> VerifyUserInfo(string accessToken, string permissions, UserRegisterType loginUser)
        {
            //debug token
            var isTokenValid = await VerifyAccessToken(accessToken);

            if (!isTokenValid)
            {
                return(false);
            }

            // verify user info
            dynamic result = await GetAsync <dynamic>(accessToken, "me", $"fields=name,{permissions}");

            if (result.GetValue("error") != null)
            {
                return(null);
            }

            if (result == null)
            {
                throw new Exception("User from this token not exist");
            }

            // check fb id is matched
            var id = result.GetValue("id").ToString();

            if (loginUser.AuthPlatformId.Equals(id))
            {
                return(result);
            }

            return(null);
        }