Beispiel #1
0
        public async Task <IEnumerable <LabDTO> > DeleteLab(string id)
        {
            var res = await LabRepo.RemoveLab(id, User.Identity.Name);

            SetQueue(id);
            return(MapLabs(res));
        }
        public async Task <ActionResult> LabReportCsv(string id)
        {
            var lab = await LabRepo.GetLabAndSettings(id);

            var teams = lab.DomAssignments;

            var res = new List <string>
            {
                "City,Date,Instructor,LabCode"
            };

            res.Add(string.Format("{0},{1},{2},{3}", lab.City, lab.LabDate, lab.PrimaryInstructor, lab.LabCode));
            res.Add("");

            res.Add("Domain,TeamAuthKey");
            res.AddRange(teams.Select(t => string.Format("{0},{1}", t.DomainName, t.TeamAuth)));

            var    fileArray   = Encoding.UTF8.GetBytes(string.Join(Environment.NewLine, res.ToArray()));
            var    fileName    = string.Format("Lab-{0}.csv", lab.LabName);
            string contentType = MimeMapping.GetMimeMapping(fileName);
            var    cd          = new ContentDisposition
            {
                FileName = fileName,
                Inline   = false
            };

            Response.AppendHeader("Content-Disposition", cd.ToString());
            return(File(fileArray, contentType));
        }
        public async Task <ActionResult> ExportTenants(string id)
        {
            var lab = await LabRepo.GetLabAndSettings(id);

            var teams = lab.DomAssignments;
            var res   = new List <string>
            {
                "Tenant,AdminUpn,TenantID,AssignedDNS"
            };

            res.AddRange(teams.Select(t => t.AssignedTenantName + "," + t.TenantAdminUpn + "," + t.AssignedTenantId + "," + t.DomainName));
            var city = lab.City.ToLower().Replace(" ", "").Replace(".", "").Replace("-", "");

            city += (lab.LabDate.Month.ToString() + lab.LabDate.Day.ToString());

            var    fileArray   = Encoding.UTF8.GetBytes(string.Join(Environment.NewLine, res.ToArray()));
            var    fileName    = string.Format("Lab-{0}.csv", city);
            string contentType = MimeMapping.GetMimeMapping(fileName);
            var    cd          = new ContentDisposition
            {
                FileName = fileName,
                Inline   = false
            };

            Response.AppendHeader("Content-Disposition", cd.ToString());
            return(File(fileArray, contentType));
        }
Beispiel #4
0
        public async Task <IEnumerable <LabDTO> > UpdateLab(LabSettings lab)
        {
            var res = await LabRepo.UpdateLab(lab, User.Identity.Name);

            SetQueue(lab.Id);
            return(MapLabs(res));
        }
Beispiel #5
0
        public async Task <LabSettingsDTO> ResetTxtAssignment(TeamDTO team)
        {
            var res = new LabSettingsDTO();

            try
            {
                var data = await LabRepo.GetDomAssignment(team.Lab.LabCode, team.TeamAssignment.TeamAuth);

                //remove zone record from zone
                using (var dns = new DnsAdmin())
                {
                    var domGroup = await _repo.GetGroup(data.Lab.AzureSubscriptionId, data.Lab.DnsZoneRG);

                    await dns.InitAsync();

                    dns.SetClient(domGroup);
                    await dns.ClearTxtRecord(team.TeamAssignment.DomainName);
                }
                //update record in Cosmos
                var assignment = await LabRepo.GetDomAssignment(team.Lab.LabCode, team.TeamAssignment.TeamAuth);

                assignment.TeamAssignment.DnsTxtRecord = null;
                await LabRepo.UpdateTeamAssignment(assignment.TeamAssignment);

                res.ResponseMessage = "TXT record reset";
                res.Settings        = await LabRepo.GetLabAndSettings(team.Lab.Id);
            }
            catch (Exception ex)
            {
                res.ResponseMessage = "ERROR: " + ex.Message;
            }

            return(res);
        }
        public async Task <IEnumerable <DeleteError> > InvalidateAllValidatedDomains(string labCode)
        {
            var list = await LabRepo.GetDomAssignments(labCode);

            var          errList = new List <DeleteError>();
            AdalResponse delRes  = null;

            foreach (var item in list)
            {
                if (item.AssignedTenantId != null)
                {
                    delRes = await DeleteDomain(item.DomainName);

                    if (!delRes.Successful)
                    {
                        errList.Add(new DeleteError
                        {
                            DomainName   = item.DomainName,
                            ErrorMessage = delRes.Message,
                            Response     = delRes,
                            TenantId     = item.AssignedTenantId
                        });
                    }
                }
            }
            return(errList);
        }
