Пример #1
0
        public HttpResponseMessage Enrol(string code)
        {
            ServerUtils.LogTelemetryEvent(User.Identity.Name, "Enrol");

            ServiceData.Models.Study found = _studyRepository.Search(
                st => st.Code == code
                ).FirstOrDefault();

            ServiceData.Models.User thisUser = _userRepository.Search(
                usr => usr.Email == User.Identity.Name
                ).FirstOrDefault();

            if (found != null && thisUser != null &&
                !found.StudyEnrolments.Any(en => en.UserId == thisUser.Id))
            {
                Models.StudyEnrolment enrol = new Models.StudyEnrolment
                {
                    CreatedAt = DateTime.UtcNow,
                    StudyId   = found.Id,
                    Enrolled  = true,
                    UserId    = thisUser.Id
                };

                var serviceMod = Models.StudyEnrolment.ToServiceModel(enrol, true, true);
                var finalRes   = _studyEnrolmentRepository.Insert(serviceMod);
                return(Request.CreateResponse(HttpStatusCode.OK, finalRes));
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
Пример #2
0
        public async Task <HttpResponseMessage> Delete()
        {
            try
            {
                ServiceData.Models.User found = _userRepository.Search(u => u.Email == User.Identity.Name).FirstOrDefault();
                if (found == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound));
                }
                if (found.Email != User.Identity.Name)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden));
                }

                // Delete all conditions and photos from DB and storage
                foreach (ServiceData.Models.UserCondition condition in found.Conditions)
                {
                    await UserConditionsController.Delete(_conditionRepository, _shareRepository, _photoRepository, condition.Id);
                }

                PostLog("Users_Delete", found.Id);

                await _userRepository.Delete(found.Id);

                ServerUtils.LogTelemetryEvent(User.Identity.Name, "DeleteUser");

                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            catch (Exception e)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }
        }
Пример #3
0
        // PUT api/values/5
        public HttpResponseMessage Put(int id, [FromBody] Models.User updatedUser)
        {
            updatedUser.Id = id;

            Models.User found = Models.User.ToAppModel(_userRepository.Search(user => user.Email == updatedUser.Email).FirstOrDefault());

            if (found == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }
            if (found.Email != User.Identity.Name)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            if (updatedUser.BirthDate == null)
            {
                updatedUser.BirthDate = DateTime.UtcNow.AddYears(-30);
            }

            ServiceData.Models.User final = _userRepository.Update(Models.User.ToServiceModel(updatedUser));

            ServerUtils.LogTelemetryEvent(User.Identity.Name, "UpdateUser");
            PostLog("Users_Update", final.Id);
            return(Request.CreateResponse(HttpStatusCode.OK, Models.User.ToAppModel(final)));
        }
Пример #4
0
        protected async Task <bool> IsAdmin()
        {
            IReadWriteRepository <ServiceData.Models.User> _userRepository = new UserRepository();

            ServiceData.Models.User thisUser =
                await _userRepository.Search(u => u.Email == User.Identity.Name).FirstOrDefaultAsync();

            return(thisUser?.Admin == true);
        }
Пример #5
0
        public static User ToAppModel(ServiceData.Models.User given)
        {
            if (given == null)
            {
                return(null);
            }

            User appUser = new User
            {
                Id         = given.Id,
                BirthDate  = given.BirthDate,
                Name       = given.Name,
                Conditions = new List <UserCondition>(),
                Email      = given.Email,
                Admin      = given.Admin
            };

            if (given.Conditions != null)
            {
                foreach (ServiceData.Models.UserCondition cond in given.Conditions.ToList())
                {
                    appUser.Conditions.Add(UserCondition.ToAppModel(cond, true));
                }
            }

            if (given.Shares != null)
            {
                List <Share> shares = new List <Share>();
                foreach (ServiceData.Models.Share sh in given.Shares)
                {
                    shares.Add(Share.ToAppModel(sh, false));
                }
                appUser.Shares = shares;
            }

            if (given.ManagedStudies != null)
            {
                List <Study> studies = new List <Study>();
                foreach (ServiceData.Models.Study st in given.ManagedStudies)
                {
                    studies.Add(Study.ToAppModel(st, false));
                }
                appUser.ManagedStudies = studies;
            }

            if (given.StudyEnrolments != null)
            {
                List <StudyEnrolment> enrolled = new List <StudyEnrolment>();
                foreach (ServiceData.Models.StudyEnrolment st in given.StudyEnrolments)
                {
                    enrolled.Add(StudyEnrolment.ToAppModel(st, true, false));
                }
                appUser.StudyEnrolments = enrolled;
            }

            return(appUser);
        }
