in src/VstsDemoBuilder/Controllers/EnvironmentController.cs [148:282]
public ActionResult CreateProject()
{
try
{
AccessDetails _accessDetails = ProjectService.AccessDetails;
string TemplateSelected = string.Empty;
if (Session["visited"] != null)
{
Project model = new Project();
if (Session["EnableExtractor"] != null)
{
model.EnableExtractor = Session["EnableExtractor"].ToString();
ProjectService.enableExtractor = model.EnableExtractor.ToLower();
}
if (Session["templateName"] != null && Session["templateName"].ToString() != "")
{
model.TemplateName = Session["templateName"].ToString();
TemplateSelected = model.TemplateName;
}
else if (Session["PrivateTemplateName"] != null)
{
model.TemplateName = Session["PrivateTemplateName"].ToString();
TemplateSelected = model.TemplateName;
}
else
{
TemplateSelected = System.Configuration.ConfigurationManager.AppSettings["DefaultTemplate"];
}
if (Session["PAT"] != null)
{
_accessDetails.access_token = Session["PAT"].ToString();
ProfileDetails profile = accountService.GetProfile(_accessDetails);
if (profile.displayName != null || profile.emailAddress != null)
{
Session["User"] = profile.displayName ?? string.Empty;
Session["Email"] = profile.emailAddress ?? profile.displayName.ToLower();
}
if (profile.id != null)
{
AccountsResponse.AccountList accountList = accountService.GetAccounts(profile.id, _accessDetails);
//New Feature Enabling
model.accessToken = Session["PAT"].ToString();
model.refreshToken = _accessDetails.refresh_token;
Session["PAT"] = _accessDetails.access_token;
model.MemberID = profile.id;
List<string> accList = new List<string>();
if (accountList.count > 0)
{
foreach (var account in accountList.value)
{
accList.Add(account.accountName);
}
accList.Sort();
model.accountsForDropdown = accList;
model.hasAccount = true;
}
else
{
accList.Add("Select Organization");
model.accountsForDropdown = accList;
ViewBag.AccDDError = "Could not load your organizations. Please check if the logged in Id contains the Azure DevOps Organizations or change the directory in profile page and try again.";
}
model.Templates = new List<string>();
model.accountUsersForDdl = new List<SelectListItem>();
TemplateSelection.Templates templates = new TemplateSelection.Templates();
string[] dirTemplates = Directory.GetDirectories(Server.MapPath("~") + @"\Templates");
//Taking all the template folder and adding to list
foreach (string template in dirTemplates)
{
model.Templates.Add(Path.GetFileName(template));
}
// Reading Template setting file to check for private templates
if (System.IO.File.Exists(Server.MapPath("~") + @"\Templates\TemplateSetting.json"))
{
string templateSetting = model.ReadJsonFile(Server.MapPath("~") + @"\Templates\TemplateSetting.json");
templates = JsonConvert.DeserializeObject<TemplateSelection.Templates>(templateSetting);
}
//[for direct URLs] if the incoming template name is not null, checking for Template name in Template setting file.
//if exist, will append the template name to Selected template textbox, else will append the SmartHotel360 template
if (!string.IsNullOrEmpty(TemplateSelected))
{
if (Session["PrivateTemplateName"] == null)
{
foreach (var grpTemplate in templates.GroupwiseTemplates)
{
foreach (var template in grpTemplate.Template)
{
if (template.Name != null)
{
if (template.Name.ToLower() == TemplateSelected.ToLower())
{
model.SelectedTemplate = template.Name;
model.Templates.Add(template.Name);
model.selectedTemplateDescription = template.Description == null ? string.Empty : template.Description;
model.selectedTemplateFolder = template.TemplateFolder == null ? string.Empty : template.TemplateFolder;
model.Message = template.Message == null ? string.Empty : template.Message;
model.ForkGitHubRepo = template.ForkGitHubRepo.ToString();
model.templateImage = template.Image ?? "/Templates/TemplateImages/CodeFile.png";
}
}
}
}
}
else
{
model.SelectedTemplate = Session["PrivateTemplateOriginalName"].ToString();
model.Templates.Add(model.SelectedTemplate);
model.selectedTemplateDescription = "<p style='color:red;fontsize:10px'><b>Note</b>: Template will be discarded once the process completes. Please refersh the page to select other templates </p>";
model.selectedTemplateFolder = Session["PrivateTemplateName"].ToString();
model.ForkGitHubRepo = "false";
model.templateImage = "/Templates/TemplateImages/CodeFile.png";
}
}
return View(model);
}
}
return Redirect("../Account/Verify");
}
else
{
Session.Clear();
return Redirect("../Account/Verify");
}
}
catch (Exception ex)
{
ProjectService.logger.Info(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + ex.Message + "\t" + "\n" + ex.StackTrace + "\n");
ViewBag.ErrorMessage = ex.Message;
return Redirect("../Account/Verify");
}
}