Beispiel #7
0
        public async Task <LabSettingsDTO> UnlinkDomain(TeamDTO team)
        {
            var res = new LabSettingsDTO();

            try
            {
                //detach domain from tenant
                var control = await AADLinkControl.CreateAsync(team.TeamAssignment.AssignedTenantId, new HttpContextWrapper(HttpContext.Current));

                var adalResponse = await control.DeleteDomain(team.TeamAssignment.DomainName);

                if (adalResponse.Message == "ObjectInUse")
                {
                    var references = await control.GetDomainReferences(team.TeamAssignment.DomainName);

                    res.Object = references.Object;
                }

                res.ResponseMessage += string.Format("Domain operation {0}, message: {1}", ((adalResponse.Successful) ? "successful" : "failed"), adalResponse.Message);
                res.Settings         = await LabRepo.GetLabAndSettings(team.Lab.Id);

                if (adalResponse.Message != "ObjectInUse" && adalResponse.Successful)
                {
                    var res2 = await ResetTxtAssignment(team);

                    res.Settings = res2.Settings;
                }
            }
            catch (Exception ex)
            {
                res.ResponseMessage = "ERROR: " + ex.Message;
            }
            return(res);
        }
Beispiel #8
0
        // GET: Team
        public async Task <ActionResult> Index()
        {
            TeamDTO team = null;

            if (User.IsInRole(CustomRoles.LabUserAssigned))
            {
                string labCode, teamCode;

                if (Session["labCode"] != null)
                {
                    labCode  = Session["labCode"].ToString();
                    teamCode = Session["teamCode"].ToString();
                }
                else
                {
                    return(RedirectToAction("SignIn", "Account", routeValues: new { force = "true" }));
                }

                team = await LabRepo.GetDomAssignment(labCode, teamCode);

                if (team == null || team.TeamAssignment == null)
                {
                    //something weird has happened with the team assignment when this user registered
                    //go re-register
                    ViewBag.ErrorMessage = "Your saved team information has been changed, or expired. Please re-associate your login with your team information.";
                    return(View("Register"));
                }
                var res = DnsDTO.FromTeamDTO(team);
                return(View(res));
            }

            return(View("Register"));
        }
        /// <summary>
        /// Pickup Lab document ID from queue
        /// </summary>
        /// <param name="message"></param>
        /// <param name="log"></param>
        public static async Task ProcessQueueMessage([QueueTrigger("%logqueue%")] string message, TextWriter log)
        {
            var data = JsonConvert.DeserializeObject <LabQueueDTO>(message);
            var lab  = await LabRepo.GetLab(data.LabId);

            if (lab.State == LabState.Error)
            {
                return;
            }

            try
            {
                switch (lab.State)
                {
                case LabState.QueuedToDelete:
                    lab.State = LabState.Deleting;
                    await LabRepo.UpdateLab(lab, data.UserName);

                    await LabRepo.RemoveLabAssignments(lab);

                    //all zones and teams deleted, remove lab
                    await LabRepo.DeleteLab(lab);

                    break;

                case LabState.Queued:
                    lab.State = LabState.Creating;
                    await LabRepo.UpdateLab(lab, data.UserName);

                    await LabRepo.AddLabAssignments(lab);

                    break;

                case LabState.QueuedToUpdate:
                    lab.State = LabState.Updating;
                    await LabRepo.UpdateLab(lab, data.UserName);

                    await LabRepo.UpdateLabAssignments(lab);

                    break;

                default:
                    return;
                }
                await Logging.WriteMessageToErrorLog(string.Format("{4} called \"{5}\" for {0} zones associated with lab \"{1} ({2})\", using RG \"{3}\"", lab.AttendeeCount, lab.City, lab.LabDate.ToShortDateString(), lab.DnsZoneRG, data.UserName, lab.State.ToString()));

                log.WriteLine(message);
            }
            catch (Exception ex)
            {
                await Logging.WriteDebugInfoToErrorLog("Error processing queue", ex);

                log.WriteLine(Logging.GetExceptionMessageString(ex));
                lab.State = LabState.Error;
                await LabRepo.UpdateLab(lab, data.UserName);

                throw ex;
            }
        }
