Ejemplo n.º 1
0
        public override NSMenu MenuForEvent(NSEvent theEvent)
        {
            CGPoint pt = this.ConvertPointFromView(theEvent.LocationInWindow, null);

            _selectedRow = this.GetRow(pt);
            NSTableViewDataSource ds = (NSTableViewDataSource)this.DataSource;
            NSMenu menu = new NSMenu();

            if (_selectedRow >= (nint)0)
            {
                if (ds is NodesListView)
                {
                    string data = (ds as NodesListView).Entries [(int)_selectedRow].DisplayName;
                    switch (data)
                    {
                    case "Private Entities":
                        NSMenuItem addPrivateEntity = new NSMenuItem("Add Private Entity", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsPrivateKeysNode).AddPrivateKeyHandler);
                        menu.AddItem(addPrivateEntity);
                        break;

                    case "Secret Keys":
                        NSMenuItem createCertificate = new NSMenuItem("Add Secret Key", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsSecretKeysNode).AddSecretKey);
                        menu.AddItem(createCertificate);
                        break;

                    case "Trusted Certs":
                        NSMenuItem createSigningRequest = new NSMenuItem("Create Certificate", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsTrustedCertsNode).AddCertificate);
                        menu.AddItem(createSigningRequest);
                        break;

                    default:
                        break;
                    }
                }
                else if (ds is CertificateDetailsListView)
                {
                    CertificateDetailsListView lw = ds as CertificateDetailsListView;
                    CertDTO    cert     = lw.Entries [(int)_selectedRow];
                    NSMenuItem showCert = new NSMenuItem("Show Certificate", (object sender, EventArgs e) => CertificateService.DisplayX509Certificate2(this, cert.Cert));
                    menu.AddItem(showCert);
                    NSMenuItem deleteEntry = new NSMenuItem("Delete", (object sender, EventArgs e) => {
                        UIErrorHelper.CheckedExec(delegate() {
                            if (UIErrorHelper.ConfirmDeleteOperation("Are you sure?") == true)
                            {
                                using (var session = new VecsStoreSession(lw.ServerDto.VecsClient, lw.Store, "")) {
                                    session.DeleteCertificate(cert.Alias);
                                }
                                lw.Entries.Remove(cert);
                                UIErrorHelper.ShowAlert("", "Successfully deleted the entry.");
                                NSNotificationCenter.DefaultCenter.PostNotificationName("ReloadServerData", this);
                            }
                        });
                    });
                    menu.AddItem(deleteEntry);
                }
                NSMenu.PopUpContextMenu(menu, theEvent, theEvent.Window.ContentView);
            }
            return(base.MenuForEvent(theEvent));
        }
Ejemplo n.º 2
0
        public IEnumerable<CertDTO> GetStoreEntries (VecsAdaptor.CertEntryType entryType)
        {
            var lst = new List<CertDTO> ();
            UInt32 certCount = 0;
            IntPtr ptrCerts = IntPtr.Zero;
            var hEnumContext = new IntPtr ();

            try {
                var result = VecsAdaptor.VecsGetEntryCount (StoreHandle, out certCount);
                VecsError.Check (result);

           
                result = VecsAdaptor.VecsBeginEnumEntries (
                    _hStore,
                    certCount,
                    VecsAdaptor.EntryInfoLevel.Level2,
                    out hEnumContext);
                VecsError.Check (result);

                if (hEnumContext != null) {
                    result = VecsAdaptor.VecsEnumEntriesA (
                        hEnumContext,
                        out ptrCerts,
                        out certCount);
                    VecsError.Check (result);

                    int sz = Marshal.SizeOf (typeof(VecsAdaptor.VECS_CERT_ENTRY));
                    var certArray = new VecsAdaptor.VECS_CERT_ENTRY[certCount];

                    for (UInt32 i = 0; i < certCount; i++) {
                        certArray [i] =
                            (VecsAdaptor.VECS_CERT_ENTRY)Marshal.PtrToStructure (
                            new IntPtr (ptrCerts.ToInt64 () + (sz * i)),
                            typeof(VecsAdaptor.VECS_CERT_ENTRY));
                        var certString = Marshal.PtrToStringAnsi (
                                             certArray [i].pszCertificate);
                        var aliasString = Marshal.PtrToStringAnsi (
                                              certArray [i].pszAlias);
                        var passwordString = Marshal.PtrToStringAnsi (
                                                 certArray [i].pszPassword);

                        //if(!string.IsNullOrEmpty(aliasString))
                        //    File.WriteAllText("c:\\temp\\" + aliasString, certString);

                        if (certArray [i].entryType != (int)entryType) {
                            continue;
                        }
                        var dto = new CertDTO {
                            Alias = aliasString != null ? aliasString : ""
                        };
                        lst.Add (dto);
                        try {
                            if (!string.IsNullOrEmpty (certString)) {
                                dto.Cert = certString.GetX509Certificate2FromString ();
                            }
                            if (!string.IsNullOrEmpty (passwordString)) {
                                dto.Password = passwordString;
                            }
                        } catch (Exception) {
                        }
                    }
                }
            } catch (Exception e) {
                throw e;
            } finally {
                if (hEnumContext != IntPtr.Zero) {
                    VecsAdaptor.VecsEndEnumEntries (hEnumContext);
                }
                if (ptrCerts != IntPtr.Zero) {
                    VecsAdaptor.VecsFreeCertEntryArrayA (ptrCerts, certCount);
                }
            }

            return lst;
        }