Example #1
0
        public static bool LogIn(string username, string password, out string statusMessage)
        {
            IQueryable <UserPrivate> userPrivateQueryable = _documentClient.CreateDocumentQuery <UserPrivate>(
                PrivateUsersCollectionUri).Where(f => f.Id == username && f.Password == password);

            if (userPrivateQueryable.Count() != 1)
            {
                statusMessage = "Log in failed! Username or password is incorrect.";
                return(false);
            }

            foreach (UserPrivate user in userPrivateQueryable)
            {
                userPrivate = user;
            }

            statusMessage = $"Logged in as '{username}'";

            IQueryable <UserPublic> userPublicQueryable = _documentClient.CreateDocumentQuery <UserPublic>(
                PublicUsersCollectionUri).Where(f => f.Id == username);

            foreach (UserPublic user in userPublicQueryable)
            {
                userPublic = user;
            }

            PiConnectionString = IoTClientManager.GetPiConnectionString(userPublic.Id);

            return(true);
        }
Example #2
0
        public static bool Register(string username, string password, string fullName, string macAddress, out string statusMessage)
        {
            UserPublic  uPublic  = new UserPublic(username, fullName, macAddress);
            UserPrivate uPrivate = new UserPrivate(username, password);

            if (!InputValidation.ValidateUsername(username, out statusMessage))
            {
                return(false);
            }

            if (!InputValidation.ValidatePassword(password, out statusMessage))
            {
                return(false);
            }

            string idToReplace = null;

            if (!InputValidation.ValidateMacAddress(macAddress, out statusMessage))
            {
                if (statusMessage != StringConstants.MacAddressAlreadyExistsMessage)
                {
                    return(false);
                }
                if (IsActualUser(macAddress, out idToReplace))
                {
                    return(false);
                }
            }

            if (string.IsNullOrWhiteSpace(fullName))
            {
                statusMessage = "Your full name cannot be empty";
                return(false);
            }

            if (!IoTClientManager.CreateDevice(username, out statusMessage))
            {
                return(false);
            }

            if (idToReplace == null)
            {
                _documentClient.CreateDocumentAsync(PublicUsersCollectionUri, uPublic);
            }
            else
            {
                _documentClient.ReplaceDocumentAsync(PublicUserDocumentUri(idToReplace), uPublic);
            }
            _documentClient.CreateDocumentAsync(PrivateUsersCollectionUri, uPrivate);

            userPublic         = uPublic;
            userPrivate        = uPrivate;
            PiConnectionString = IoTClientManager.GetPiConnectionString(uPublic.Id);

            statusMessage = $"User '{username}' has been registered successsfully.";
            return(true);
        }
Example #3
0
        public static bool RequestPermission(string userToRequestName, out string ErrorMessage)
        {
            if (userPublic.AuthorizedPiList.Any(ap => ap.PiID == userToRequestName))
            {
                ErrorMessage = $"You already have permission to scan {userToRequestName}'s home";
                return(false);
            }

            IQueryable <UserPublic> userPublicQueryable = _documentClient.CreateDocumentQuery <UserPublic>(
                PublicUsersCollectionUri).Where(f => f.Id == userToRequestName);

            if (userPublicQueryable.Count() == 0)
            {
                ErrorMessage = $"You cannot request the permission to scan {userToRequestName}'s house because this user does not exist...";
                return(false);
            }

            UserPublic userToRequest = null;

            foreach (UserPublic u in userPublicQueryable)
            {
                userToRequest = u;
            }

            if (userToRequest == null)
            {
                ErrorMessage = StringConstants.SomethingWentWrongScanPermissionErrorMessage;
                return(false);
            }

            ScanRequest scanRequest = new ScanRequest(userPublic.Id, userPublic.FullName);

            if (userToRequest.ScanRequestList.Any(u => u.UsernameRequester == userPublic.Id))
            {
                ErrorMessage = $"You have already requested {userToRequestName} to scan their home";
                return(false);
            }

            userToRequest.ScanRequestList.Add(scanRequest);

            try
            {
                _documentClient.ReplaceDocumentAsync(PublicUserDocumentUri(userToRequestName), userToRequest);
            }
            catch
            {
                ErrorMessage = StringConstants.SomethingWentWrongScanPermissionErrorMessage;
                return(false);
            }

            ErrorMessage = $"A request was sent to {userToRequestName}!";
            return(true);
        }
Example #4
0
        public static bool IsActualUser(string macAddress, out string idToReplace)
        {
            idToReplace = null;

            IQueryable <UserPublic> userPublicQueryable = _documentClient.CreateDocumentQuery <UserPublic>(
                PublicUsersCollectionUri).Where(f => f.MacAddress == macAddress);

            UserPublic user = null;

            foreach (UserPublic u in userPublicQueryable)
            {
                user = u;
            }

            if (user == null)
            {
                return(false);
            }

            idToReplace = user.Id;

            return(!InputValidation.IsGeneratedId(user.Id));
        }
Example #5
0
        public static bool ProcessPermissionsToRequester(ScanRequest scanRequest, bool acceptRequest, bool updateOwnUser, out string ErrorMessage)
        {
            ErrorMessage = string.Empty;
            if (!userPublic.ScanRequestList.Contains(scanRequest))
            {
                ErrorMessage = "This request does not exist";
                return(false);
            }

            bool returnStatus = true;

            if (acceptRequest)
            {
                IQueryable <UserPublic> userPublicQueryable = _documentClient.CreateDocumentQuery <UserPublic>(
                    PublicUsersCollectionUri).Where(f => f.Id == scanRequest.UsernameRequester);

                do
                {
                    if (userPublicQueryable.Count() == 0)
                    {
                        ErrorMessage = $"Cannot find the user requesting permission";
                        returnStatus = false;
                        break;
                    }

                    UserPublic userRequesting = null;

                    foreach (UserPublic u in userPublicQueryable)
                    {
                        userRequesting = u;
                    }

                    if (userRequesting.AuthorizedPiList.Any(ap => ap.PiID == userPublic.Id))
                    {
                        ErrorMessage = $"{userRequesting.Id} already has permission to scan your home";
                        returnStatus = false;
                        break;
                    }

                    AuthorizedPi authorization = new AuthorizedPi(userPublic.Id, userPublic.FullName, string.Empty);

                    userRequesting.AuthorizedPiList.Add(authorization);

                    _documentClient.ReplaceDocumentAsync(PublicUserDocumentUri(userRequesting.Id), userRequesting);
                }while(false);
            }

            userPublic.ScanRequestList.Remove(scanRequest);

            if (updateOwnUser)
            {
                UpdateUserPublic(InputType.Username, out string message);
            }

            if (returnStatus == true)
            {
                switch (acceptRequest)
                {
                case true:
                    ErrorMessage = $"Successfully accepted {scanRequest.UsernameRequester}'s request";
                    break;

                case false:
                    ErrorMessage = $"Denied {scanRequest.UsernameRequester}'s request to scan your home";
                    break;
                }
            }

            return(returnStatus);
        }