Пример #6
0
        public static ServiceData.Models.User ToServiceModel(User given)
        {
            ServiceData.Models.User serviceUser = new ServiceData.Models.User
            {
                Id        = given.Id,
                BirthDate = given.BirthDate,
                Name      = given.Name,
                Email     = given.Email,
                Admin     = given.Admin
            };

            if (given.Conditions != null)
            {
                List <ServiceData.Models.UserCondition> conditions = new List <ServiceData.Models.UserCondition>();
                foreach (UserCondition cond in given.Conditions)
                {
                    conditions.Add(UserCondition.ToServiceModel(cond, true));
                }
                serviceUser.Conditions = conditions;
            }

            if (given.Shares != null)
            {
                List <ServiceData.Models.Share> shares = new List <ServiceData.Models.Share>();
                foreach (Share sh in given.Shares)
                {
                    shares.Add(Share.ToServiceModel(sh, false));
                }
                serviceUser.Shares = shares;
            }

            if (given.ManagedStudies != null)
            {
                List <ServiceData.Models.Study> studies = new List <ServiceData.Models.Study>();
                foreach (Study st in given.ManagedStudies)
                {
                    studies.Add(Study.ToServiceModel(st, false));
                }
                serviceUser.ManagedStudies = studies;
            }

            if (given.StudyEnrolments != null)
            {
                List <ServiceData.Models.StudyEnrolment> enrolled = new List <ServiceData.Models.StudyEnrolment>();
                foreach (StudyEnrolment st in given.StudyEnrolments)
                {
                    enrolled.Add(StudyEnrolment.ToServiceModel(st, true, false));
                }
                serviceUser.StudyEnrolments = enrolled;
            }

            return(serviceUser);
        }
Пример #7
0
        public HttpResponseMessage Get(string password, string email)
        {
            if (password != ConfidentialData.AdminPassword)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            ServiceData.Models.User user = _userRepository.Search(u => u.Email == email).FirstOrDefault();

            var results = _logRepository.Search(log => log.UserId == user.Id).OrderByDescending(l => l.CreatedAt).Select(l => new Models.EventLog
            {
                Id        = l.Id,
                Action    = l.Action,
                CreatedAt = l.CreatedAt,
                UserId    = l.UserId
            });

            return(Request.CreateResponse(HttpStatusCode.OK, results));
        }
Пример #8
0
        public async Task <ActionResult> Create([Bind(Include = "Name,Code")] Models.Study study)
        {
            IReadWriteRepository <ServiceData.Models.User> _userRepository = new UserRepository();

            ServiceData.Models.User thisUser =
                await _userRepository.Search(u => u.Email == User.Identity.Name).FirstOrDefaultAsync();

            study.Active    = true;
            study.CreatedAt = DateTime.UtcNow;
            study.Manager   = Models.User.ToAppModel(thisUser);
            study.ManagerId = thisUser.Id;

            IReadWriteRepository <ServiceData.Models.Study> _studyRepository = new StudyRepository();
            bool existing = await _studyRepository.Search(st => st.Code == study.Code).AnyAsync();

            if (ModelState.IsValid && !existing)
            {
                _studyRepository.Insert(Models.Study.ToServiceModel(study, true));
            }

            return(RedirectToAction("Index"));
        }
Пример #9
0
        public async Task <ActionResult> Details([Bind(Include = "Email,Id")] AddParticipantStruct newPart)
        {
            IReadWriteRepository <ServiceData.Models.User> _userRepository = new UserRepository();

            ServiceData.Models.User res =
                await _userRepository.Search(u => u.Email == newPart.Email).FirstOrDefaultAsync();

            IReadWriteRepository <ServiceData.Models.Study> _studyRepository = new StudyRepository();

            ServiceData.Models.Study study = _studyRepository.GetById(newPart.Id);

            if (study == null)
            {
                return(RedirectToAction("Index"));
            }
            else if (res != null &&
                     study.Manager.Email == User.Identity.Name &&
                     !study.StudyEnrolments.Any(en => en.UserId == res.Id))
            {
                Models.StudyEnrolment enrol = new Models.StudyEnrolment
                {
                    CreatedAt = DateTime.UtcNow,
                    Study     = Models.Study.ToAppModel(study, false),
                    StudyId   = study.Id,
                    Enrolled  = true,
                    User      = Models.User.ToAppModel(res),
                    UserId    = res.Id
                };

                IReadWriteRepository <ServiceData.Models.StudyEnrolment> _enrolRepository = new StudyEnrolmentRepository();
                var serviceMod = Models.StudyEnrolment.ToServiceModel(enrol, true, true);
                var finalRes   = _enrolRepository.Insert(serviceMod);
                return(RedirectToAction("Details", new { id = study.Id }));
            }

            return(RedirectToAction("Details", new { id = study?.Id }));
        }
