Exemple #1
0
        /// <summary>
        /// Création d'un nouvel utilisateur.
        /// </summary>
        /// <param name="utilisateur">L'objet utilisateur.</param>
        /// <returns>Retourne un objet Utilisateur.</returns>
        public async Task <User> Create(ShortUser user)
        {
            try
            {
                if (_wargameContext.User.SingleOrDefault(x => x.Email == user.Email) != null)
                {
                    throw new Exception("Email already exist. Try with another or login with your nickname.");
                }
                if (_wargameContext.User.SingleOrDefault(x => x.Nickname == user.Nickname) != null)
                {
                    throw new Exception("Nickname already exist. Choose another one or login with your account.");
                }
                // Create user.
                User newUser = new User()
                {
                    Email    = user.Email,
                    Nickname = user.Nickname,
                    Password = GenericService.EncryptText(user.Password, "SHA1"),
                    Points   = 0,
                };

                // Create user.
                await _wargameContext.AddAsync(newUser);

                await _wargameContext.SaveChangesAsync();

                return(newUser);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
Exemple #2
0
        // GET: AllUserViewModels
        public async Task <IActionResult> Index(string Id)
        {
            var users = await userManager.Users.ToListAsync();

            List <ShortUser> ListUser = new List <ShortUser>();

            foreach (var User in users)
            {
                ShortUser u = new ShortUser
                {
                    id       = User.Id,
                    Username = User.UserName,
                    urlIMG   = User.IMG_url
                };
                var checkF = _context.Friends.FirstOrDefault(opts => opts.IdFriend == u.id && opts.IdUser == Id);
                if (u.id != Id && checkF != null)
                {
                    ListUser.Add(u);
                }
                //ko phải người dùng và không có trong list bạn
            }
            ChatHubViewModel a = new ChatHubViewModel
            {
                shortUsers = ListUser
            };

            return(View("../ChatHub/ChatHub", a));
        }
Exemple #3
0
        public async Task <IHttpActionResult> GetCurrentUser()
        {
            var       userId = User.Identity.GetUserId();
            ShortUser result = await _userService.GetCurrentUser(userId);

            return(Ok(result));
        }
Exemple #4
0
        public async Task NewOrEditUserAsync(ShortUser shortUser, long nodeId = 0)
        {
            using (MessengerDbContext context = contextFactory.Create())
            {
                try
                {
                    var user = await context.Users.FindAsync(shortUser.UserId).ConfigureAwait(false);

                    if (user == null)
                    {
                        user = new User
                        {
                            Id        = shortUser.UserId,
                            NodeId    = nodeId,
                            Confirmed = true
                        };
                        await context.Users.AddAsync(user).ConfigureAwait(false);
                    }
                    else
                    {
                        user.NodeId    = nodeId;
                        user.Confirmed = true;
                        context.Update(user);
                    }
                    await context.SaveChangesAsync().ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    Logger.WriteLog(ex);
                }
            }
        }
 public CreateOrEditUsersNodeNotice(NodeNoticeCode noticeCode, ShortUser user, BlockSegmentVm blockSegment)
 {
     NoticeCode = noticeCode;
     Users      = new List <ShortUser> {
         user
     };
     BlockSegments = new List <BlockSegmentVm> {
         blockSegment
     };
 }
 public async Task <IActionResult> Register([FromBody] ShortUser user)
 {
     try
     {
         return(Ok(await _userService.Create(user)));
     }
     catch (Exception e)
     {
         return(BadRequest(new { message = e.Message }));
     }
 }
 public async void SendNewUsersNodeNoticeAsync(ShortUser user, BlockSegmentVm blockSegment)
 {
     try
     {
         CreateOrEditUsersNodeNotice notice = new CreateOrEditUsersNodeNotice(Enums.NodeNoticeCode.NewUsers, user, blockSegment);
         await SendNoticeToNodesAsync(notice).ConfigureAwait(false);
     }
     catch (Exception ex)
     {
         Logger.WriteLog(ex);
     }
 }
Exemple #8
0
        public async Task <IActionResult> Create([FromForm] CreateUserModel model)
        {
            if (ModelState.IsValid)
            {
                var result = await _createUsersService.CreateNewUserAsync(
                    new UserVm
                {
                    NameFirst  = model.NameFirst,
                    NameSecond = model.NameSecond,
                    Phones     = !string.IsNullOrEmpty(model.PhoneNumber)
                            ? new List <UserPhoneVm>
                    {
                        new UserPhoneVm
                        {
                            FullNumber = model.PhoneNumber,
                            IsMain     = true
                        }
                    }
                            : null,
                    Emails = !string.IsNullOrEmpty(model.Email)
                            ? new List <string> {
                        model.Email
                    }
                            : null
                },
                    NodeSettings.Configs.Node.Id,
                    NodeSettings.Configs.ConfirmUsers,
                    model.Password).ConfigureAwait(false);

                var segment = await BlockSegmentsService.Instance.CreateNewUserSegmentAsync(
                    result.FirstValue,
                    NodeSettings.Configs.Node.Id,
                    NodeData.Instance.NodeKeys.SignPrivateKey,
                    NodeData.Instance.NodeKeys.SymmetricKey,
                    NodeData.Instance.NodeKeys.Password,
                    NodeData.Instance.NodeKeys.KeyId).ConfigureAwait(false);

                BlockGenerationHelper.Instance.AddSegment(segment);
                ShortUser shortUser = new ShortUser
                {
                    UserId      = result.FirstValue.Id.GetValueOrDefault(),
                    PrivateData = segment.PrivateData
                };
                _nodeNoticeService.SendNewUsersNodeNoticeAsync(shortUser, segment);
                return(Redirect(nameof(Index)));
            }
            return(BadRequest());
        }
Exemple #9
0
        public async Task <ShortUser> Authenticate(string nickname, string password)
        {
            var user = await Task.Run(() => _wargameContext.User.SingleOrDefault(x => x.Nickname == nickname && x.Password == GenericService.EncryptText(password, "SHA1")));

            // return null if user not found
            if (user == null)
            {
                return(null);
            }

            ShortUser returnedUser = new ShortUser()
            {
                Id       = user.Id,
                Nickname = user.Nickname,
                Email    = user.Email,
            };

            returnedUser.Token = GenerateJSONWebToken(user);

            // authentication successful so return user details without password
            return(returnedUser.WithoutPassword());
        }
Exemple #10
0
        public async Task <Response> CreateResponseAsync()
        {
            UserVm editableUser = await updateUsersService.EditUserAsync(request.User, clientConnection.UserId.GetValueOrDefault()).ConfigureAwait(false);

            BlockSegmentVm segment = await BlockSegmentsService.Instance.CreateEditUserSegmentAsync(
                editableUser,
                NodeSettings.Configs.Node.Id,
                NodeData.Instance.NodeKeys.SignPrivateKey,
                NodeData.Instance.NodeKeys.SymmetricKey,
                NodeData.Instance.NodeKeys.Password,
                NodeData.Instance.NodeKeys.KeyId).ConfigureAwait(false);

            BlockGenerationHelper.Instance.AddSegment(segment);
            EditUserBlockData editBlockData = (EditUserBlockData)segment.PublicData;
            ShortUser         shortUser     = new ShortUser
            {
                PrivateData = segment.PrivateData,
                UserId      = editBlockData.UserId
            };

            nodeNoticeService.SendEditUsersNodeNoticeAsync(shortUser, segment);
            UsersConversationsCacheService.Instance.UserEditedUpdateUserDialogsAsync(editableUser);
            return(new UserResponse(request.RequestId, editableUser));
        }
Exemple #11
0
        public async Task <Response> CreateResponseAsync()
        {
            if (!NodeSettings.Configs.Node.UserRegistrationAllowed)
            {
                return(new ResultResponse(request.RequestId, "User registration is not allowed.", ErrorCode.PermissionDenied));
            }
            UserVm user = request.User;

            try
            {
                VerificationCodeInfo verificationCode = null;
                if (!request.User.Phones.IsNullOrEmpty() && request.User.Emails.IsNullOrEmpty())
                {
                    if (NodeSettings.Configs.Node.RegistrationMethod == RegistrationMethod.EmailRequired)
                    {
                        var errorObject = new
                        {
                            Email = "Email required"
                        };
                        return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError));
                    }
                    if (await loadUsersService.IsPhoneExistsAsync(request.User.Phones.FirstOrDefault().FullNumber).ConfigureAwait(false))
                    {
                        var errorObject = new
                        {
                            Phone = "Phone already exists"
                        };
                        return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError));
                    }
                    verificationCode = await verificationCodesService.GetUserVerificationCodeAsync(request.User.Phones.FirstOrDefault().FullNumber).ConfigureAwait(false);
                }
                else if (request.User.Phones.IsNullOrEmpty() && !request.User.Emails.IsNullOrEmpty())
                {
                    if (NodeSettings.Configs.Node.RegistrationMethod == RegistrationMethod.PhoneRequired)
                    {
                        var errorObject = new
                        {
                            Email = "Phone required"
                        };
                        return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError));
                    }
                    if (await loadUsersService.IsEmailExistsAsync(request.User.Emails.FirstOrDefault()).ConfigureAwait(false))
                    {
                        var errorObject = new
                        {
                            Email = "Email already exists."
                        };
                        return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError));
                    }
                    verificationCode = await verificationCodesService.GetUserVerificationCodeAsync(request.User.Emails.FirstOrDefault()).ConfigureAwait(false);
                }
                else
                {
                    if (NodeSettings.Configs.Node.RegistrationMethod != RegistrationMethod.NothingRequired)
                    {
                        var errorObject = new
                        {
                            Email = "Email only or phone only",
                            Phone = "Email only or phone only"
                        };
                        return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError));
                    }
                }
                if (verificationCode != null &&
                    verificationCode.VCode != request.VCode &&
                    (!request.User.Emails.IsNullOrEmpty() || !request.User.Phones.IsNullOrEmpty()))
                {
                    var errorObject = new
                    {
                        VCode = "Wrong verification code"
                    };
                    return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongVerificationCode));
                }
                ValuePair <UserVm, string> userPasswordPair = await createUsersService.CreateNewUserAsync(user, NodeSettings.Configs.Node.Id, NodeSettings.Configs.ConfirmUsers).ConfigureAwait(false);

                TokenVm tempTokens = await tokensService.CreateTokenPairByUserIdAsync(userPasswordPair.FirstValue.Id.GetValueOrDefault(), false, 30 * 60).ConfigureAwait(false);

                clientConn.FileAccessToken = RandomExtensions.NextString(64);
                BlockSegmentVm segment = await BlockSegmentsService.Instance.CreateNewUserSegmentAsync(
                    userPasswordPair.FirstValue,
                    NodeSettings.Configs.Node.Id,
                    NodeData.Instance.NodeKeys.SignPrivateKey,
                    NodeData.Instance.NodeKeys.SymmetricKey,
                    NodeData.Instance.NodeKeys.Password,
                    NodeData.Instance.NodeKeys.KeyId).ConfigureAwait(false);

                BlockGenerationHelper.Instance.AddSegment(segment);
                ShortUser shortUser = new ShortUser
                {
                    UserId      = userPasswordPair.FirstValue.Id.GetValueOrDefault(),
                    PrivateData = segment.PrivateData
                };
                nodeNoticeService.SendNewUsersNodeNoticeAsync(shortUser, segment);
                return(new TokensResponse(
                           request.RequestId,
                           userPasswordPair.FirstValue,
                           tempTokens.AccessToken,
                           tempTokens.RefreshToken,
                           clientConn.FileAccessToken,
                           userPasswordPair.SecondValue));
            }
            catch (CreateNewUserException ex)
            {
                Logger.WriteLog(ex, request);
                return(new ResultResponse(request.RequestId, ex.Message, ErrorCode.UnknownError));
            }
        }
 internal ContentShareWithSender(Api api, ContentShareModel model) : base(api, model)
 {
     Debug.Assert(model.Sender != null, "model.Sender != null");
     Sender = new ShortUser(api, model.Sender);
 }