Beispiel #10
0
        public async Task <IEnumerable <LabDTO> > GetLabs()
        {
            IEnumerable <LabSettings> labs;

            labs = await((_isSiteAdmin) ? LabRepo.GetLabs() : LabRepo.GetLabs(User.Identity.Name));

            return(MapLabs(labs));
        }
        public async Task <IEnumerable <System.Web.Mvc.SelectListItem> > GetDnsResourceGroups()
        {
            var groups = await LabRepo.GetLabStats(User.Identity.Name);


            var data = SiteUtils.LoadListFromDictionary(groups.ToDictionary(o => o.AzureSubscriptionId + ":" + o.DnsZoneRG, o => o.DnsZoneRG + " (" + o.ZoneCount + " assigned)"));

            return(data);
        }
        public async Task <AdalResponse <Domain> > CheckDomainValidation()
        {
            var labCode  = User.Identity.GetClaim(CustomClaimTypes.LabCode);
            var teamCode = User.Identity.GetClaim(CustomClaimTypes.TeamCode);

            var team = await LabRepo.GetDomAssignment(labCode, teamCode);

            var tenantId = AdalLib.GetUserTenantId(User.Identity);
            var hctx     = new HttpContextWrapper(HttpContext.Current);

            var control = await AADLinkControl.CreateAsync(tenantId, hctx);

            return(await control.GetDomain(team.TeamAssignment.DomainName));
        }
        public async Task <FileResult> LabReport(string id)
        {
            var lab = await LabRepo.GetLabAndSettings(id);

            var res = RenderRazorViewToString("LabReport", lab);

            var    fileName    = string.Format("LabReport-{0}.pdf", lab.LabName);
            string contentType = MimeMapping.GetMimeMapping(fileName);
            var    cd          = new ContentDisposition
            {
                FileName = fileName,
                Inline   = false
            };

            Response.AppendHeader("Content-Disposition", cd.ToString());
            return(File(Generator.GenReport(res), contentType));
        }
Beispiel #14
0
        public async Task <LabSettingsDTO> ResetTeamCode(TeamDTO team)
        {
            var res = new LabSettingsDTO();

            try
            {
                //update record in Cosmos
                var assignment = await LabRepo.ResetTeamCode(team);

                res.Settings = await LabRepo.GetLabAndSettings(team.Lab.Id);

                res.ResponseMessage = assignment.TeamAssignment.TeamAuth;
            }
            catch (Exception ex)
            {
                res.ResponseMessage = "ERROR: " + ex.Message;
            }
            return(res);
        }
