Beispiel #1
0
            public FieldViewCell(VaultViewCipherPage page, VaultViewCipherPageModel.Field field, bool?a, bool?b)
                : base(field.Name, field.MaskedValue, string.Empty, "clipboard.png")
            {
                Value.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular",
                                                      Android: "monospace", Windows: "Courier");
                if (Device.RuntimePlatform == Device.iOS)
                {
                    Button1.Margin = new Thickness(10, 0);
                }

                Button1.Image   = "eye";
                Button1.Command = new Command(() =>
                {
                    field.Revealed = !field.Revealed;
                    if (field.Revealed)
                    {
                        Button1.Image = "eye_slash.png";
                        Value.Text    = field.Value;
                    }
                    else
                    {
                        Button1.Image = "eye.png";
                        Value.Text    = field.MaskedValue;
                    }
                });

                Init(page, field, Button2);
            }
        private async void GroupingOrCipherSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var groupingOrCipher = e.SelectedItem as GroupingOrCipher;

            if (groupingOrCipher == null)
            {
                return;
            }

            if (groupingOrCipher.Grouping != null)
            {
                Page page;
                if (groupingOrCipher.Grouping.Node.Folder)
                {
                    page = new VaultListCiphersPage(folder: true,
                                                    folderId: groupingOrCipher.Grouping.Node.Id, groupingName: groupingOrCipher.Grouping.Node.Name);
                }
                else
                {
                    page = new VaultListCiphersPage(collectionId: groupingOrCipher.Grouping.Node.Id,
                                                    groupingName: groupingOrCipher.Grouping.Node.Name);
                }

                await Navigation.PushAsync(page);
            }
            else if (groupingOrCipher.Cipher != null)
            {
                var page = new VaultViewCipherPage(groupingOrCipher.Cipher.Type, groupingOrCipher.Cipher.Id);
                await Navigation.PushForDeviceAsync(page);
            }

            ((ListView)sender).SelectedItem = null;
        }
 public EditCipherToolBarItem(VaultViewCipherPage page, string cipherId)
 {
     _page       = page;
     _cipherId   = cipherId;
     Text        = AppResources.Edit;
     ClickAction = async() => await ClickedItem();
 }
Beispiel #4
0
 private void Init(VaultViewCipherPage page, VaultViewCipherPageModel.Field field, ExtendedButton copyButton)
 {
     Value.LineBreakMode = LineBreakMode.WordWrap;
     if (copyButton != null)
     {
         copyButton.Command = new Command(() => page.Copy(field.Value, field.Name));
     }
 }
Beispiel #5
0
 public EditCipherToolBarItem(VaultViewCipherPage page, string cipherId)
 {
     _page       = page;
     _cipherId   = cipherId;
     Text        = AppResources.Edit;
     Icon        = Helpers.ToolbarImage("cog.png");
     ClickAction = async() => await ClickedItem();
 }
Beispiel #6
0
 public UriViewCell(VaultViewCipherPage page, VaultViewCipherPageModel.LoginUri uri)
     : base(uri.Label, uri.Host, uri.ShowLaunch ? "launch.png" : null, "clipboard.png")
 {
     Value.LineBreakMode = LineBreakMode.TailTruncation;
     if (Button1 != null)
     {
         Button1.Command = new Command(async() =>
         {
             if (Device.RuntimePlatform == Device.Android && uri.IsApp)
             {
                 await page._deviceActionService.LaunchAppAsync(uri.Value, page);
             }
             else if (uri.IsWebsite)
             {
                 Device.OpenUri(new Uri(uri.Value));
             }
         });
     }
     Button2.Command = new Command(() => page.Copy(uri.Value, AppResources.URI));
 }
Beispiel #7
0
        private async void CipherSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var cipher = e.SelectedItem as Cipher;

            if (cipher == null)
            {
                return;
            }

            string selection = null;

            if (!string.IsNullOrWhiteSpace(_uri))
            {
                selection = await DisplayActionSheet(AppResources.AutofillOrView, AppResources.Cancel, null,
                                                     AppResources.Autofill, AppResources.View);
            }

            if (selection == AppResources.View || string.IsNullOrWhiteSpace(_uri))
            {
                var page = new VaultViewCipherPage(cipher.Type, cipher.Id);
                await Navigation.PushForDeviceAsync(page);
            }
            else if (selection == AppResources.Autofill)
            {
                if (_deviceInfoService.Version < 21)
                {
                    Helpers.CipherMoreClickedAsync(this, cipher, !string.IsNullOrWhiteSpace(_uri));
                }
                else
                {
                    _googleAnalyticsService.TrackExtensionEvent("AutoFilled",
                                                                _uri.StartsWith("http") ? "Website" : "App");
                    _deviceActionService.Autofill(cipher);
                }
            }

            ((ListView)sender).SelectedItem = null;
        }
