using System;
using System.Linq;
using System.IO;
using System.Threading.Tasks;
using KeeperSecurity.Authentication;
using KeeperSecurity.Vault;
internal static class Program
{
private static async Task Main()
{
IAuthentication auth = await ConnectToKeeperAs("username@company.com");
var vault = new VaultOnline(auth);
Console.WriteLine("\nRetrieving records...");
await vault.SyncDown();
Console.WriteLine($"Hello {auth.Username}!");
Console.WriteLine($"Your vault has {vault.RecordCount} records.");
// Find record with title "Google"
var search = vault.KeeperRecords.FirstOrDefault(x => string.Compare(x.Title, "Google", StringComparison.InvariantCultureIgnoreCase) == 0);
// Create a record if it does not exist.
if (search == null)
{
var typed = new TypedRecord("login")
{
Title = "Google",
Notes = "Stores google credentials"
};
var loginRecord = new TypedRecordFacade<LoginRecordType>(typed);
loginRecord.Fields.Login = "/Account Name/";
loginRecord.Fields.Password = "/Account Password/";
loginRecord.Fields.Url = "https://google.com";
search = await vault.CreateRecord(typed);
}
// Update record
if (search is TypedRecord tr)
{
var recordField = new RecordTypeField("secret", "Security Token");
if (!tr.FindTypedField(recordField, out var rf))
{
rf = recordField.CreateTypedField();
tr.Custom.Add(rf);
}
var tokenValue = rf.ObjectValue == null ? "1" : rf.ObjectValue.ToString() + "1";
}
else if (search is PasswordRecord pr)
{
pr.SetCustomField("Security Token", "11111111");
}
search = await vault.UpdateRecord(search);
// find file attachment
var attachment = vault.RecordAttachments(search)
.FirstOrDefault(x => string.Equals(x.Title, "google", StringComparison.InvariantCultureIgnoreCase));
if (attachment == null)
{
// Upload local file "google.txt"
var uploadTask = new FileAttachmentUploadTask("google.txt")
{
Title = "Google",
};
await vault.UploadAttachment(search, uploadTask);
}
else
{
// Download attachment into local file "google.txt"
await using var stream = File.OpenWrite("google.txt");
await vault.DownloadAttachment(search, attachment.Id, stream);
// Delete attachment. Remove it from the record
await vault.DeleteAttachment(search, attachment.Id);
}
// Find shared folder with name "Google".
var sharedFolder = vault.SharedFolders
.FirstOrDefault(x => string.Compare(x.Name, "Google", StringComparison.InvariantCultureIgnoreCase) == 0);
if (sharedFolder == null)
{
// Create shared folder.
var folder = await vault.CreateFolder("Google", null, new SharedFolderOptions
{
ManageRecords = true,
ManageUsers = false,
CanEdit = false,
CanShare = false,
});
vault.TryGetSharedFolder(folder.FolderUid, out sharedFolder);
}
// Add user to shared folder.
await vault.PutUserToSharedFolder(sharedFolder.Uid, "user@google.com", UserType.User, new SharedFolderUserOptions
{
ManageRecords = false,
ManageUsers = false,
});
// Add record to shared folder.
await vault.MoveRecords(new[] { new RecordPath { RecordUid = search.Uid } }, sharedFolder.Uid, true);
}
}
ApplicationRecord | Represents a Keeper Secret Manager Application Record. |
AttachmentFile | Represents attachment file. |
AttachmentFileThumb | Represents a thumbnail of attachment. |
AttachmentUploadTask | Creates an attachment upload task. |
BatchResult | Represents Batch Vault Updater Summary |
BatchVaultOperations | Represents Batch Vault Updater |
CustomField | Represents a custom field. |
ExternalRecordShare | Represents External / One-Time Share |
ExternalRecordShareExtensions | Miscellaneous External Share Methods |
ExtraField | Represents an extra field. |
FieldType | Record Types Schema: Field Type definition. |
FieldTypeAddress | "address" field type |
FieldTypeBankAccount | "bankAccount" field type |
FieldTypeHost | "host" field type |
FieldTypeKeyPair | "keyPair" field type |
FieldTypeName | "name" field type |
FieldTypePasskey | "passkey" field type |
FieldTypePaymentCard | "paymentCard" field type |
FieldTypePhone | "phone" field type |
FieldTypeSecurityQuestion | "securityQuestion" field type |
FileAttachmentUploadTask | Creates a file attachment upload task. |
FileRecord | Represents a Keeper File Record. |
FolderData | |
FolderNode | Represents folder. |
InMemoryKeeperStorage | Provides in memory implementation of IKeeperStorage interface. |
KeeperImport | Keeper Import methods |
KeeperRecord | Represents generic Keeper Record |
NoActiveShareWithUserException | Represents an exception that occurs when current user requests other user's public for the first time. |
PasswordRecord | Represents a Legacy Keeper Record. |
RecordField | Record Types Schema: Field definition. |
RecordHistory | Represents a record history |
RecordPath | Represents a record in folder. |
RecordSharePermissions | Represent record sharing information |
RecordType | Record Types Schema: Record Type definition. |
RecordTypeField | Record Types Schema: Record Field definition. |
RecordTypesConstants | Record Types Schema: Fields |
SharedFolder | Represents Shared Folder. |
SharedFolderOptions | Defines shared folder user and record permissions. |
SharedFolderPermission | Represents shared folder user permissions. |
SharedFolderRecord | Represents shared folder record permissions. |
SharedFolderRecordOptions | Represents shared folder record permissions. |
SharedFolderRecordPermissions | Represents record permissions in shared folder. |
SharedFolderUserOptions | Defines shared folder user permissions. |
ShareWithUsers | Represent user list available for sharing |
SqliteKeeperStorage | |
SyncDownRestExtension | |
Team | Represents team properties that user is member of. |
TeamInfo | Represents basic team properties. |
TypedFieldT | Represents a typed field. |
TypedRecord | Represents a Typed Record |
UserRecordPermissions | Represents record permissions for user. |
VaultData | Represents Keeper vault loaded from the IKeeperStorage and decrypted. |
VaultException | The exception that is thrown by the Vault module. |
VaultOnline | Represents Keeper Vault connected to Keeper server. |
VaultOnlineSecretManagerConfiguration |
IAttachment | Defines property for file attachment |
IAttachmentUploadTask | Defines properties of file upload task. |
IBatchVaultOperations | Declares Batch Vault Updater methods |
IFieldTypeSerialize | Defines access methods for compound record types |
IKeeperStorage | Defines properties for offline Keeper vault storage. |
IRecordAccessPath | Defines record access path properties. |
IRecordShareOptions | Defines shared folder record permissions. |
IRecordTypeField | Defines common properties for Record Field |
ISecretManager | Define methods for Keeper Secret Maneger (KSM) |
ISecretManagerConfiguration | Defines properties of Secrets Manager configuration |
ISerializeTypedField | Defines methods for typed field serialization |
ISharedFolderAccessPath | Defines shared folder access path properties. |
ISharedFolderPermission | Defines properties for shared folder user permissions. |
IStorageFolder | Defines properties for folder storage. |
IStorageFolderRecord | Defines properties record-folder link. |
IStorageNonSharedData | Defines non-shared data storage. |
IStorageRecord | Defines Record storage properties. |
IStorageRecordKey | Defines Record Key Metadata storage. |
IStorageRecordType | Defines Record Types storage properties. |
IStorageSharedFolder | Defines properties for shared folder storage. |
IStorageSharedFolderKey | Defines shared folder key storage. |
IStorageTeam | Defines properties for team storage. |
IStorageUserEmail | Defines user's email storage properties |
IThumbnailUploadTask | Defines properties of thumbnail upload task. |
ITypedField | Defines properties for typed record field |
IUserShareOptions | Defines shared folder user permissions. |
IVault | Defines methods for modifying the vault records and folders. |
IVaultData | Defines properties and methods of decrypted Vault data. |
IVaultFileAttachment | Defines methods to manipulate file attachments. |
IVaultSettings | Defines vault settings properties |
IVaultSharedFolder | Defines methods to manipulate Shared Folders. |
IVaultUi | Defines methods for interaction between Vault API and user. |
FolderType | Specifies folder types. |
KeyType | Specifies key used for entity encryption. |
RecordChange | |
RecordFieldMultiple | Specifies if Record Field allows multiple values. |
RecordMatch | Represents record existing match strategy |
RecordTypeScope | Specifies Record Type Scope |
Severity | Specifies log message severity |
UserType | Specifies shared folder user type. |