Beispiel #1
0
        private async void MenuFlyoutEdit_Click(object sender, RoutedEventArgs e)
        {
            SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag;

            manager.CurrentScheme = scheme;
            Frame.Navigate(typeof(SchemeEditingPage));
        }
Beispiel #2
0
        public static async Task <bool> WriteSchemesAsync(List <SPMScheme> schemes)
        {
            if (schemes == null)
            {
                return(true);
            }

            try
            {
                var folder = await OpenSchemeFolderAsync();

                foreach (var scheme in schemes)
                {
                    var file = await folder.CreateFileAsync(scheme.Name + ".xml", CreationCollisionOption.ReplaceExisting);

                    await FileIO.WriteTextAsync(file, SPMScheme.SerializeXml(scheme));
                }
            }
            catch (Exception)
            {
                // TODO: add log
                return(false);
            }

            return(true);
        }
Beispiel #3
0
        public static async Task <List <SPMScheme> > ReadAllSchemesAsync()
        {
            List <SPMScheme> result = new List <SPMScheme>();

            try
            {
                var folder = await OpenSchemeFolderAsync();

                var files = await folder.GetFilesAsync();

                foreach (var file in files)
                {
                    if (file.Name.EndsWith(".xml"))
                    {
                        string content = await FileIO.ReadTextAsync(file);

                        SPMScheme scheme = SPMScheme.DeserializeXml(content);
                        if (scheme != null)
                        {
                            result.Add(scheme);
                        }
                    }
                }
            }
            catch (Exception)
            {
                // TODO: add log
                return(null);
            }

            return(result);
        }
Beispiel #4
0
        private async void MenuFlyoutDuplicate_Click(object sender, RoutedEventArgs e)
        {
            SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag;

            manager.CurrentScheme = scheme;

            // get a name
            string n         = null;
            bool   prompting = true;

            while (prompting)
            {
                n = await this.PromptForInput("Duplicate Scheme", "Give the new scheme a name:", scheme.Name);

                if (!SPMScheme.IsNameValid(n))
                {
                    await this.ShowMessage("Invalid Name", "The name of scheme should have at most 32 characters of letters, numbers, and these characters: []().,_ But it shall not end with a dot or a space.");

                    continue;
                }

                if (manager.Schemes.Find(sc => String.Compare(n, sc.Name) == 0) == null)
                {
                    prompting = false;
                }
                else
                {
                    bool cont = await this.ShowYesNoMessage("Name Collision", "There is already a scheme with the same name (not case-sensative). Please change the name of the scheme. Tap Yes to try again, No to give up.");

                    if (!cont)
                    {
                        return;
                    }
                }
            }

            SPMScheme s = new SPMScheme(manager.CurrentScheme);

            s.Name = n;
            manager.Schemes.Insert(manager.Schemes.IndexOf(manager.CurrentScheme) + 1, s);
            manager.CurrentScheme = s;
            bool result = await manager.SaveCurrentSchemeAsync();

            if (!result)
            {
                await this.ShowMessage("Error", "An error occurred while writing the new scheme. Sorry.");

                manager.CurrentScheme = null;
                manager.Schemes.Remove(s);
                return;
            }

            updateSchemesList();
        }
