UNIXworkcode

/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2024 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef IDAV_SETTINGS_H #define IDAV_SETTINGS_H #include "application.h" #include "config.h" #ifdef __cplusplus extern "C" { #endif typedef struct SettingsWindow { UiObject *obj; DavConfig *config; PwdStore *pwdstore; UiList *repos; /* * 0: repo list page * 1: edit repo page */ UiInteger *repo_tabview; DavBool repo_new; UiString *repo_name; UiString *repo_url; /* * value: char* credential id * * '-' entry + list of all credentials * This list contains the same credential pointers as credentials_users * and therefore doesn't need a destructor. * Both lists are updated at the same time */ UiList *repo_credentials; UiString *repo_user; UiString *repo_password; /* * checkbox value */ UiInteger *repo_encryption; UiList *repo_keys; /* * value: char* tls version name * * static list of TLS version strings */ UiList *repo_tls_versions; UiString *repo_cacert; UiInteger *repo_disable_verification; DavBool credentials_new; DavBool credentials_modified; DavBool credentials_list_needs_update; DavBool credentials_ignore_selectionevent; char *credentials_selected_id; int credentials_selected_index; int credentials_location_selected_index; /* * value: char* credentials id * * List of pwdstore locations and noloc credentials * The value is a copy (allocated by the UiContext) */ UiList *credentials_users; UiString *credentials_id; UiString *credentials_user; UiString *credentials_password; /* * value: char* url * * List of credential locations (PwdIndexEntry locations) * The value is a copy (allocated by the UiContext) */ UiList *credentials_locations; /* * value: char* key name * * List of encryption keys (DavKey) * The value is a copy (allocated by the UiContext) */ UiList *keys_list; UiString *key_name; UiString *key_file; UiString *key_type; UiInteger *key_secretstore; int keys_selected_index; int selected_repo; } SettingsWindow; typedef struct SettingsNewKeyDialog { SettingsWindow *settings; UiString *name; UiString *file; UiString *import_path; UiString *message; /* * value: char* key type name * * Static list of DavKey type names */ UiList *type; UiInteger *secretstore; DavBool add_to_repo; } SettingsNewKeyDialog; typedef struct SettingsNewCredentialsDialog { SettingsWindow *settings; UiString *id; UiString *user; UiString *password; UiInteger *addlocation; UiString *message; char *url; } SettingsNewCredentialsDialog; void settings_window_open(); void settings_credentials_decrypt(SettingsWindow *settings); void settings_ok(UiEvent *event, void *userdata); void settings_cancel(UiEvent *event, void *userdata); void settings_init(UiObject *obj, SettingsWindow *settings); /* * Open repository edit page for the repository settings->repos[repo_index] * This function will set settings->selected_repo to repo_index */ void settings_edit_repository(SettingsWindow *settings, int repo_index); /* * Store settings from the settings window into the DavCfgRepository object. * * This functions unsets settings->selected_repo and should only be called * when switching back to the repo list or closing the settings window */ void settings_store_repository(SettingsWindow *settings); void settings_clear_repository(SettingsWindow *settings); void settings_update_repolist(SettingsWindow *settings); void* settings_repolist_getvalue(DavCfgRepository *repo, int col); void settings_reload_repo_keys(SettingsWindow *settings); void settings_reload_keys(SettingsWindow *settings); const char* dav_tlsversion2str(int value); void settings_reload_credentials(SettingsWindow *settings); void settings_reload_repo_credentials(SettingsWindow *settings); /* * select credentials with the specified id and fill the credentials form * * if the id is specified, settings->credentials_id will be adjusted * id no id is specified, credentials with the id settings->credentials_id * are selected */ void settings_credentials_select(SettingsWindow *settings, const char *id); /* * clear the credentials form */ void settings_credentials_clear(SettingsWindow *settings); int settings_credentials_save(SettingsWindow *settings); void *keylist_getvalue(void *data, int col); void settings_edit_key(SettingsWindow *settings, DavCfgKey *key); void settings_clear_key(SettingsWindow *settings); #ifdef __cplusplus } #endif #endif /* IDAV_SETTINGS_H */