Beispiel #15
0
        public async Task <ActionResult> UpdateAssignment(DnsDTO item)
        {
            string labCode  = Session["labCode"].ToString();
            string teamCode = Session["teamCode"].ToString();

            var data = await LabRepo.GetDomAssignment(labCode, teamCode);

            var test = ContinueEditingAssignment(data);

            if (test != null)
            {
                ViewBag.ErrorHeader = test.ErrorHeader;
                ViewBag.Error       = test.Error;
                ViewBag.IsLive      = true;
                return(View("Index"));
            }
            try
            {
                //updating DNS record
                using (var dns = new DnsAdmin())
                {
                    var domGroup = await _repo.GetGroup(data.Lab.AzureSubscriptionId, data.Lab.DnsZoneRG);

                    await dns.InitAsync();

                    dns.SetClient(domGroup);
                    await dns.SetTxtRecord(item.TxtRecord, data.TeamAssignment.DomainName);
                };
                //updating
                data.TeamAssignment.DnsTxtRecord = item.TxtRecord;
                await LabRepo.UpdateDnsRecord(data);
            }
            catch (Exception ex)
            {
                ViewBag.ErrorHeader = "DNS Update Failed";
                ViewBag.Error       = ex.Message;
                item.TxtRecord      = "";
            }
            item.DomainName = data.TeamAssignment.DomainName;
            item.LabId      = data.Lab.Id;
            return(View("Index", item));
        }
Beispiel #16
0
        public async Task <LabSettingsDTO> DeleteDirectoryObject(DelObjectDTO team)
        {
            var res = new LabSettingsDTO();

            try
            {
                //detach domain from tenant
                var control = await AADLinkControl.CreateAsync(team.TeamAssignment.AssignedTenantId, new HttpContextWrapper(HttpContext.Current));

                var adalResponse = await control.DeleteObject(team.DelObjId);

                res.ResponseMessage += string.Format("Delete operation {0}, message: {1}", ((adalResponse.Successful) ? "successful" : "failed"), adalResponse.Message);
                res.Settings         = await LabRepo.GetLabAndSettings(team.Lab.Id);
            }
            catch (Exception ex)
            {
                res.ResponseMessage = "ERROR: " + ex.Message;
            }
            return(res);
        }
Beispiel #17
0
        public async Task <ActionResult> Index(TeamAuthentication auth)
        {
            var data = await LabRepo.GetDomAssignment(auth.LabCode, auth.TeamAuth);

            var test = ContinueEditingAssignment(data);

            if (test != null)
            {
                ViewBag.ErrorHeader = test.ErrorHeader;
                ViewBag.Error       = test.Error;
                ViewBag.IsLive      = true;
                return(View("Index"));
            }

            var tenantId    = AdalLib.GetUserTenantId(User.Identity);
            var tenantName  = AdalLib.GetUserUPNSuffix(User.Identity);
            var tenantAdmin = User.Identity.GetClaim(ClaimTypes.Upn);

            var oid = User.Identity.GetClaim(TokenCacheClaimTypes.ObjectId);

            await LabRepo.UpdateTenantId(new TeamDTO { Lab = data.Lab, TeamAssignment = data.TeamAssignment }, tenantId, tenantName, tenantAdmin);

            return(RedirectToAction("refresh", "account"));
        }
Beispiel #18
0
        public async Task <IEnumerable <DateTime> > GetLabDates()
        {
            var res = await LabRepo.GetLabDates();

            return(res);
        }
Beispiel #19
0
        public async Task <bool> CheckLabDate([FromUri] DateTime labDate)
        {
            var res = await LabRepo.CheckLabDate(labDate);

            return(res);
        }
Beispiel #20
0
        public async Task <IEnumerable <LabSettings> > ResetLabCode(LabSettings lab)
        {
            var res = await LabRepo.ResetLabCode(lab, User.Identity.Name);

            return(res);
        }
Beispiel #21
0
 public async Task GetThing(int offset)
 {
     var lab = await LabRepo.GetTodaysLab(offset);
 }
Beispiel #22
0
        public async Task <LabSettingsFull> GetLab(string id)
        {
            var res = await LabRepo.GetLabAndSettings(id);

            return(res);
        }