Пример #10
0
        // GET api/values/5
        public HttpResponseMessage Get(int id)
        {
            ServiceData.Models.User found = _userRepository.GetById(id);

            if (found == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }
            if (found.Email != User.Identity.Name)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            Models.User toRet = Models.User.ToAppModel(found);

            if (toRet.BirthDate == null || (DateTime.UtcNow - toRet.BirthDate).TotalDays < 2)
            {
                toRet.BirthDate = DateTime.UtcNow.AddYears(-30);
            }

            ServerUtils.LogTelemetryEvent(User.Identity.Name, "GetUser");
            PostLog("Users_GetSingle", found.Id);
            return(Request.CreateResponse(HttpStatusCode.OK, toRet));
        }
Пример #11
0
        public async Task <HttpResponseMessage> Get()
        {
            try
            {
                string[] testUsers = new string[]
                {
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**",
                    "*****@*****.**"
                };

                string baseFileLoc = "C:/Users/tgs03_000/Downloads/SkinSelfies";

                //if (Directory.Exists(baseFileLoc))
                //{
                //    Directory.Delete(baseFileLoc, true);
                //}

                if (!Directory.Exists(baseFileLoc))
                {
                    Directory.CreateDirectory(baseFileLoc);
                }

                List <Task>   allTasks   = new List <Task>();
                List <string> nullEmails = new List <string>();

                foreach (string userEmail in testUsers)
                {
                    ServiceData.Models.User user = _userRepository.Search(u => u.Email == userEmail).FirstOrDefault();

                    DirectoryInfo userDir = Directory.CreateDirectory(Path.Combine(baseFileLoc, userEmail));

                    if (user == null)
                    {
                        nullEmails.Add(userEmail);
                        continue;
                    }

                    AboutUser userDetails = new AboutUser
                    {
                        Id    = user.Id,
                        Email = user.Email,
                        Name  = user.Name,
                        Dob   = user.BirthDate
                    };

                    File.WriteAllText(Path.Combine(userDir.FullName, "AboutUser.txt"), JsonConvert.SerializeObject(userDetails, Formatting.Indented));

                    foreach (ServiceData.Models.UserCondition cond in user.Conditions)
                    {
                        ServiceData.Models.UserCondition fullCond = _conditionRepository.GetById(cond.Id);

                        string condPath = Path.Combine(userDir.FullName, cond.Id.ToString());

                        DirectoryInfo condDir = Directory.Exists(condPath)? new DirectoryInfo(condPath) : Directory.CreateDirectory(condPath);

                        AboutCondition condDetails = new AboutCondition
                        {
                            Id         = user.Id,
                            Name       = cond.Condition,
                            SkinRegion = fullCond.SkinRegion.BodyPart.Name + " - " + fullCond.SkinRegion.Name,
                            StartDate  = cond.StartDate,
                            NumPhotos  = fullCond.Photos.Count()
                        };

                        File.WriteAllText(Path.Combine(condDir.FullName, "AboutCondition.txt"), JsonConvert.SerializeObject(condDetails, Formatting.Indented));

                        foreach (ServiceData.Models.Photo photo in fullCond.Photos)
                        {
                            string filename = Path.Combine(condDir.FullName, photo.CreatedAt.ToString("yyyy-MM-dd-HH-mm-ss.") + Path.GetExtension(photo.Url));

                            if (File.Exists(filename))
                            {
                                continue;
                            }

                            CloudBlobContainer container = await GetBlobContainer();

                            Stream    blobStream = new MemoryStream();
                            CloudBlob photoBlob  = container.GetBlobReference(photo.Url.Replace(ConfidentialData.BlobStorageUrl, ""));

                            KeyVaultKeyResolver cloudResolver = new KeyVaultKeyResolver(ServerUtils.GetToken);
                            IKey rsa = await cloudResolver.ResolveKeyAsync(ConfidentialData.KeyLocation, CancellationToken.None);

                            BlobEncryptionPolicy policy  = new BlobEncryptionPolicy(null, cloudResolver);
                            BlobRequestOptions   options = new BlobRequestOptions()
                            {
                                EncryptionPolicy = policy
                            };

                            await photoBlob.DownloadToStreamAsync(blobStream, null, options, null);

                            blobStream.Position = 0;

                            using (var fileStream = File.Create(filename))
                            {
                                await blobStream.CopyToAsync(fileStream);
                            }
                        }
                    }
                }

                string nullString = "";

                foreach (string nEmail in nullEmails)
                {
                    nullString += nEmail + ", ";
                }

                return(Request.CreateResponse(HttpStatusCode.OK, "Files located at " + baseFileLoc + " Null emails: " + nullString));
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e));
            }
        }