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)); }
public async Task <IEnumerable <LabDTO> > UpdateLab(LabSettings lab) { var res = await LabRepo.UpdateLab(lab, User.Identity.Name); SetQueue(lab.Id); return(MapLabs(res)); }
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); }
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); }
// 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; } }
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)); }
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); }
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)); }
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); }
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")); }
public async Task <IEnumerable <DateTime> > GetLabDates() { var res = await LabRepo.GetLabDates(); return(res); }
public async Task <bool> CheckLabDate([FromUri] DateTime labDate) { var res = await LabRepo.CheckLabDate(labDate); return(res); }
public async Task <IEnumerable <LabSettings> > ResetLabCode(LabSettings lab) { var res = await LabRepo.ResetLabCode(lab, User.Identity.Name); return(res); }
public async Task GetThing(int offset) { var lab = await LabRepo.GetTodaysLab(offset); }
public async Task <LabSettingsFull> GetLab(string id) { var res = await LabRepo.GetLabAndSettings(id); return(res); }