public ActionResult CreateProject()

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");
            }
        }