Example #1
0
        private ObservableCollection <TreeViewVMItem> GetUserJourneys()
        {
            var js = new ObservableCollection <TreeViewVMItem>();

            try
            {
                foreach (var j in App.PolicySet.Base.Root.Element(Constants.dflt + "UserJourneys").Elements())
                {
                    js.Add(new JourneyTypeItem()
                    {
                        DataSource = j,
                        OnSelect   = new DelegateCommand((obj) => DetailView = new Views.JourneyEditor()
                        {
                            DataContext = new ViewModels.JourneyEditor((XElement)obj)
                        }),
                        Category   = TreeViewVMItem.TreeViewItemCatorgies.Detail,
                        DetailType = TreeViewVMItem.TreeViewItemDetails.Journey,
                        Items      = GetJourneyTokens(j),
                    });
                }
                return(js);
            } catch (NullReferenceException)
            {
                return(null);
            }
        }
Example #2
0
        public MainWindow()
        {
            Current   = this;
            Trace     = new ObservableCollection <TraceItem>();
            NewPolicy = new DelegateCommand(() =>
            {
                if (SaveCurrent(true))
                {
                    var dlgVm = new ViewModels.NewPolicyLoad();
                    var dlg   = new Views.NewPolicyLoad()
                    {
                        DataContext = dlgVm
                    };
                    dlgVm.Closing += () => dlg.Close();
                    dlg.ShowDialog();
                    App.MRU.ProjectFolder = String.Empty;
                    UpdateTree();
                }
            });
            Open = new DelegateCommand(() =>
            {
                if (SaveCurrent(true))
                {
                    if (App.PolicySet.IsDirty)
                    {
                        Save.Execute(null);
                    }
                    var dlg = new System.Windows.Forms.FolderBrowserDialog()
                    {
                        SelectedPath = App.MRU.ProjectFolder
                    };
                    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                    {
                        return;
                    }
                    var projectDir = dlg.SelectedPath;
                    //var projectDir = ConfigurationManager.AppSettings["xml:ProjectDir"];
                    var projFile = $"{projectDir}/PolicySet.json";
                    if (File.Exists(projFile))
                    {
                        using (var str = File.OpenText(projFile))
                        {
                            var json      = str.ReadToEnd();
                            App.PolicySet = JsonConvert.DeserializeObject <Models.PolicySet>(json);
                        }
                    }
                    else
                    {
                        App.PolicySet = new Models.PolicySet()
                        {
                            NamePrefix = "Prefix"
                        }
                    };

                    App.MRU.ProjectFolder = projectDir;

                    //var sourceDir = "";
                    //if ((App.PolicySet.FileNames != null) && File.Exists($"{projectDir}/{App.PolicySet.FileNames[0]}.xml"))
                    //    sourceDir = projectDir;
                    //else
                    //    sourceDir = ConfigurationManager.AppSettings["xml:Base"];
                    //App.PolicySet.Load(sourceDir);
                    App.PolicySet.Load(projectDir);
                    if (App.PolicySet.Base != null)
                    {
                        PopulateTreeView();
                    }
                }
            });
            Save = new DelegateCommand(() =>
            {
                var projectDir = App.MRU.ProjectFolder; // ConfigurationManager.AppSettings["xml:ProjectDir"];
                if (String.IsNullOrEmpty(projectDir))
                {
                    var dlg = new System.Windows.Forms.FolderBrowserDialog()
                    {
                        ShowNewFolderButton = true,
                        SelectedPath        = App.MRU.ProjectFolder
                    };
                    //dlg.RootFolder = Environment.SpecialFolder.Desktop;
                    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                    {
                        return;
                    }
                    App.MRU.ProjectFolder = projectDir = dlg.SelectedPath;
                }
                ;
                var projFile = $"{projectDir}/PolicySet.json";
                using (var str = File.CreateText(projFile))
                {
                    var json = JsonConvert.SerializeObject(App.PolicySet);
                    str.Write(json);
                }
                App.PolicySet.Save();
                Trace.Add(new TraceItem()
                {
                    Msg = $"Policy {NamePrefix} generated to {projectDir}"
                });
                App.PolicySet.IsDirty = false;
            });
            AddIdP = new DelegateCommand(() =>
            {
                var vm  = new ViewModels.AddIdPWizard();
                var wiz = new Views.AddIdPWizard()
                {
                    DataContext = vm
                };
                wiz.ShowDialog();
                //wiz.Close();
                if (vm.IsApplied)
                {
                    UpdateTree();
                    SelectArtifact(vm.CreatedIdP.Element(Constants.dflt + "TechnicalProfiles").Element(Constants.dflt + "TechnicalProfile"));
                }
            });
            AddRESTApi = new DelegateCommand(() =>
            {
                var restAPIs = App.PolicySet.Base.Root
                               .element("ClaimsProviders")
                               .elements("ClaimsProvider")
                               .FirstOrDefault(el => el.Attribute("DisplayName")?.Value == "REST APIs");
                if (restAPIs == null)
                {
                    restAPIs = new XElement(Constants.dflt + "ClaimsProvider",
                                            new XElement(Constants.dflt + "DisplayName", "REST APIs"),
                                            new XElement(Constants.dflt + "TechnicalProfiles"));
                    App.PolicySet.Base.Root.element("ClaimsProviders").Add(restAPIs);
                }
                var restAPI = XElement.Load(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("B2CPolicyEditor.IdPPolicies.REST.xml"));
                restAPIs.element("TechnicalProfiles").Add(restAPI);
                PopulateTreeView();
                SelectedArtifact = FindArtifact(restAPI, _items);
            });
            DeleteItem = new DelegateCommand(() =>
            {
                if ((SelectedArtifact == null) || (SelectedArtifact.Category != TreeViewVMItem.TreeViewItemCatorgies.Detail))
                {
                    return;
                }
                switch (SelectedArtifact.DetailType)
                {
                case TreeViewVMItem.TreeViewItemDetails.IdP:
                    {
                        App.PolicySet.RemoveIdP((XElement)SelectedArtifact.DataSource);
                        var header = Items.First(i => i.Category == TreeViewVMItem.TreeViewItemCatorgies.IdPs);
                        header.Items.Remove(SelectedArtifact);
                        SelectedArtifact = Items[0];
                    }
                    break;

                default:
                    break;
                }
            });
            CopyItem = new DelegateCommand(() =>
            {
                if ((SelectedArtifact == null) || (SelectedArtifact.Category != TreeViewVMItem.TreeViewItemCatorgies.Detail))
                {
                    return;
                }
                switch (SelectedArtifact.DetailType)
                {
                case TreeViewVMItem.TreeViewItemDetails.TechnicalProfile:
                    {
                        var tp         = (XElement)SelectedArtifact.DataSource;
                        var copy       = new XElement(tp);
                        var cp         = tp.Parent.Parent;
                        string newName = String.Empty;
                        for (int i = 1; i < 100; i++)
                        {
                            newName = $"{tp.Attribute("Id").Value}({i})";
                            if (cp.Element(Constants.dflt + "TechnicalProfiles").
                                Elements(Constants.dflt + "TechnicalProfile").
                                FirstOrDefault(t => t.Attribute("Id").Value == newName) == null)
                            {
                                break;
                            }
                        }
                        copy.SetAttributeValue("Id", newName);
                        tp.AddAfterSelf(copy);
                        var header = Items.First(i => i.Category == TreeViewVMItem.TreeViewItemCatorgies.ClaimProviders);
                        header     = header.Items.First(h => h.DataSource == cp);
                        var tvi    = new TreeViewVMItem()
                        {
                            Name       = newName,
                            DataSource = copy,
                            Category   = TreeViewVMItem.TreeViewItemCatorgies.Detail,
                            DetailType = TreeViewVMItem.TreeViewItemDetails.TechnicalProfile,
                            OnSelect   = new DelegateCommand((obj) => DetailView = new Page()
                            {
                                Content = new Views.TechnicalProfileClaims()
                                {
                                    DataContext = new TechnicalProfileClaims((XElement)obj)
                                }
                            })
                        };
                        var currIx = header.Items.IndexOf(_selectedArtifact);
                        if (currIx == header.Items.Count - 1)
                        {
                            header.Items.Add(tvi);
                        }
                        else
                        {
                            header.Items.Insert(currIx + 1, tvi);
                        }
                        SelectedArtifact = tvi;
                    }
                    break;

                default:
                    break;
                }
            });
            AddJourneyType = new DelegateCommand(() =>
            {
                var journeys = App.PolicySet.Base.Root.Element(Constants.dflt + "UserJourneys");
                if (journeys == null)
                {
                    App.PolicySet.Base.Root.Add(new XElement(Constants.dflt + "UserJourneys"));
                    journeys = App.PolicySet.Base.Root.Element(Constants.dflt + "UserJourneys");
                }
                var name    = "NewJourney";
                var journey = new XElement(Constants.dflt + "UserJourney",
                                           new XAttribute("Id", name),
                                           new XElement(Constants.dflt + "OrchestrationSteps",
                                                        new XElement(Constants.dflt + "OrchestrationStep",
                                                                     new XAttribute("Order", 1),
                                                                     new XAttribute("Type", "SendClaims"),
                                                                     new XAttribute("CpimIssuerTechnicalProfileReferenceId", "JwtIssuer"))),
                                           new XElement(Constants.dflt + "ClientDefinition", new XAttribute("ReferenceId", "DefaultWeb")));
                journeys.Add(journey);
                var header = Items.FirstOrDefault(i => i.Category == TreeViewVMItem.TreeViewItemCatorgies.Journeys);
                header.Items.Add(new JourneyTypeItem()
                {
                    Category = TreeViewVMItem.TreeViewItemCatorgies.Detail,
                    OnSelect = new DelegateCommand((obj) => DetailView = new Views.JourneyEditor()
                    {
                        DataContext = new ViewModels.JourneyEditor((XElement)obj)
                    }),
                    DetailType  = TreeViewVMItem.TreeViewItemDetails.Journey,
                    DataSource  = journey,
                    IsNameFixed = false,
                });
            });
            AddJourneyStep = new DelegateCommand(() =>
            {
                var wiz = new Views.AddJourneyStepWizard()
                {
                    DataContext = new JourneyEditor(_selectedArtifact.DataSource)
                };
                wiz.ShowDialog();
            });
            RecUserId = new DelegateCommand(() =>
            {
                if (App.PolicySet.Base == null)
                {
                    return;
                }
                var xml = XDocument.Load(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("B2CPolicyEditor.Recipies.UsingUserId.xml"));
                App.PolicySet.Base.Merge(xml);
                App.PolicySet.Base.ChangeLocalUserIdTypeInJourneys(true);
                UpdateTree();
            });
            AddSAMLAsIdP = new DelegateCommand(() =>
            {
                throw new NotSupportedException();
                //if (App.PolicySet.Base == null) return;
                //DetailView = new Views.SAMLAsRPSetup();
                //var xml = XDocument.Load(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("B2CPolicyEditor.IdPPolicies.AsSAMLIdP.xml"));
                //App.PolicySet.Base.Merge(xml);
                //UpdateTree();
            });
            AddTOU = new DelegateCommand(() =>
            {
                if (App.PolicySet.Base == null)
                {
                    return;
                }
                var vm  = new ViewModels.TOUSettings(App.PolicySet.Base);
                var wiz = new Views.TOUSettings()
                {
                    DataContext = vm
                };
                vm.Done += (r) =>
                {
                    var xml = XDocument.Load(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("B2CPolicyEditor.Recipies.AddTermsOfUse.xml"));
                    App.PolicySet.Base.Merge(xml);
                    App.PolicySet.Base.SetTOUVersion(vm.NewVersionId, vm.SignUpJourneys.Where(j => j.IsSelected).Select(j => j.Name));
                    UpdateTree();
                    wiz.Close();
                };
                wiz.ShowDialog();
            });
            RequirePwdChange = new DelegateCommand(() =>
            {
                if (App.PolicySet.Base == null)
                {
                    return;
                }
                var vm  = new ViewModels.RequirePwdChange();
                var wiz = new Views.RequirePwdChange()
                {
                    DataContext = vm
                };
                vm.Done += (r) =>
                {
                    var xml = XDocument.Load(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("B2CPolicyEditor.Recipies.ForcePwdChange.xml"));
                    App.PolicySet.Base.Merge(xml);
                    UpdateTree();
                    wiz.Close();
                };
                wiz.ShowDialog();
            });

            PolicySetup = new DelegateCommand(() => DetailView = new Views.PolicySetup());
            ShowClaims  = new DelegateCommand(() => DetailView = new Views.Claims()
            {
                DataContext = new ViewModels.Claims()
            });
        }