public async Task <IActionResult> GetContactByToken(string code)
        {
            var id = EncryptionUtility.DecryptStringHex(code, _encryptionKey);

            if (!string.IsNullOrEmpty(id))
            {
                var contactId = Guid.Parse(id);
                // query the Dynamics system to get the contact record.
                var contact = await _dynamicsClient.GetContactById(contactId);

                if (contact != null)
                {
                    var result = new PHSContact
                    {
                        Id         = contact.Contactid,
                        token      = code,
                        shortName  = contact.Firstname.First() + " " + contact.Lastname,
                        isComplete = contact.AdoxioPhscomplete == (int)ViewModels.YesNoOptions.Yes
                    };
                    return(new JsonResult(result));
                }

                return(new NotFoundResult());
            }

            return(BadRequest());
        }
        public void TestEncryptDecryptHex()
        {
            string key           = "46f44ece-e897-47d1-8ad0-10753208d9f8";
            string input         = "String to encrypt.";
            string encrypted     = EncryptionUtility.EncryptStringHex(input, key);
            string resultingData = EncryptionUtility.DecryptStringHex(encrypted, key);

            Assert.Equal(resultingData, input);
        }
        public async Task <IActionResult> PublicGetAttachments([FromRoute] string token, [FromRoute] string entityName, [FromRoute] string documentType)
        {
            // decode the entityID
            var entityId = EncryptionUtility.DecryptStringHex(token, _encryptionKey);

            var authorized = await IsPublicUserAuthorized(entityName, entityId).ConfigureAwait(true);

            if (authorized)
            {
                return(await GetAttachmentsInternal(entityId, entityName, documentType, false));
            }
            return(Unauthorized());
        }
        public async Task <IActionResult> PublicDownloadAttachment(string token, string entityName, [FromQuery] string serverRelativeUrl, [FromQuery] string documentType)
        {
            // decode the entityID
            var entityId = EncryptionUtility.DecryptStringHex(token, _encryptionKey);

            var authorized = await IsPublicUserAuthorized(entityName, entityId).ConfigureAwait(true);

            if (authorized)
            {
                return(await DownloadAttachmentInternal(entityId, entityName, serverRelativeUrl, documentType, false).ConfigureAwait(true));
            }
            return(Unauthorized());
        }
        public async Task <IActionResult> UpdateContactByToken([FromBody] ViewModels.Contact item, string token)
        {
            if (token == null || item == null)
            {
                return(BadRequest());
            }

            // get the contact
            var contactId   = EncryptionUtility.DecryptStringHex(token, _encryptionKey);
            var contactGuid = Guid.Parse(contactId);

            var contact = await _dynamicsClient.GetContactById(contactGuid);

            if (contact == null)
            {
                return(new NotFoundResult());
            }
            var patchContact = new MicrosoftDynamicsCRMcontact();

            patchContact.CopyValues(item);
            try
            {
                await _dynamicsClient.Contacts.UpdateAsync(contactGuid.ToString(), patchContact);
            }
            catch (HttpOperationException httpOperationException)
            {
                _logger.LogError(httpOperationException, "Error updating contact");
            }

            foreach (var alias in item.Aliases)
            {
                CreateAlias(alias, contactId);
            }

            contact = await _dynamicsClient.GetContactById(contactGuid);

            return(new JsonResult(contact.ToViewModel()));
        }
        public async Task <IActionResult> GetCASSContactByToken(string code)
        {
            var id = EncryptionUtility.DecryptStringHex(code, _encryptionKey);

            if (!string.IsNullOrEmpty(id))
            {
                MicrosoftDynamicsCRMcontact userContact = null;
                try
                {
                    var userSettings = UserSettings.CreateFromHttpContext(_httpContextAccessor);
                    userContact = await _dynamicsClient.GetContactById(userSettings.ContactId);
                }
                catch (ArgumentNullException)
                {
                    // anonymous
                }

                var contactId = Guid.Parse(id);
                // query the Dynamics system to get the contact record.
                var contact = await _dynamicsClient.GetContactById(contactId);

                if (userContact == null)
                {
                    return(new JsonResult(new CASSPublicContact
                    {
                        Id = contact.Contactid,
                        token = code,
                        shortName = contact.Firstname.First() + " " + contact.Lastname,
                        IsWrongUser = false
                    }));
                }

                if (contact != null &&
                    userContact.Firstname != null &&
                    contact.Firstname.StartsWith(userContact.Firstname.Substring(0, 1), true,
                                                 CultureInfo.CurrentCulture) &&
                    userContact.Lastname != null && userContact.Lastname.ToLower() == contact.Lastname.ToLower() &&
                    userContact.Birthdate != null && userContact.Birthdate.Value.Date.ToShortDateString() ==
                    contact.Birthdate.Value.Date.ToShortDateString()
                    )
                {
                    return(new JsonResult(new CASSPrivateContact
                    {
                        Id = contact.Contactid,
                        token = code,
                        shortName = contact.Firstname + " " + contact.Lastname,
                        dateOfBirth = contact.AdoxioDateofbirthshortdatestring,
                        gender = ((ViewModels.Gender?)contact.AdoxioGendercode).ToString(),
                        streetAddress = contact.Address1Line1,
                        city = contact.Address1City,
                        province = contact.Address1Stateorprovince,
                        postalCode = contact.Address1Postalcode,
                        country = contact.Address1Country
                    }));
                }
                return(new JsonResult(new CASSPublicContact
                {
                    Id = contact.Contactid,
                    token = code,
                    shortName = contact.Firstname.First() + " " + contact.Lastname,
                    IsWrongUser = true
                }));
            }

            return(BadRequest());
        }