Beispiel #8
0
        private async void GroupingOrCipherSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var groupingOrCipher = e.SelectedItem as GroupingOrCipher;

            if (groupingOrCipher == null)
            {
                return;
            }

            if (groupingOrCipher.Grouping != null)
            {
                Page page;
                if (groupingOrCipher.Grouping.Node.Folder)
                {
                    page = new VaultListCiphersPage(folder: true,
                                                    folderId: groupingOrCipher.Grouping.Node.Id, groupingName: groupingOrCipher.Grouping.Node.Name);
                }
                else
                {
                    page = new VaultListCiphersPage(collectionId: groupingOrCipher.Grouping.Node.Id,
                                                    groupingName: groupingOrCipher.Grouping.Node.Name);
                }

                await Navigation.PushAsync(page);
            }
            else if (groupingOrCipher.Cipher != null)
            {
                var    cipher    = groupingOrCipher.Cipher;
                string selection = null;
                if (!string.IsNullOrWhiteSpace(_uri))
                {
                    var options = new List <string> {
                        AppResources.Autofill
                    };
                    if (cipher.Type == Enums.CipherType.Login && _connectivity.IsConnected)
                    {
                        options.Add(AppResources.AutofillAndSave);
                    }
                    options.Add(AppResources.View);
                    selection = await DisplayActionSheet(AppResources.AutofillOrView, AppResources.Cancel, null,
                                                         options.ToArray());
                }

                if (selection == AppResources.View || string.IsNullOrWhiteSpace(_uri))
                {
                    var page = new VaultViewCipherPage(cipher.Type, cipher.Id);
                    await Navigation.PushForDeviceAsync(page);
                }
                else if (selection == AppResources.Autofill || selection == AppResources.AutofillAndSave)
                {
                    if (selection == AppResources.AutofillAndSave)
                    {
                        if (!_connectivity.IsConnected)
                        {
                            Helpers.AlertNoConnection(this);
                        }
                        else
                        {
                            var uris = cipher.CipherModel.Login?.Uris?.ToList();
                            if (uris == null)
                            {
                                uris = new List <Models.LoginUri>();
                            }

                            uris.Add(new Models.LoginUri
                            {
                                Uri   = _uri.Encrypt(cipher.CipherModel.OrganizationId),
                                Match = null
                            });

                            cipher.CipherModel.Login.Uris = uris;

                            await _deviceActionService.ShowLoadingAsync(AppResources.Saving);

                            var saveTask = await _cipherService.SaveAsync(cipher.CipherModel);

                            await _deviceActionService.HideLoadingAsync();

                            if (saveTask.Succeeded)
                            {
                                _googleAnalyticsService.TrackAppEvent("AddedLoginUriDuringAutofill");
                            }
                        }
                    }

                    if (_deviceInfoService.Version < 21)
                    {
                        Helpers.CipherMoreClickedAsync(this, cipher, !string.IsNullOrWhiteSpace(_uri));
                    }
                    else
                    {
                        _googleAnalyticsService.TrackExtensionEvent("AutoFilled",
                                                                    _uri.StartsWith("http") ? "Website" : "App");
                        _deviceActionService.Autofill(cipher);
                    }
                }
            }

            ((ListView)sender).SelectedItem = null;
        }
Beispiel #9
0
 public FieldViewCell(VaultViewCipherPage page, VaultViewCipherPageModel.Field field, bool?a)
     : base(field.Name, field.Value, "clipboard.png")
 {
     Init(page, field, Button1);
 }
Beispiel #10
0
 public FieldViewCell(VaultViewCipherPage page, VaultViewCipherPageModel.Field field)
     : base(field.Name, field.Value == "true" ? "✓" : "-")
 {
     Init(page, field, null);
 }