Beispiel #5
0
        private void sePage_Loaded(object sender, RoutedEventArgs e)
        {
            if (manager.CurrentScheme == null)
            {
                currScheme  = new SPMScheme();
                isNewScheme = true;
            }
            else
            {
                currScheme = new SPMScheme(manager.CurrentScheme);
            }

            if (currScheme.Fields.Count == 0)
            {
                currScheme.Fields.Add(new SPMSchemeField()
                {
                    Name = "Default", Description = "Just fill in something.", SaltingType = SPMSchemeSaltingType.ALWAYS
                });
            }

            fieldsForList              = new ListExtraMemberHelper <SPMSchemeField>();
            fieldsForList.members      = currScheme.Fields;
            fieldsForList.membersAfter = new List <SPMSchemeField>()
            {
                new SPMSchemeField()
                {
                    Name = "Add a new field", Description = "Tap here to add a new field", isActual = false
                }
            };
            updateFieldsList();

            foreach (var field in currScheme.Fields)
            {
                this.iterFieldCombo.Items.Add(field.Name);
            }

            int procIndex = CSHelper.IndexOfEnum(procCombo.Items, currScheme.ProcessType);

            this.procCombo.SelectedIndex = procIndex >= 0 ? procIndex : 0;

            if (currScheme.TimeToHashType == SPMSchemeTimeToHashType.FROM_FIELD)
            {
                this.iterChoiceLength.IsChecked   = true;
                this.iterFieldCombo.SelectedIndex = currScheme.TimeToHashParam >= 0 && currScheme.TimeToHashParam < this.iterFieldCombo.Items.Count ? currScheme.TimeToHashParam : 0;
            }
            else
            {
                this.numIterBox.Text = currScheme.TimeToHashParam.ToString();
                this.iterFieldCombo.SelectedIndex = 0;
            }

            this.nameBox.Text = currScheme.Name;
            this.descBox.Text = currScheme.Description;
        }
Beispiel #6
0
        private async void schemesList_ItemClick(object sender, ItemClickEventArgs e)
        {
            SPMScheme scheme = (SPMScheme)e.ClickedItem;

            if (schemesForList.membersAfter.FindIndex(s => ReferenceEquals(scheme, s)) < 0)
            {
                manager.CurrentScheme = scheme;
                Frame.Navigate(typeof(PasswordGeneratingPage));
            }
            else
            {
                manager.CurrentScheme = null;
                Frame.Navigate(typeof(SchemeEditingPage));
            }
        }
Beispiel #7
0
        private async Task <bool> UpdateCurrSchemeExceptFields()
        {
            if (!SPMScheme.IsNameValid(nameBox.Text))
            {
                await this.ShowMessage("Invalid Name", "The name of scheme should have at most 32 characters of letters, numbers, and these characters: []().,_ But it shall not end with a dot or a space.");

                return(false);
            }

            bool iterIsFixed = iterChoiceFixed.IsChecked ?? false;
            int  param       = 0;

            if (iterIsFixed)
            {
                if (!int.TryParse(numIterBox.Text, out param))
                {
                    await this.ShowMessage("Invalid Number", "The number of iteration is not valid.");

                    return(false);
                }
                else
                {
                    if (param < 1 || param > 1000)
                    {
                        await this.ShowMessage("Iteration Out of Range", "The number of iteration should be in [1, 1000]");

                        return(false);
                    }
                }
            }
            else
            {
                param = iterFieldCombo.SelectedIndex;
            }

            currScheme.Name        = nameBox.Text;
            currScheme.Description = descBox.Text;
            currScheme.ProcessType = (SPMSchemeProcessType)procCombo.SelectedItem;

            currScheme.TimeToHashType  = iterIsFixed ? SPMSchemeTimeToHashType.FIXED : SPMSchemeTimeToHashType.FROM_FIELD;
            currScheme.TimeToHashParam = param;
            return(true);
        }
Beispiel #8
0
        private async void MenuFlyoutDelete_Click(object sender, RoutedEventArgs e)
        {
            SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag;

            manager.CurrentScheme = scheme;

            bool sure = await this.ShowYesNoMessage(String.Format("Delete \"{0}\"", scheme.Name), "Are you sure?");

            if (sure)
            {
                bool result = await manager.DeleteCurrentSchemeAsync();

                if (!result)
                {
                    await this.ShowMessage("Error", "An error occurred while deleting. Sorry.");

                    return;
                }

                manager.Schemes.Remove(manager.CurrentScheme);
                manager.CurrentScheme = null;
                updateSchemesList();
            }
        }