├── .editorconfig ├── .github └── workflows │ └── daily-update.yml ├── .gitignore ├── .gitmodules ├── .overcommit.yml ├── .php-cs-fixer.dist.php ├── .rubocop.yml ├── .rubocop_todo.yml ├── .ruby-version ├── Gemfile ├── README.md ├── Rakefile ├── VERSION ├── api ├── .gitignore ├── CHANGELOG ├── Gemfile ├── LICENSE ├── Rakefile ├── bin │ ├── vpsadmin-scheduler │ ├── vpsadmin-schedulerctl │ └── vpsadmin-supervisor ├── config.ru ├── config │ ├── .keep │ ├── dataset_plans.rb │ └── dataset_properties.rb ├── db │ ├── migrate │ │ ├── 20140208170244_setup.rb │ │ ├── 20140227150154_create_versions.rb │ │ ├── 20140615185520_add_api_tokens.rb │ │ ├── 20140815161745_add_shaper.rb │ │ ├── 20140913164605_token_auth_lifetime.rb │ │ ├── 20140927161625_add_transaction_chains.rb │ │ ├── 20140927161700_add_storage.rb │ │ ├── 20141105130158_change_vps_has_config.rb │ │ ├── 20141105175157_maintenance_mode.rb │ │ ├── 20141112075438_add_environment_config.rb │ │ ├── 20141212180955_transaction_rollback.rb │ │ ├── 20150126080724_add_snapshot_downloads.rb │ │ ├── 20150131162852_add_cluster_resources.rb │ │ ├── 20150205145349_user_owns_ip_addresses.rb │ │ ├── 20150206154652_vps_features.rb │ │ ├── 20150218142131_add_port_reservation.rb │ │ ├── 20150307174728_add_mailing.rb │ │ ├── 20150309175827_add_transaction_chain_concerns.rb │ │ ├── 20150312171845_cluster_resources_admin_override.rb │ │ ├── 20150528110508_add_object_lifetimes.rb │ │ ├── 20150528111113_use_object_lifetimes.rb │ │ ├── 20150614074218_password_versions.rb │ │ ├── 20150618124817_change_vps_console.rb │ │ ├── 20150625145437_user_environment_config_add_default.rb │ │ ├── 20150630072821_migrate_to_datetime_utc.rb │ │ ├── 20150715150147_remove_old_vps_backups.rb │ │ ├── 20150717065916_add_integrity_check.rb │ │ ├── 20150728160553_voluntary_node_attributes.rb │ │ ├── 20150730133630_add_user_sessions.rb │ │ ├── 20150730152316_add_api_tokens_created_at.rb │ │ ├── 20150801090150_admin_user_session.rb │ │ ├── 20150801211753_make_transactions_done_enum.rb │ │ ├── 20150802162711_add_transaction_queues.rb │ │ ├── 20150804201125_mail_recipient_voluntary_to.rb │ │ ├── 20150807152819_lifetimes_default_values.rb │ │ ├── 20150811075054_mail_logs_longtext.rb │ │ ├── 20150820174810_datasets_confirmed_integer.rb │ │ ├── 20150903081103_toggle_cluster_resource_use.rb │ │ ├── 20150903120108_add_lifetimes_to_mounts.rb │ │ ├── 20150904081403_add_dataset_property_referenced.rb │ │ ├── 20150904152438_add_snapshot_download_size.rb │ │ ├── 20151002090440_add_mount_on_start_fail.rb │ │ ├── 20151004115901_add_mount_toggle.rb │ │ ├── 20151015085656_mount_state_tracking.rb │ │ ├── 20151017130111_remove_mount_scripts.rb │ │ ├── 20151017155120_add_indexes.rb │ │ ├── 20151029155746_transaction_confirmations_attr_changes_text.rb │ │ ├── 20151029160857_add_dns_resolver_ip_version.rb │ │ ├── 20151124085214_add_transaction_indexes.rb │ │ ├── 20151124085559_add_kvm_vps_feature.rb │ │ ├── 20151213173722_add_more_indexes.rb │ │ ├── 20160109160611_remove_user_playground_enabled.rb │ │ ├── 20160120075845_unmanage_vps_hostname.rb │ │ ├── 20160130185329_add_continuous_resource_tracking.rb │ │ ├── 20160201072025_add_dataset_property_history.rb │ │ ├── 20160203074500_add_polymorphic_resource_lock.rb │ │ ├── 20160203074916_add_migration_plans.rb │ │ ├── 20160204152946_add_vps_outage_windows.rb │ │ ├── 20160208123742_add_object_history.rb │ │ ├── 20160214135014_add_status_indexes.rb │ │ ├── 20160214135501_add_vps_migration_cleanup_data.rb │ │ ├── 20160222135554_average_continuous_resource_tracking.rb │ │ ├── 20160224195110_add_stream_downloads.rb │ │ ├── 20160229081009_add_snapshot_history_identifier.rb │ │ ├── 20160308154537_add_snapshot_download_sha256sum.rb │ │ ├── 20160614112222_add_multilingual_mail.rb │ │ ├── 20160624185945_add_networks.rb │ │ ├── 20160627085407_add_resource_ipv4_private.rb │ │ ├── 20160628064205_add_vps_ip_ordering.rb │ │ ├── 20160629150716_add_ip_ranges.rb │ │ ├── 20160805144125_add_pool_maintenance_mode.rb │ │ ├── 20160819084000_move_locations_to_environment.rb │ │ ├── 20160819100816_allocate_ips_to_users.rb │ │ ├── 20160826150804_set_group_snapshots_unique.rb │ │ ├── 20160831111818_add_ip_transfers.rb │ │ ├── 20160902154617_add_public_private_ip_transfers.rb │ │ ├── 20160904191844_add_monthly_summary_for_ip_traffics.rb │ │ ├── 20160906090554_convert_ip_traffics_to_utc.rb │ │ ├── 20160907135218_add_ip_traffic_live_monitor.rb │ │ ├── 20161115174257_add_user_public_keys.rb │ │ ├── 20170114091907_free_unused_logins.rb │ │ ├── 20170114153715_refactor_dns_resolvers.rb │ │ ├── 20170115092224_refactor_os_templates.rb │ │ ├── 20170115104106_refactor_vps_configs.rb │ │ ├── 20170115153933_refactor_locations.rb │ │ ├── 20170115162128_refactor_nodes.rb │ │ ├── 20170116135908_refactor_transactions.rb │ │ ├── 20170117132633_refactor_users.rb │ │ ├── 20170117181427_refactor_ip_addresses.rb │ │ ├── 20170118094034_refactor_vpses.rb │ │ ├── 20170118160101_register_node_pubkeys.rb │ │ ├── 20170120080846_refactor_sysconfig.rb │ │ ├── 20170125153139_user_sessions_client_ip_tracking.rb │ │ ├── 20170130112048_forget_user_passwords.rb │ │ ├── 20170130154206_remove_user_payments.rb │ │ ├── 20170203122106_add_snapshot_labels.rb │ │ ├── 20170204092606_add_user_mail_recipients.rb │ │ ├── 20170325151018_add_mail_templates_public.rb │ │ ├── 20170610084155_add_cpu_limits.rb │ │ ├── 20171106154702_add_osctl_support.rb │ │ ├── 20180412063632_add_routable_subnets.rb │ │ ├── 20180416111102_add_networks_autopick.rb │ │ ├── 20180501071844_add_vps_veth_mac.rb │ │ ├── 20180501145934_add_user_namespace_nodes.rb │ │ ├── 20180503073718_make_cluster_resource_values_decimal.rb │ │ ├── 20180516061203_add_user_namespace_maps.rb │ │ ├── 20180518104840_add_userns_timestamps.rb │ │ ├── 20180518140011_make_ip_address_size_decimal.rb │ │ ├── 20180524085512_add_vps_feature_lxc_nesting.rb │ │ ├── 20180524103629_add_vps_feature_per_hypervisor_type.rb │ │ ├── 20180525100900_compress_ipv6_addresses.rb │ │ ├── 20180604115723_add_vps_feature_docker.rb │ │ ├── 20180928161725_remove_interconnecting_networks.rb │ │ ├── 20180929203314_vps_interfaces_addresses.rb │ │ ├── 20181119183704_add_ip_addresses_route_via.rb │ │ ├── 20181121153314_add_auto_add_host_ip_addresses.rb │ │ ├── 20190211124513_add_cluster_resource_packages.rb │ │ ├── 20190314114331_refactor_user_namespace_map_entry_names.rb │ │ ├── 20190501185918_add_user_password_reset.rb │ │ ├── 20190503142157_remove_old_api_tokens.rb │ │ ├── 20190507121309_add_generic_unique_tokens.rb │ │ ├── 20190507122654_refactor_api_tokens_to_session_tokens.rb │ │ ├── 20190508070536_add_totp_auth.rb │ │ ├── 20190513064011_rename_user_session_agents_to_user_agents.rb │ │ ├── 20190513064725_add_user_failed_logins.rb │ │ ├── 20190513075510_add_auth_token_client_info.rb │ │ ├── 20190519074913_add_user_totp_devices.rb │ │ ├── 20190912160159_add_snapshot_in_pool_clones.rb │ │ ├── 20190920153359_add_nfs_exports.rb │ │ ├── 20191021125132_add_network_purpose.rb │ │ ├── 20191104081056_add_multi_location_networks.rb │ │ ├── 20200307143441_add_pool_migration_pubkeys.rb │ │ ├── 20200308161901_add_environment_location_description.rb │ │ ├── 20200309160016_rename_vps_outage_to_maintenance_windows.rb │ │ ├── 20200803134524_add_node_active.rb │ │ ├── 20200803135923_add_location_network_primary.rb │ │ ├── 20200922070226_remove_vps_feature_docker.rb │ │ ├── 20200924180219_add_transaction_signing.rb │ │ ├── 20200927121503_add_vps_oom_reports.rb │ │ ├── 20210126204326_fix_nfs_export_unique_indexes.rb │ │ ├── 20210215160434_add_vps_rescue_mode.rb │ │ ├── 20210529125923_add_oom_report_no_killable.rb │ │ ├── 20220123194603_add_vps_start_menu.rb │ │ ├── 20220202111859_add_lifetimes_remind_after_date.rb │ │ ├── 20220504184116_add_indexes_chains_oom_reports.rb │ │ ├── 20220714144902_change_object_history_data_to_json.rb │ │ ├── 20220820133941_add_network_interface_shaper.rb │ │ ├── 20220831193118_add_transaction_chain_concerns_indexes.rb │ │ ├── 20220908140908_rename_vps_onboot_to_autostart.rb │ │ ├── 20220908161330_add_vps_autostart_priority.rb │ │ ├── 20220912070451_add_pool_max_datasets.rb │ │ ├── 20220913065326_switch_user_namespace_maps_to_pools.rb │ │ ├── 20220913114040_add_pool_status.rb │ │ ├── 20220920120951_add_pool_scan_percent.rb │ │ ├── 20221112155629_add_network_interface_accounting.rb │ │ ├── 20230122214018_add_vps_os_processes.rb │ │ ├── 20230213081826_remove_user_namespace_map_ugids.rb │ │ ├── 20230213082735_remove_user_namespace_map_pools.rb │ │ ├── 20230213083054_remove_vps_configs.rb │ │ ├── 20230213084545_remove_per_ip_shapers.rb │ │ ├── 20230213092308_remove_ip_traffics.rb │ │ ├── 20230214074616_remove_integrity_checks.rb │ │ ├── 20230214080054_remove_node_vz_attrs.rb │ │ ├── 20230218165608_remove_vpses_config_attribute.rb │ │ ├── 20230224164856_add_cgroup_flags.rb │ │ ├── 20230225073544_rename_node_statuses_vpsadmind_version.rb │ │ ├── 20230225142050_add_vps_admin_modifications.rb │ │ ├── 20230415154230_add_vps_ssh_host_keys.rb │ │ ├── 20230421171841_add_oom_reports_count.rb │ │ ├── 20230421182709_add_oom_reports_cgroup.rb │ │ ├── 20230614112319_move_userns_map_to_vpses.rb │ │ ├── 20230615143920_remove_network_interface_monitors_id.rb │ │ ├── 20230615150518_remove_vps_os_processes_id.rb │ │ ├── 20230623142135_add_dataset_in_pool_expansions.rb │ │ ├── 20230703161003_add_index_on_oom_reports_created_at.rb │ │ ├── 20230803123312_add_ip_address_assignments.rb │ │ ├── 20230806151956_add_mailboxes.rb │ │ ├── 20230810143840_add_vps_incident_reports.rb │ │ ├── 20230821123710_change_mailboxes_default_port_to_imap.rb │ │ ├── 20230904121318_add_incident_reports_from_cli.rb │ │ ├── 20230909064402_add_vps_feature_apparmor_control_dir.rb │ │ ├── 20231016100700_add_compressratio_dataset_properties.rb │ │ ├── 20231027164147_add_status_last_log.rb │ │ ├── 20231028145905_remove_network_interface_accountings_id.rb │ │ ├── 20231028151738_add_network_interface_accounting_indexes.rb │ │ ├── 20231031085006_remove_dataset_properties_last_log_at.rb │ │ ├── 20231116085008_add_pools_is_open.rb │ │ ├── 20231201191543_add_oauth2_provider.rb │ │ ├── 20231203074758_add_oauth2_code_challenge.rb │ │ ├── 20231207174132_remove_node_pubkeys.rb │ │ ├── 20231213163402_add_oauth2_client_settings.rb │ │ ├── 20231214083846_add_user_session_scopes.rb │ │ ├── 20231216135851_add_auth_token_purpose.rb │ │ ├── 20231216155818_add_single_sign_ons.rb │ │ ├── 20231218085935_add_configurable_user_session_length.rb │ │ ├── 20231219143126_remove_session_tokens.rb │ │ ├── 20231220100636_add_users_preferred_logout_all.rb │ │ ├── 20231220124552_add_users_configurable_sso.rb │ │ ├── 20231229175415_add_oauth2_authorization_client_info.rb │ │ ├── 20240113131046_add_oom_preventions.rb │ │ ├── 20240113193809_add_dataset_expansion_over_quota_tracking.rb │ │ ├── 20240125124755_add_components.rb │ │ ├── 20240126165609_add_user_created_host_ip_addresses.rb │ │ ├── 20240229135345_add_missing_personal_cluster_resource_package_items.rb │ │ ├── 20240308152841_extend_incident_report_codename.rb │ │ ├── 20240418082651_add_metrics_access_tokens.rb │ │ ├── 20240513130256_remove_vps_feature_apparmor_control_dir.rb │ │ ├── 20240527153145_add_node_vps_loadavgs.rb │ │ ├── 20240601131223_add_oom_report_tasks_rss_anon_file_shmem.rb │ │ ├── 20240602092635_add_oom_report_counters.rb │ │ ├── 20240610150646_add_user_devices.rb │ │ ├── 20240612125623_add_user_auth_options.rb │ │ ├── 20240612140437_add_user_devices_skip_multi_factor.rb │ │ ├── 20240612165217_add_user_failed_logins_reported_at.rb │ │ ├── 20240614140313_add_user_devices_last_seen_at.rb │ │ ├── 20240614150907_rename_user_devices_skip_multi_factor_auth.rb │ │ ├── 20240615093116_add_oauth2_authorizations_user_agent.rb │ │ ├── 20240615123252_add_user_devices_skip_multi_factor_auth_until.rb │ │ ├── 20240618092416_add_dns_servers.rb │ │ ├── 20240717132957_add_dns_server_zone_statuses.rb │ │ ├── 20240718093526_add_dns_tsig_keys.rb │ │ ├── 20240719135955_add_dns_zone_confirmable.rb │ │ ├── 20240728121215_add_dns_server_zone_secondaries.rb │ │ ├── 20240730113236_add_hidden_dns_servers.rb │ │ ├── 20240730151611_add_dns_servers_user_dns_zone_type.rb │ │ ├── 20240730153209_add_dns_records_confirmable.rb │ │ ├── 20240801065140_add_dns_records_comments.rb │ │ ├── 20240801112145_add_dynamic_dns_records.rb │ │ ├── 20240802064852_add_dns_zone_dnssec.rb │ │ ├── 20240803200139_add_dns_record_log_changes.rb │ │ ├── 20240816194004_add_dns_record_logs_user_id.rb │ │ ├── 20240821122633_make_dns_record_logs_standalone.rb │ │ ├── 20240831114419_add_users_enable_new_login_notification.rb │ │ ├── 20241016081921_add_vps_feature_impermanence.rb │ │ ├── 20241020090006_add_os_template_config.rb │ │ ├── 20241027151909_add_datasets_vps_id.rb │ │ ├── 20241027170252_add_vps_current_status_diskspace.rb │ │ ├── 20241101160100_add_vps_current_statuses_halted.rb │ │ ├── 20241104130237_add_os_families.rb │ │ ├── 20241104151630_add_user_devices_last_next_multi_factor_auth.rb │ │ ├── 20241118093252_add_vpses_enable_os_template_auto_update.rb │ │ ├── 20241123161745_add_os_templates_manage_hostname_dns_resolver.rb │ │ ├── 20241210120737_add_oom_report_rules.rb │ │ ├── 20250130150827_add_network_interface_enable.rb │ │ ├── 20250131131838_add_vpses_enable_network.rb │ │ ├── 20250131161427_add_incident_report_vps_action.rb │ │ ├── 20250213133759_add_webauthn.rb │ │ ├── 20250219211214_add_users_enable_multi_factor_auth.rb │ │ ├── 20250223072700_add_webauthn_credentials_use_count.rb │ │ ├── 20250226200230_add_vpses_map_mode.rb │ │ ├── 20250307191058_add_vps_user_data.rb │ │ ├── 20250316085931_vps_user_data_format_string.rb │ │ ├── 20250425132312_add_exports_original_enabled.rb │ │ ├── 20250425132321_add_dns_zones_original_enabled.rb │ │ ├── 20250425133822_add_dns_records_managed.rb │ │ └── 20250425142931_add_dns_records_user_id.rb │ ├── structure.sql │ └── test.sqlite3 ├── doc │ └── mail_templates.erb ├── lib │ ├── vpsadmin.rb │ └── vpsadmin │ │ ├── api.rb │ │ ├── api │ │ ├── action_state.rb │ │ ├── authentication │ │ │ ├── basic.rb │ │ │ ├── oauth2_authorize.erb │ │ │ ├── oauth2_config.rb │ │ │ ├── token_config.rb │ │ │ ├── webauthn_register.erb │ │ │ └── webauthn_register.rb │ │ ├── cluster_resources.rb │ │ ├── crypto_providers.rb │ │ ├── dataset_plans.rb │ │ ├── dataset_properties.rb │ │ ├── dns_resolver.rb │ │ ├── exceptions.rb │ │ ├── hash_options.rb │ │ ├── incident_reports.rb │ │ ├── inflections.rb │ │ ├── lifetimes.rb │ │ ├── maintainable.rb │ │ ├── metrics.rb │ │ ├── mount_selector.rb │ │ ├── object_history.rb │ │ ├── operations │ │ │ ├── authentication │ │ │ │ ├── password.rb │ │ │ │ ├── reset_password.rb │ │ │ │ └── totp.rb │ │ │ ├── base.rb │ │ │ ├── dataset │ │ │ │ ├── create.rb │ │ │ │ ├── find_by_name.rb │ │ │ │ ├── update_properties.rb │ │ │ │ └── utils.rb │ │ │ ├── dataset_expansion │ │ │ │ └── process_event.rb │ │ │ ├── dns_server_zone │ │ │ │ ├── create.rb │ │ │ │ └── destroy.rb │ │ │ ├── dns_tsig_key │ │ │ │ ├── create.rb │ │ │ │ └── destroy.rb │ │ │ ├── dns_zone │ │ │ │ ├── create_record.rb │ │ │ │ ├── create_system.rb │ │ │ │ ├── create_user.rb │ │ │ │ ├── destroy_record.rb │ │ │ │ ├── destroy_system.rb │ │ │ │ ├── destroy_user.rb │ │ │ │ ├── dynamic_update.rb │ │ │ │ ├── record_utils.rb │ │ │ │ ├── update.rb │ │ │ │ └── update_record.rb │ │ │ ├── dns_zone_transfer │ │ │ │ ├── create.rb │ │ │ │ └── destroy.rb │ │ │ ├── environment │ │ │ │ ├── update.rb │ │ │ │ └── update_user_config.rb │ │ │ ├── export │ │ │ │ ├── add_host.rb │ │ │ │ ├── create.rb │ │ │ │ ├── del_host.rb │ │ │ │ ├── destroy.rb │ │ │ │ ├── edit_host.rb │ │ │ │ └── update.rb │ │ │ ├── host_ip_address │ │ │ │ ├── create.rb │ │ │ │ ├── destroy.rb │ │ │ │ └── update.rb │ │ │ ├── location_network │ │ │ │ ├── create.rb │ │ │ │ ├── delete.rb │ │ │ │ └── update.rb │ │ │ ├── node │ │ │ │ └── pick.rb │ │ │ ├── totp_device │ │ │ │ ├── confirm.rb │ │ │ │ ├── create.rb │ │ │ │ ├── delete.rb │ │ │ │ ├── disable.rb │ │ │ │ ├── enable.rb │ │ │ │ └── update.rb │ │ │ ├── user │ │ │ │ ├── check_login.rb │ │ │ │ ├── failed_login.rb │ │ │ │ ├── incomplete_login.rb │ │ │ │ └── login.rb │ │ │ ├── user_session │ │ │ │ ├── close.rb │ │ │ │ ├── close_all.rb │ │ │ │ ├── close_token.rb │ │ │ │ ├── new_basic_login.rb │ │ │ │ ├── new_oauth2_login.rb │ │ │ │ ├── new_token_detached.rb │ │ │ │ ├── new_token_login.rb │ │ │ │ ├── resume_oauth2.rb │ │ │ │ ├── resume_token.rb │ │ │ │ └── utils.rb │ │ │ ├── utils │ │ │ │ └── dns.rb │ │ │ └── vps │ │ │ │ ├── create.rb │ │ │ │ ├── migrate.rb │ │ │ │ ├── passwd.rb │ │ │ │ ├── reinstall.rb │ │ │ │ ├── set_features.rb │ │ │ │ └── user_data_utils.rb │ │ ├── plugin.rb │ │ ├── plugin │ │ │ ├── loader.rb │ │ │ ├── metrics_base.rb │ │ │ ├── migrator.rb │ │ │ └── plugin.rb │ │ ├── public_key_decoder.rb │ │ ├── resources │ │ │ ├── api_server.rb │ │ │ ├── cluster.rb │ │ │ ├── cluster_resource.rb │ │ │ ├── cluster_resource_package.rb │ │ │ ├── component.rb │ │ │ ├── dataset.rb │ │ │ ├── dataset_expansion.rb │ │ │ ├── dataset_plan.rb │ │ │ ├── debug.rb │ │ │ ├── default_object_cluster_resource.rb │ │ │ ├── dns_record.rb │ │ │ ├── dns_record_log.rb │ │ │ ├── dns_resolver.rb │ │ │ ├── dns_server.rb │ │ │ ├── dns_server_zone.rb │ │ │ ├── dns_tsig_key.rb │ │ │ ├── dns_zone.rb │ │ │ ├── dns_zone_transfer.rb │ │ │ ├── dnssec_record.rb │ │ │ ├── environment.rb │ │ │ ├── export.rb │ │ │ ├── host_ip_address.rb │ │ │ ├── incident_report.rb │ │ │ ├── ip_address.rb │ │ │ ├── ip_address_assignment.rb │ │ │ ├── language.rb │ │ │ ├── location.rb │ │ │ ├── location_network.rb │ │ │ ├── mail_log.rb │ │ │ ├── mail_recipient.rb │ │ │ ├── mail_template.rb │ │ │ ├── mailbox.rb │ │ │ ├── metrics_access_token.rb │ │ │ ├── migration_plan.rb │ │ │ ├── network.rb │ │ │ ├── network_interface.rb │ │ │ ├── network_interface_accounting.rb │ │ │ ├── network_interface_monitor.rb │ │ │ ├── node.rb │ │ │ ├── oauth2_client.rb │ │ │ ├── object_history.rb │ │ │ ├── oom_report.rb │ │ │ ├── oom_report_rule.rb │ │ │ ├── os_family.rb │ │ │ ├── os_template.rb │ │ │ ├── pool.rb │ │ │ ├── snapshot_download.rb │ │ │ ├── system_config.rb │ │ │ ├── transaction.rb │ │ │ ├── transaction_chain.rb │ │ │ ├── user.rb │ │ │ ├── user_cluster_resource_package.rb │ │ │ ├── user_namespace.rb │ │ │ ├── user_namespace_map.rb │ │ │ ├── user_session.rb │ │ │ ├── vps.rb │ │ │ ├── vps_user_data.rb │ │ │ └── webauthn.rb │ │ ├── tasks.rb │ │ ├── tasks │ │ │ ├── authentication.rb │ │ │ ├── dataset.rb │ │ │ ├── dataset_expansion.rb │ │ │ ├── dns.rb │ │ │ ├── incident_report.rb │ │ │ ├── lifetimes.rb │ │ │ ├── mail.rb │ │ │ ├── oom_report.rb │ │ │ ├── plugin.rb │ │ │ ├── prometheus.rb │ │ │ ├── snapshot.rb │ │ │ ├── user_session.rb │ │ │ ├── vps.rb │ │ │ ├── vps_migration.rb │ │ │ └── vpsadmin.rake │ │ ├── transaction_signer.rb │ │ └── version.rb │ │ ├── scheduler │ │ ├── cron_scheduler.rb │ │ ├── cron_task.rb │ │ ├── daemon.rb │ │ ├── server.rb │ │ └── worker.rb │ │ ├── supervisor.rb │ │ └── supervisor │ │ ├── cli.rb │ │ ├── console │ │ └── rpc.rb │ │ ├── node │ │ ├── base.rb │ │ ├── dataset_expansions.rb │ │ ├── dns_status.rb │ │ ├── net_accounting.rb │ │ ├── net_monitor.rb │ │ ├── oom_reports.rb │ │ ├── pool_status.rb │ │ ├── rpc.rb │ │ ├── status.rb │ │ ├── storage_status.rb │ │ ├── vps_events.rb │ │ ├── vps_mounts.rb │ │ ├── vps_os_processes.rb │ │ ├── vps_os_release.rb │ │ ├── vps_ssh_host_keys.rb │ │ └── vps_status.rb │ │ └── node_manager.rb ├── models │ ├── application_record.rb │ ├── auth_token.rb │ ├── branch.rb │ ├── cluster.rb │ ├── cluster_resource.rb │ ├── cluster_resource_package.rb │ ├── cluster_resource_package_item.rb │ ├── cluster_resource_use.rb │ ├── confirmable.rb │ ├── dataset.rb │ ├── dataset_action.rb │ ├── dataset_expansion.rb │ ├── dataset_expansion_event.rb │ ├── dataset_expansion_history.rb │ ├── dataset_in_pool.rb │ ├── dataset_in_pool_plan.rb │ ├── dataset_plan.rb │ ├── dataset_property.rb │ ├── dataset_property_history.rb │ ├── dataset_tree.rb │ ├── default_lifetime_value.rb │ ├── default_object_cluster_resource.rb │ ├── default_user_cluster_resource_package.rb │ ├── dns_record.rb │ ├── dns_record_log.rb │ ├── dns_resolver.rb │ ├── dns_server.rb │ ├── dns_server_zone.rb │ ├── dns_tsig_key.rb │ ├── dns_zone.rb │ ├── dns_zone_transfer.rb │ ├── dnssec_record.rb │ ├── environment.rb │ ├── environment_dataset_plan.rb │ ├── environment_os_template.rb │ ├── environment_user_config.rb │ ├── export.rb │ ├── export_host.rb │ ├── group_snapshot.rb │ ├── host_ip_address.rb │ ├── incident_report.rb │ ├── ip_address.rb │ ├── ip_address_assignment.rb │ ├── language.rb │ ├── location.rb │ ├── location_network.rb │ ├── lockable.rb │ ├── mail_log.rb │ ├── mail_recipient.rb │ ├── mail_template.rb │ ├── mail_template_recipient.rb │ ├── mail_template_translation.rb │ ├── mailbox.rb │ ├── mailbox_handler.rb │ ├── maintenance_lock.rb │ ├── metrics_access_token.rb │ ├── migration_plan.rb │ ├── mount.rb │ ├── network.rb │ ├── network_interface.rb │ ├── network_interface_daily_accounting.rb │ ├── network_interface_monitor.rb │ ├── network_interface_monthly_accounting.rb │ ├── network_interface_yearly_accounting.rb │ ├── node.rb │ ├── node_current_status.rb │ ├── node_status.rb │ ├── oauth2_authorization.rb │ ├── oauth2_client.rb │ ├── object_history.rb │ ├── object_state.rb │ ├── oom_prevention.rb │ ├── oom_report.rb │ ├── oom_report_counter.rb │ ├── oom_report_rule.rb │ ├── oom_report_stat.rb │ ├── oom_report_task.rb │ ├── oom_report_usage.rb │ ├── os_family.rb │ ├── os_template.rb │ ├── pool.rb │ ├── port_reservation.rb │ ├── repeatable_task.rb │ ├── resource_lock.rb │ ├── single_sign_on.rb │ ├── snapshot.rb │ ├── snapshot_download.rb │ ├── snapshot_in_pool.rb │ ├── snapshot_in_pool_clone.rb │ ├── snapshot_in_pool_in_branch.rb │ ├── sys_config.rb │ ├── token.rb │ ├── transaction.rb │ ├── transaction_chain.rb │ ├── transaction_chain_concern.rb │ ├── transaction_chains │ │ ├── branch │ │ │ └── destroy.rb │ │ ├── cluster │ │ │ ├── generate_known_hosts.rb │ │ │ └── generate_migration_keys.rb │ │ ├── dataset │ │ │ ├── backup.rb │ │ │ ├── base_download.rb │ │ │ ├── create.rb │ │ │ ├── destroy.rb │ │ │ ├── full_download.rb │ │ │ ├── group_snapshot.rb │ │ │ ├── incremental_download.rb │ │ │ ├── inherit.rb │ │ │ ├── remove_download.rb │ │ │ ├── rollback.rb │ │ │ ├── rotate.rb │ │ │ ├── send.rb │ │ │ ├── set.rb │ │ │ ├── snapshot.rb │ │ │ └── transfer.rb │ │ ├── dataset_in_pool │ │ │ ├── destroy.rb │ │ │ └── detach_backup_heads.rb │ │ ├── dataset_tree │ │ │ └── destroy.rb │ │ ├── deprecated.rb │ │ ├── dns_resolver │ │ │ ├── destroy.rb │ │ │ └── update.rb │ │ ├── dns_server_zone │ │ │ ├── create.rb │ │ │ └── destroy.rb │ │ ├── dns_zone │ │ │ ├── create_record.rb │ │ │ ├── create_user.rb │ │ │ ├── destroy_record.rb │ │ │ ├── destroy_user.rb │ │ │ ├── set_reverse_record.rb │ │ │ ├── unset_reverse_record.rb │ │ │ ├── update.rb │ │ │ └── update_record.rb │ │ ├── dns_zone_transfer │ │ │ ├── create.rb │ │ │ └── destroy.rb │ │ ├── export │ │ │ ├── add_hosts.rb │ │ │ ├── add_hosts_to_all.rb │ │ │ ├── create.rb │ │ │ ├── del_hosts.rb │ │ │ ├── del_hosts_from_all.rb │ │ │ ├── destroy.rb │ │ │ ├── edit_host.rb │ │ │ └── update.rb │ │ ├── host_ip_address │ │ │ └── destroy.rb │ │ ├── incident_report │ │ │ ├── new.rb │ │ │ ├── process.rb │ │ │ ├── reply.rb │ │ │ ├── send.rb │ │ │ └── utils.rb │ │ ├── ip │ │ │ ├── allocate.rb │ │ │ ├── free.rb │ │ │ └── update.rb │ │ ├── lifetimes │ │ │ ├── expiration_warning.rb │ │ │ ├── not_implemented.rb │ │ │ └── wrapper.rb │ │ ├── mail │ │ │ ├── daily_report.rb │ │ │ └── vps_dataset_expanded.rb │ │ ├── maintenance │ │ │ └── custom.rb │ │ ├── migration_plan │ │ │ └── mail.rb │ │ ├── network │ │ │ ├── add_ips.rb │ │ │ └── create.rb │ │ ├── network_interface.rb │ │ ├── network_interface │ │ │ ├── add_host_ip.rb │ │ │ ├── add_route.rb │ │ │ ├── cleanup_host_ip_addresses.rb │ │ │ ├── clear.rb │ │ │ ├── del_host_ip.rb │ │ │ ├── del_route.rb │ │ │ ├── destroy.rb │ │ │ ├── rename.rb │ │ │ ├── update.rb │ │ │ ├── venet │ │ │ │ ├── clone.rb │ │ │ │ ├── create.rb │ │ │ │ └── morph.rb │ │ │ ├── veth │ │ │ │ ├── base.rb │ │ │ │ └── helpers.rb │ │ │ └── veth_routed │ │ │ │ ├── clone.rb │ │ │ │ ├── create.rb │ │ │ │ └── morph.rb │ │ ├── node │ │ │ ├── register.rb │ │ │ └── shaper_root_change.rb │ │ ├── pool │ │ │ └── create.rb │ │ ├── snapshot │ │ │ └── destroy.rb │ │ ├── snapshot_in_pool │ │ │ ├── destroy.rb │ │ │ ├── free_clone.rb │ │ │ ├── purge_clones.rb │ │ │ └── use_clone.rb │ │ ├── user │ │ │ ├── create.rb │ │ │ ├── destroy.rb │ │ │ ├── hard_delete.rb │ │ │ ├── new_login.rb │ │ │ ├── new_token.rb │ │ │ ├── report_failed_logins.rb │ │ │ ├── resume.rb │ │ │ ├── revive.rb │ │ │ ├── soft_delete.rb │ │ │ ├── suspend.rb │ │ │ └── totp_recovery_code_used.rb │ │ ├── user_namespace │ │ │ ├── allocate.rb │ │ │ └── free.rb │ │ ├── user_namespace_map │ │ │ ├── disuse.rb │ │ │ └── use.rb │ │ └── vps │ │ │ ├── autostart.rb │ │ │ ├── block.rb │ │ │ ├── boot.rb │ │ │ ├── clone.rb │ │ │ ├── clone │ │ │ ├── base.rb │ │ │ └── os_to_os.rb │ │ │ ├── create.rb │ │ │ ├── deploy_public_key.rb │ │ │ ├── deploy_user_data.rb │ │ │ ├── destroy.rb │ │ │ ├── destroy_mount.rb │ │ │ ├── enable_network.rb │ │ │ ├── expand_dataset.rb │ │ │ ├── expand_dataset_again.rb │ │ │ ├── features.rb │ │ │ ├── migrate.rb │ │ │ ├── migrate │ │ │ ├── base.rb │ │ │ ├── mount_migrator.rb │ │ │ └── os_to_os.rb │ │ │ ├── mount.rb │ │ │ ├── mount_dataset.rb │ │ │ ├── mounts.rb │ │ │ ├── oom_prevention.rb │ │ │ ├── oom_reports.rb │ │ │ ├── passwd.rb │ │ │ ├── reinstall.rb │ │ │ ├── replace.rb │ │ │ ├── replace │ │ │ └── os.rb │ │ │ ├── restart.rb │ │ │ ├── restore.rb │ │ │ ├── revive.rb │ │ │ ├── set_resources.rb │ │ │ ├── shrink_dataset.rb │ │ │ ├── soft_delete.rb │ │ │ ├── start.rb │ │ │ ├── stop.rb │ │ │ ├── stop_over_quota.rb │ │ │ ├── swap.rb │ │ │ ├── umount.rb │ │ │ ├── umount_dataset.rb │ │ │ ├── unblock.rb │ │ │ ├── update.rb │ │ │ └── update_mount.rb │ ├── transaction_confirmation.rb │ ├── transactions │ │ ├── dns_server │ │ │ └── reload.rb │ │ ├── dns_server_zone │ │ │ ├── add_servers.rb │ │ │ ├── create.rb │ │ │ ├── create_records.rb │ │ │ ├── delete_records.rb │ │ │ ├── destroy.rb │ │ │ ├── remove_servers.rb │ │ │ ├── update.rb │ │ │ └── update_records.rb │ │ ├── export │ │ │ ├── add_hosts.rb │ │ │ ├── create.rb │ │ │ ├── del_hosts.rb │ │ │ ├── destroy.rb │ │ │ ├── disable.rb │ │ │ ├── enable.rb │ │ │ └── set.rb │ │ ├── mail │ │ │ └── send.rb │ │ ├── maintenance_window │ │ │ ├── in_or_fail.rb │ │ │ └── wait.rb │ │ ├── network │ │ │ └── register.rb │ │ ├── network_interface │ │ │ ├── add_host_ip.rb │ │ │ ├── add_route.rb │ │ │ ├── create_veth_routed.rb │ │ │ ├── del_host_ip.rb │ │ │ ├── del_route.rb │ │ │ ├── disable.rb │ │ │ ├── enable.rb │ │ │ ├── remove_veth_routed.rb │ │ │ ├── rename.rb │ │ │ └── set_shaper.rb │ │ ├── pool │ │ │ ├── authorize_send_key.rb │ │ │ └── generate_send_key.rb │ │ ├── queue │ │ │ ├── release.rb │ │ │ └── reserve.rb │ │ ├── storage │ │ │ ├── activate_snapshot_clone.rb │ │ │ ├── apply_rollback.rb │ │ │ ├── branch_dataset.rb │ │ │ ├── clone_snapshot.rb │ │ │ ├── clone_snapshot_name.rb │ │ │ ├── create_dataset.rb │ │ │ ├── create_pool.rb │ │ │ ├── create_snapshot.rb │ │ │ ├── create_snapshots.rb │ │ │ ├── create_tree.rb │ │ │ ├── deactivate_snapshot_clone.rb │ │ │ ├── destroy_branch.rb │ │ │ ├── destroy_dataset.rb │ │ │ ├── destroy_snapshot.rb │ │ │ ├── destroy_tree.rb │ │ │ ├── download_snapshot.rb │ │ │ ├── ensure_ugid_offset.rb │ │ │ ├── inherit_property.rb │ │ │ ├── local_send.rb │ │ │ ├── prepare_rollback.rb │ │ │ ├── recv.rb │ │ │ ├── recv_check.rb │ │ │ ├── remove_clone.rb │ │ │ ├── remove_download.rb │ │ │ ├── rollback.rb │ │ │ ├── rsync_dataset.rb │ │ │ ├── send.rb │ │ │ ├── set_canmount.rb │ │ │ └── set_dataset.rb │ │ ├── user_namespace │ │ │ ├── disuse_map.rb │ │ │ └── use_map.rb │ │ ├── utils │ │ │ ├── mounts.rb │ │ │ ├── no_op.rb │ │ │ └── user_namespaces.rb │ │ └── vps │ │ │ ├── apply_user_data.rb │ │ │ ├── autostart.rb │ │ │ ├── boot.rb │ │ │ ├── chown.rb │ │ │ ├── copy.rb │ │ │ ├── create.rb │ │ │ ├── deploy_public_key.rb │ │ │ ├── deploy_user_data.rb │ │ │ ├── destroy.rb │ │ │ ├── dns_resolver.rb │ │ │ ├── features.rb │ │ │ ├── hostname.rb │ │ │ ├── map_mode.rb │ │ │ ├── mount.rb │ │ │ ├── mounts.rb │ │ │ ├── os_template.rb │ │ │ ├── passwd.rb │ │ │ ├── populate_config.rb │ │ │ ├── recover_cleanup.rb │ │ │ ├── reinstall.rb │ │ │ ├── remove_config.rb │ │ │ ├── resources.rb │ │ │ ├── restart.rb │ │ │ ├── send_cleanup.rb │ │ │ ├── send_config.rb │ │ │ ├── send_rollback_config.rb │ │ │ ├── send_rootfs.rb │ │ │ ├── send_state.rb │ │ │ ├── send_sync.rb │ │ │ ├── shaper_root_change.rb │ │ │ ├── start.rb │ │ │ ├── start_menu.rb │ │ │ ├── stop.rb │ │ │ ├── umount.rb │ │ │ ├── unmanage_dns_resolver.rb │ │ │ ├── unmanage_hostname.rb │ │ │ └── wait_for_routes.rb │ ├── user.rb │ ├── user_agent.rb │ ├── user_cluster_resource.rb │ ├── user_cluster_resource_package.rb │ ├── user_device.rb │ ├── user_failed_login.rb │ ├── user_mail_role_recipient.rb │ ├── user_mail_template_recipient.rb │ ├── user_namespace.rb │ ├── user_namespace_block.rb │ ├── user_namespace_map.rb │ ├── user_namespace_map_entry.rb │ ├── user_public_key.rb │ ├── user_session.rb │ ├── user_totp_device.rb │ ├── vps.rb │ ├── vps_console.rb │ ├── vps_current_status.rb │ ├── vps_feature.rb │ ├── vps_maintenance_window.rb │ ├── vps_migration.rb │ ├── vps_os_process.rb │ ├── vps_ssh_host_key.rb │ ├── vps_status.rb │ ├── vps_user_data.rb │ ├── vpsadmin_component.rb │ ├── webauthn_challenge.rb │ └── webauthn_credential.rb ├── shell.nix └── spec │ ├── api │ └── api_spec.rb │ ├── fixtures │ ├── dns_resolvers.yml │ ├── environments.yml │ ├── locations.yml │ ├── nodes.yml │ ├── os_templates.yml │ ├── users.yml │ └── vpses.yml │ ├── resources │ ├── dns_resolver │ │ ├── list_spec.rb │ │ └── show_spec.rb │ ├── os_template │ │ └── list_spec.rb │ ├── user │ │ ├── create_spec.rb │ │ └── list_spec.rb │ └── vps │ │ ├── control_spec.rb │ │ ├── create_spec.rb │ │ ├── list_spec.rb │ │ ├── passwd_spec.rb │ │ └── reinstall_spec.rb │ └── spec_helper.rb ├── client ├── .gitignore ├── .rubocop.yml ├── CHANGELOG ├── Gemfile ├── LICENSE ├── README.md ├── Rakefile ├── bin │ └── vpsadminctl ├── lib │ ├── terminal_size.rb │ └── vpsadmin │ │ ├── cli.rb │ │ ├── cli │ │ ├── commands │ │ │ ├── backup_dataset.rb │ │ │ ├── backup_vps.rb │ │ │ ├── base_download.rb │ │ │ ├── network_top.rb │ │ │ ├── snapshot_download.rb │ │ │ ├── snapshot_send.rb │ │ │ ├── vps_migrate_many.rb │ │ │ └── vps_remote_console.rb │ │ └── stream_downloader.rb │ │ ├── client.rb │ │ └── client │ │ └── version.rb ├── shell.nix └── vpsadmin-client.gemspec ├── console_router ├── .editorconfig ├── .gitignore ├── CHANGELOG ├── Gemfile ├── LICENSE ├── bin │ └── vpsadmin-console-router ├── config.ru ├── config │ └── .keep ├── lib │ └── vpsadmin │ │ ├── console_router.rb │ │ └── console_router │ │ ├── router.rb │ │ ├── rpc_client.rb │ │ ├── server.rb │ │ └── version.rb ├── public │ ├── addon-fit.js │ ├── addon-fit.js.map │ ├── console.js │ ├── haveapi-client.js │ ├── keyboard.css │ ├── keyboard.js │ ├── simple-keyboard.css │ ├── simple-keyboard.js │ ├── vzconsole.js │ ├── xterm.css │ ├── xterm.js │ └── xterm.js.map ├── shell.nix ├── update-simple-keyboard.sh ├── update-xterm-js.sh └── views │ └── console.erb ├── doc ├── .editorconfig ├── LICENSE ├── Makefile ├── README.md ├── index.mdwn ├── local.css ├── networking.mdwn ├── networking │ └── shaping.mdwn ├── object_lifetimes.mdwn ├── overview.mdwn ├── plugins.mdwn ├── releases │ ├── v2.0.mdwn │ ├── v2.0 │ │ ├── assign_cluster_resources.rb │ │ ├── migrate_backups_to_snapshots.rb │ │ ├── migrate_nas_step1.sh │ │ ├── migrate_nas_step2.sh │ │ ├── rename_backup_snapshots.rb │ │ └── rename_backup_snapshots.sh │ ├── v2.1.0.mdwn │ ├── v2.2.0.mdwn │ ├── v2.3.0.mdwn │ ├── v2.4.0.mdwn │ ├── v2.5.0.mdwn │ ├── v2.5.0 │ │ ├── order_vps_ips.rb │ │ └── regenerate_vps_mounts.rb │ ├── v2.6.0.mdwn │ ├── v2.7.0.mdwn │ ├── v2.8.0.mdwn │ ├── v2.9.0.mdwn │ └── v3.0.0.mdwn ├── storage.mdwn ├── storage │ ├── branching.mdwn │ ├── create.mdwn │ ├── destroy.mdwn │ ├── download.mdwn │ ├── rollback.mdwn │ ├── rotate.mdwn │ ├── set.mdwn │ ├── snapshot.mdwn │ └── transfer.mdwn ├── transactions.mdwn ├── vps.mdwn └── vps │ ├── datasets.mdwn │ ├── remote_console.mdwn │ └── remote_console │ └── vzctl-console.patch ├── download_mounter ├── .gitignore ├── CHANGELOG ├── Gemfile ├── LICENSE ├── bin │ └── vpsadmin-download-mounter └── lib │ └── vpsadmin │ ├── download_mounter.rb │ └── download_mounter │ ├── cli.rb │ ├── mounter.rb │ └── version.rb ├── libnodectld ├── .gitignore ├── .rubocop.yml ├── CHANGELOG ├── Gemfile ├── LICENSE ├── Rakefile ├── lib │ ├── nodectld.rb │ └── nodectld │ │ ├── command.rb │ │ ├── commands │ │ ├── base.rb │ │ ├── branch │ │ │ ├── create.rb │ │ │ └── destroy.rb │ │ ├── dataset │ │ │ ├── activate_snapshot_clone.rb │ │ │ ├── apply_rollback.rb │ │ │ ├── clone_snapshot.rb │ │ │ ├── clone_snapshot_name.rb │ │ │ ├── create.rb │ │ │ ├── deactivate_snapshot_clone.rb │ │ │ ├── destroy.rb │ │ │ ├── destroy_snapshot.rb │ │ │ ├── download_snapshot.rb │ │ │ ├── group_snapshot.rb │ │ │ ├── inherit.rb │ │ │ ├── local_rollback.rb │ │ │ ├── local_send.rb │ │ │ ├── prepare_rollback.rb │ │ │ ├── recv.rb │ │ │ ├── recv_check.rb │ │ │ ├── remove_clone.rb │ │ │ ├── remove_download.rb │ │ │ ├── rsync_dataset.rb │ │ │ ├── send.rb │ │ │ ├── set.rb │ │ │ ├── set_canmount.rb │ │ │ └── snapshot.rb │ │ ├── dataset_tree │ │ │ ├── create.rb │ │ │ └── destroy.rb │ │ ├── dns_server │ │ │ └── reload.rb │ │ ├── dns_server_zone │ │ │ ├── add_servers.rb │ │ │ ├── create.rb │ │ │ ├── create_records.rb │ │ │ ├── delete_records.rb │ │ │ ├── destroy.rb │ │ │ ├── remove_servers.rb │ │ │ ├── update.rb │ │ │ └── update_records.rb │ │ ├── export │ │ │ ├── add_hosts.rb │ │ │ ├── create.rb │ │ │ ├── del_hosts.rb │ │ │ ├── destroy.rb │ │ │ ├── disable.rb │ │ │ ├── enable.rb │ │ │ └── set.rb │ │ ├── mail │ │ │ └── send.rb │ │ ├── network │ │ │ └── register.rb │ │ ├── network_interface │ │ │ ├── create_veth_routed.rb │ │ │ ├── disable.rb │ │ │ ├── enable.rb │ │ │ ├── host_ip_add.rb │ │ │ ├── host_ip_del.rb │ │ │ ├── remove_veth_routed.rb │ │ │ ├── rename.rb │ │ │ ├── route_add.rb │ │ │ ├── route_del.rb │ │ │ └── set_shaper.rb │ │ ├── outage_window │ │ │ ├── in_or_fail.rb │ │ │ └── wait.rb │ │ ├── pool │ │ │ ├── authorize_send_key.rb │ │ │ ├── create.rb │ │ │ └── generate_send_key.rb │ │ ├── queue │ │ │ ├── release.rb │ │ │ └── reserve.rb │ │ ├── shaper │ │ │ └── root_change.rb │ │ ├── user_namespace │ │ │ ├── disuse.rb │ │ │ └── use.rb │ │ ├── utils │ │ │ └── no_op.rb │ │ └── vps │ │ │ ├── apply_user_data.rb │ │ │ ├── autostart.rb │ │ │ ├── boot.rb │ │ │ ├── chown.rb │ │ │ ├── copy.rb │ │ │ ├── create.rb │ │ │ ├── deploy_public_key.rb │ │ │ ├── deploy_user_data.rb │ │ │ ├── destroy.rb │ │ │ ├── dns_resolver.rb │ │ │ ├── features.rb │ │ │ ├── hostname.rb │ │ │ ├── map_mode.rb │ │ │ ├── mount.rb │ │ │ ├── mounts.rb │ │ │ ├── os_template.rb │ │ │ ├── passwd.rb │ │ │ ├── populate_config.rb │ │ │ ├── recover_cleanup.rb │ │ │ ├── reinstall.rb │ │ │ ├── remove_config.rb │ │ │ ├── resources.rb │ │ │ ├── restart.rb │ │ │ ├── send_cleanup.rb │ │ │ ├── send_config.rb │ │ │ ├── send_rollback_config.rb │ │ │ ├── send_rootfs.rb │ │ │ ├── send_state.rb │ │ │ ├── send_sync.rb │ │ │ ├── start.rb │ │ │ ├── start_menu.rb │ │ │ ├── stop.rb │ │ │ ├── umount.rb │ │ │ ├── unmanage_dns_resolver.rb │ │ │ ├── unmanage_hostname.rb │ │ │ └── wait_for_routes.rb │ │ ├── config.rb │ │ ├── confirmations.rb │ │ ├── console.rb │ │ ├── console │ │ ├── server.rb │ │ └── wrapper.rb │ │ ├── ct.rb │ │ ├── ct_hook.rb │ │ ├── ct_hook_installer.rb │ │ ├── ct_monitor.rb │ │ ├── ct_top.rb │ │ ├── daemon.rb │ │ ├── dataset.rb │ │ ├── dataset_expander.rb │ │ ├── db.rb │ │ ├── dns_config.rb │ │ ├── dns_server_zone.rb │ │ ├── dns_status.rb │ │ ├── exceptions.rb │ │ ├── export.rb │ │ ├── exporter.rb │ │ ├── kernel_log │ │ ├── event.rb │ │ ├── events.rb │ │ ├── message.rb │ │ ├── oom_kill │ │ │ ├── event.rb │ │ │ ├── report.rb │ │ │ └── submitter.rb │ │ └── parser.rb │ │ ├── mount_reporter.rb │ │ ├── mounter.rb │ │ ├── net_accounting.rb │ │ ├── net_accounting │ │ └── interface.rb │ │ ├── network_interface.rb │ │ ├── nfs_server.rb │ │ ├── node.rb │ │ ├── node_bunny.rb │ │ ├── node_status.rb │ │ ├── osctl_container.rb │ │ ├── osctl_exporter.rb │ │ ├── osctl_users.rb │ │ ├── pool_hook.rb │ │ ├── pool_status.rb │ │ ├── queues.rb │ │ ├── remote_client.rb │ │ ├── remote_commands │ │ ├── base.rb │ │ ├── chain.rb │ │ ├── ct_hook.rb │ │ ├── flush.rb │ │ ├── get.rb │ │ ├── init.rb │ │ ├── kill.rb │ │ ├── mount_state.rb │ │ ├── pause.rb │ │ ├── ping.rb │ │ ├── pool_hook.rb │ │ ├── pry.rb │ │ ├── queue.rb │ │ ├── refresh.rb │ │ ├── reinit.rb │ │ ├── reload.rb │ │ ├── restart.rb │ │ ├── resume.rb │ │ ├── set.rb │ │ ├── status.rb │ │ ├── stop.rb │ │ └── update.rb │ │ ├── remote_control.rb │ │ ├── route_check.rb │ │ ├── route_list.rb │ │ ├── rpc_client.rb │ │ ├── shaper.rb │ │ ├── standalone.rb │ │ ├── storage_status.rb │ │ ├── system_probes.rb │ │ ├── system_probes │ │ ├── arc.rb │ │ ├── cpu_usage.rb │ │ ├── cpus.rb │ │ ├── kernel.rb │ │ ├── loadavg.rb │ │ ├── memory.rb │ │ └── uptime.rb │ │ ├── thread_pool.rb │ │ ├── transaction_queue.rb │ │ ├── transaction_verifier.rb │ │ ├── utils.rb │ │ ├── utils │ │ ├── command.rb │ │ ├── compat.rb │ │ ├── dns.rb │ │ ├── mbuffer.rb │ │ ├── osctl.rb │ │ ├── outage_window.rb │ │ ├── pool.rb │ │ ├── queue.rb │ │ ├── routes.rb │ │ ├── subprocess.rb │ │ ├── system.rb │ │ ├── vps.rb │ │ ├── worker.rb │ │ └── zfs.rb │ │ ├── version.rb │ │ ├── veth_map.rb │ │ ├── vps.rb │ │ ├── vps_config.rb │ │ ├── vps_config │ │ ├── mount.rb │ │ ├── network_interface.rb │ │ ├── network_interface_list.rb │ │ ├── route.rb │ │ └── top_level.rb │ │ ├── vps_os_release.rb │ │ ├── vps_post_start.rb │ │ ├── vps_ssh_host_keys.rb │ │ ├── vps_status.rb │ │ ├── vps_user_data.rb │ │ ├── vps_user_data │ │ ├── base.rb │ │ ├── cloud_init.rb │ │ ├── nixos.rb │ │ └── script.rb │ │ ├── worker.rb │ │ └── zfs_stream.rb ├── libnodectld.gemspec ├── sample_config.yml ├── shell.nix └── templates │ ├── ct │ └── hook │ │ ├── post-mount │ │ ├── pre-start │ │ └── veth-up │ ├── pool │ └── hook │ │ ├── post-import │ │ ├── pre-export │ │ └── pre-import │ └── vz_to_os │ ├── alpine_cgroups-mount.initscript │ └── devuan_cgroups-mount.initscript ├── mail_templates ├── .gitignore ├── CHANGELOG ├── Gemfile ├── LICENSE ├── README.md ├── bin │ └── vpsadmin-mail-templates ├── lib │ └── vpsadmin │ │ ├── mail_templates.rb │ │ └── mail_templates │ │ ├── cli.rb │ │ ├── meta.rb │ │ ├── template.rb │ │ ├── translation.rb │ │ └── version.rb └── vpsadmin-mail-templates.gemspec ├── nixos ├── modules │ ├── module-list.nix │ ├── nixos-modules.nix │ ├── services │ │ └── scheduling │ │ │ └── cronie.nix │ ├── vpsadmin │ │ ├── api-app.nix │ │ ├── api-runners.nix │ │ ├── api │ │ │ ├── default.nix │ │ │ ├── rake-tasks.nix │ │ │ └── scheduler.nix │ │ ├── console-router.nix │ │ ├── database.nix │ │ ├── download-mounter.nix │ │ ├── frontend.nix │ │ ├── haproxy.nix │ │ ├── main.nix │ │ ├── nodectld │ │ │ ├── nixos.nix │ │ │ ├── options.nix │ │ │ └── vpsadminos.nix │ │ ├── rabbitmq.nix │ │ ├── redis.nix │ │ ├── supervisor.nix │ │ ├── varnish.nix │ │ ├── wait-online.nix │ │ └── webui.nix │ └── vpsadminos-modules.nix └── overlays │ └── default.nix ├── nodectl ├── .gitignore ├── .rubocop.yml ├── CHANGELOG ├── Gemfile ├── LICENSE ├── Rakefile ├── bin │ └── nodectl ├── lib │ ├── nodectl.rb │ └── nodectl │ │ ├── cli.rb │ │ ├── client.rb │ │ ├── command.rb │ │ ├── command │ │ ├── base.rb │ │ ├── local.rb │ │ └── remote.rb │ │ ├── command_templates │ │ └── resource_control.rb │ │ ├── commands │ │ ├── chain.rb │ │ ├── flush.rb │ │ ├── get.rb │ │ ├── halt_reason.rb │ │ ├── incident_report.rb │ │ ├── init.rb │ │ ├── kill.rb │ │ ├── pause.rb │ │ ├── ping.rb │ │ ├── pry.rb │ │ ├── queue.rb │ │ ├── refresh.rb │ │ ├── reinit.rb │ │ ├── reload.rb │ │ ├── restart.rb │ │ ├── resume.rb │ │ ├── script.rb │ │ ├── set.rb │ │ ├── status.rb │ │ ├── stop.rb │ │ └── update.rb │ │ ├── exceptions.rb │ │ ├── utils.rb │ │ └── version.rb ├── man │ └── man8 │ │ └── nodectl.8.md ├── nodectl.gemspec └── shell.nix ├── nodectld ├── .gitignore ├── .rubocop.yml ├── Gemfile ├── LICENSE ├── Rakefile ├── bin │ └── nodectld ├── lib │ └── nodectld │ │ └── cli.rb ├── nodectld.gemspec └── shell.nix ├── packages ├── api │ ├── Gemfile │ ├── Gemfile.lock │ ├── api.nix │ ├── common.nix │ ├── gemset.nix │ └── supervisor.nix ├── console-router │ ├── Gemfile │ ├── Gemfile.lock │ ├── default.nix │ └── gemset.nix ├── cronie │ └── default.nix ├── download-mounter │ ├── Gemfile │ ├── Gemfile.lock │ ├── default.nix │ └── gemset.nix ├── libnodectld │ ├── Gemfile │ ├── Gemfile.lock │ ├── default.nix │ └── gemset.nix ├── nodectl │ ├── Gemfile │ ├── Gemfile.lock │ ├── default.nix │ └── gemset.nix ├── nodectld │ ├── Gemfile │ ├── Gemfile.lock │ ├── default.nix │ └── gemset.nix ├── source │ └── default.nix └── webui │ └── default.nix ├── plugins ├── .gitignore ├── monitoring │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ │ ├── db │ │ │ └── migrate │ │ │ │ ├── 20170408184500_setup.rb │ │ │ │ ├── 20230123085900_add_monitored_event_action_state.rb │ │ │ │ └── 20231105124400_add_monitored_event_alert_count.rb │ │ ├── init.rb │ │ ├── lib │ │ │ └── vpsadmin │ │ │ │ └── api │ │ │ │ └── plugins │ │ │ │ ├── monitoring.rb │ │ │ │ └── monitoring │ │ │ │ └── monitor.rb │ │ ├── models │ │ │ ├── monitored_event.rb │ │ │ ├── monitored_event_log.rb │ │ │ ├── monitored_event_state.rb │ │ │ └── transaction_chains │ │ │ │ └── monitoring │ │ │ │ └── alert.rb │ │ ├── resources │ │ │ └── monitored_event.rb │ │ └── tasks │ │ │ └── monitoring.rake │ └── meta.rb ├── newslog │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ │ ├── db │ │ │ └── migrate │ │ │ │ └── 20170201082030_setup.rb │ │ ├── models │ │ │ └── news_log.rb │ │ └── resources │ │ │ └── news_log.rb │ └── meta.rb ├── outage_reports │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ │ ├── db │ │ │ └── migrate │ │ │ │ ├── 20170223191015_setup.rb │ │ │ │ ├── 20201129113300_add_outage_exports.rb │ │ │ │ ├── 20240123092400_remove_vps_outage_mounts.rb │ │ │ │ ├── 20240124093200_add_impact_type.rb │ │ │ │ └── 20240124185400_add_auto_resolve.rb │ │ ├── init.rb │ │ ├── lib │ │ │ └── vpsadmin │ │ │ │ └── api │ │ │ │ └── plugins │ │ │ │ └── outage_reports │ │ │ │ └── metrics.rb │ │ ├── models │ │ │ ├── outage.rb │ │ │ ├── outage_entity.rb │ │ │ ├── outage_export.rb │ │ │ ├── outage_handler.rb │ │ │ ├── outage_translation.rb │ │ │ ├── outage_update.rb │ │ │ ├── outage_user.rb │ │ │ ├── outage_vps.rb │ │ │ └── transaction_chains │ │ │ │ └── outage_reports │ │ │ │ └── update.rb │ │ ├── resources │ │ │ ├── export_outage.rb │ │ │ ├── outage.rb │ │ │ ├── outage_update.rb │ │ │ ├── user_outage.rb │ │ │ └── vps_outage.rb │ │ └── tasks │ │ │ └── outage_reports.rake │ ├── mail_templates │ │ ├── outage_report_generic_announce │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ ├── outage_report_generic_update │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ ├── outage_report_user_announce │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ └── outage_report_user_update │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ ├── meta.rb │ └── utils │ │ ├── Gemfile │ │ └── import_outage_list.rb ├── payments │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ │ ├── Gemfile │ │ ├── db │ │ │ └── migrate │ │ │ │ └── 20170121214350_setup.rb │ │ ├── init.rb │ │ ├── lib │ │ │ └── vpsadmin │ │ │ │ └── api │ │ │ │ └── plugins │ │ │ │ ├── payments.rb │ │ │ │ └── payments │ │ │ │ ├── backends │ │ │ │ ├── base.rb │ │ │ │ └── fio.rb │ │ │ │ └── metrics.rb │ │ ├── models │ │ │ ├── incoming_payment.rb │ │ │ ├── transaction_chains │ │ │ │ └── payments │ │ │ │ │ ├── create.rb │ │ │ │ │ └── mail_overview.rb │ │ │ ├── user_account.rb │ │ │ └── user_payment.rb │ │ ├── resources │ │ │ ├── incoming_payment.rb │ │ │ ├── override.rb │ │ │ ├── payment_stats.rb │ │ │ ├── user_account.rb │ │ │ └── user_payment.rb │ │ └── tasks │ │ │ └── payments.rake │ └── meta.rb ├── requests │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ │ ├── db │ │ │ └── migrate │ │ │ │ ├── 20170122083340_setup.rb │ │ │ │ ├── 20170908165000_add_access_token.rb │ │ │ │ └── 20201126142500_add_ip_mail_checks.rb │ │ ├── init.rb │ │ ├── lib │ │ │ └── vpsadmin │ │ │ │ └── plugins │ │ │ │ └── requests │ │ │ │ └── ipqs.rb │ │ ├── models │ │ │ ├── change_request.rb │ │ │ ├── registration_request.rb │ │ │ ├── transaction_chains │ │ │ │ └── requests │ │ │ │ │ ├── create.rb │ │ │ │ │ ├── resolve.rb │ │ │ │ │ ├── update.rb │ │ │ │ │ └── utils.rb │ │ │ └── user_request.rb │ │ ├── resources │ │ │ ├── base.rb │ │ │ ├── change.rb │ │ │ ├── override.rb │ │ │ ├── registration.rb │ │ │ └── user_request.rb │ │ └── tasks │ │ │ └── requests.rake │ ├── mail_templates │ │ ├── request_create_admin │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ ├── request_create_user │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ ├── request_resolve_admin │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ │ └── request_resolve_user │ │ │ ├── en.plain.erb │ │ │ └── meta.rb │ └── meta.rb └── webui │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── api │ ├── db │ │ └── migrate │ │ │ └── 20170201093720_setup.rb │ ├── models │ │ ├── help_box.rb │ │ └── transaction_chains │ │ │ └── mail │ │ │ └── daily_report.rb │ └── resources │ │ └── help_box.rb │ └── meta.rb ├── shell.nix ├── tasks └── release.rb ├── tools ├── bundix_all.sh ├── bundix_api.sh ├── bundix_console_router.sh ├── bundix_download_mounter.sh ├── rabbitmqcfg.rb └── update_gem.sh └── webui ├── .gitignore ├── CHANGELOG ├── Gemfile ├── LICENSE ├── README ├── Rakefile ├── composer-env.nix ├── composer.json ├── composer.lock ├── config.js.php ├── config_cfg.php ├── default.nix ├── forms ├── backup.forms.php ├── cluster.forms.php ├── dataset.forms.php ├── dns.forms.php ├── export.forms.php ├── incidents.forms.php ├── lifetimes.forms.php ├── monitoring.forms.php ├── networking.forms.php ├── node.forms.php ├── object_history.forms.php ├── oom_reports.forms.php ├── outage.forms.php ├── userdata.forms.php ├── userns.forms.php ├── users.forms.php └── vps.forms.php ├── index.php ├── js ├── dataset.js ├── export.js ├── goresheat.js ├── haveapi-client.js ├── jquery-1.11.3.min.js ├── jquery.longclick.js ├── jquery.tablednd.js ├── keepalive.js ├── mootools.js ├── network-monitor.js ├── session-countdown.js ├── transaction-chains.js └── vps.js ├── keepalive.php ├── lang ├── locale-data │ ├── ._vpsadmin-sk.po │ ├── ._vpsadmin.po │ └── vpsadmin.po ├── locale │ ├── en │ │ └── vpsadmin.mo │ ├── en_US.utf8 │ │ └── LC_MESSAGES │ │ │ └── vpsAdmin.mo │ └── sk_SK.utf8 │ │ └── LC_MESSAGES │ │ ├── ._vpsAdmin.po │ │ ├── vpsAdmin.mo │ │ └── vpsAdmin.po └── scripts │ ├── locales-generate │ ├── locales-stats │ ├── locales-update │ └── new-lang ├── lib ├── cluster.lib.php ├── functions.lib.php ├── gettext_inc.lib.php ├── gettext_lang.lib.php ├── gettext_stream.lib.php ├── helpbox.lib.php ├── lang.lib.php ├── login.lib.php ├── mail.lib.php ├── munin.lib.php ├── pagination.lib.php ├── security.lib.php ├── transact.lib.php ├── version.lib.php ├── vps.lib.php └── xtemplate.lib.php ├── pages ├── page_about.php ├── page_adminm.php ├── page_adminvps.php ├── page_backup.php ├── page_cluster.php ├── page_console.php ├── page_dataset.php ├── page_dns.php ├── page_export.php ├── page_history.php ├── page_incidents.php ├── page_index.php ├── page_jumpto.php ├── page_lifetimes.php ├── page_log.php ├── page_login.php ├── page_monitoring.php ├── page_nas.php ├── page_networking.php ├── page_node.php ├── page_oom_reports.php ├── page_outage.php ├── page_redirect.php ├── page_reminder.php ├── page_transactions.php ├── page_userdata.php └── page_userns.php ├── php-packages.nix ├── shell.nix ├── spec └── user_payset_spec.rb └── template ├── ._ajax_get_transactbox.html ├── css ├── ._main.css ├── ._scheme.css ├── main-msie.css ├── main.css ├── print.css └── scheme.css ├── design ├── arrow.gif ├── aside.gif ├── nav.gif ├── section.gif └── ul-style01.gif ├── favicon.png ├── icons ├── backup_progress.png ├── bug.png ├── console.png ├── copy_template.png ├── delete.png ├── delete_grey.png ├── draw-arrow-forward.png ├── edit.png ├── error.png ├── firewall.png ├── firewall_approve.png ├── firewall_approve_old.png ├── firewall_flush.png ├── firewall_reload.png ├── heatmap.png ├── info.png ├── langs │ ├── ad.png │ ├── ae.png │ ├── af.png │ ├── ag.png │ ├── ai.png │ ├── al.png │ ├── am.png │ ├── an.png │ ├── ao.png │ ├── ar.png │ ├── as.png │ ├── at.png │ ├── au.png │ ├── aw.png │ ├── ax.png │ ├── az.png │ ├── ba.png │ ├── bb.png │ ├── bd.png │ ├── be.png │ ├── bf.png │ ├── bg.png │ ├── bh.png │ ├── bi.png │ ├── bj.png │ ├── bm.png │ ├── bn.png │ ├── bo.png │ ├── br.png │ ├── bs.png │ ├── bt.png │ ├── bv.png │ ├── bw.png │ ├── by.png │ ├── bz.png │ ├── ca.png │ ├── catalonia.png │ ├── cc.png │ ├── cd.png │ ├── cf.png │ ├── cg.png │ ├── ch.png │ ├── ci.png │ ├── ck.png │ ├── cl.png │ ├── cm.png │ ├── cn.png │ ├── co.png │ ├── cr.png │ ├── cs.png │ ├── cu.png │ ├── cv.png │ ├── cx.png │ ├── cy.png │ ├── cz.png │ ├── de.png │ ├── dj.png │ ├── dk.png │ ├── dm.png │ ├── do.png │ ├── dz.png │ ├── ec.png │ ├── ee.png │ ├── eg.png │ ├── eh.png │ ├── england.png │ ├── er.png │ ├── es.png │ ├── et.png │ ├── europeanunion.png │ ├── fam.png │ ├── fi.png │ ├── fj.png │ ├── fk.png │ ├── fm.png │ ├── fo.png │ ├── fr.png │ ├── ga.png │ ├── gb.png │ ├── gd.png │ ├── ge.png │ ├── gf.png │ ├── gh.png │ ├── gi.png │ ├── gl.png │ ├── gm.png │ ├── gn.png │ ├── gp.png │ ├── gq.png │ ├── gr.png │ ├── gs.png │ ├── gt.png │ ├── gu.png │ ├── gw.png │ ├── gy.png │ ├── hk.png │ ├── hm.png │ ├── hn.png │ ├── hr.png │ ├── ht.png │ ├── hu.png │ ├── id.png │ ├── ie.png │ ├── il.png │ ├── in.png │ ├── io.png │ ├── iq.png │ ├── ir.png │ ├── is.png │ ├── it.png │ ├── jm.png │ ├── jo.png │ ├── jp.png │ ├── ke.png │ ├── kg.png │ ├── kh.png │ ├── ki.png │ ├── km.png │ ├── kn.png │ ├── kp.png │ ├── kr.png │ ├── kw.png │ ├── ky.png │ ├── kz.png │ ├── la.png │ ├── lb.png │ ├── lc.png │ ├── li.png │ ├── lk.png │ ├── lr.png │ ├── ls.png │ ├── lt.png │ ├── lu.png │ ├── lv.png │ ├── ly.png │ ├── ma.png │ ├── mc.png │ ├── md.png │ ├── me.png │ ├── mg.png │ ├── mh.png │ ├── mk.png │ ├── ml.png │ ├── mm.png │ ├── mn.png │ ├── mo.png │ ├── mp.png │ ├── mq.png │ ├── mr.png │ ├── ms.png │ ├── mt.png │ ├── mu.png │ ├── mv.png │ ├── mw.png │ ├── mx.png │ ├── my.png │ ├── mz.png │ ├── na.png │ ├── nc.png │ ├── ne.png │ ├── nf.png │ ├── ng.png │ ├── ni.png │ ├── nl.png │ ├── no.png │ ├── np.png │ ├── nr.png │ ├── nu.png │ ├── nz.png │ ├── om.png │ ├── pa.png │ ├── pe.png │ ├── pf.png │ ├── pg.png │ ├── ph.png │ ├── pk.png │ ├── pl.png │ ├── pm.png │ ├── pn.png │ ├── pr.png │ ├── ps.png │ ├── pt.png │ ├── pw.png │ ├── py.png │ ├── qa.png │ ├── re.png │ ├── ro.png │ ├── rs.png │ ├── ru.png │ ├── rw.png │ ├── sa.png │ ├── sb.png │ ├── sc.png │ ├── scotland.png │ ├── sd.png │ ├── se.png │ ├── sg.png │ ├── sh.png │ ├── si.png │ ├── sj.png │ ├── sk.png │ ├── sl.png │ ├── sm.png │ ├── sn.png │ ├── so.png │ ├── sr.png │ ├── st.png │ ├── sv.png │ ├── sy.png │ ├── sz.png │ ├── tc.png │ ├── td.png │ ├── tf.png │ ├── tg.png │ ├── th.png │ ├── tj.png │ ├── tk.png │ ├── tl.png │ ├── tm.png │ ├── tn.png │ ├── to.png │ ├── tr.png │ ├── tt.png │ ├── tv.png │ ├── tw.png │ ├── tz.png │ ├── ua.png │ ├── ug.png │ ├── um.png │ ├── us.png │ ├── uy.png │ ├── uz.png │ ├── va.png │ ├── vc.png │ ├── ve.png │ ├── vg.png │ ├── vi.png │ ├── vn.png │ ├── vu.png │ ├── wales.png │ ├── wf.png │ ├── ws.png │ ├── ye.png │ ├── yt.png │ ├── za.png │ ├── zm.png │ └── zw.png ├── logout.png ├── m_add.png ├── m_delete.png ├── m_dropadmin.png ├── m_edit.png ├── m_remove.png ├── m_switch.png ├── maintenance_mode.png ├── server_daemon_offline.png ├── server_online.png ├── server_warning.png ├── tool.png ├── transact_fail.png ├── transact_ok.png ├── transact_pending.gif ├── vps_add.png ├── vps_delete.png ├── vps_delete_grey.png ├── vps_edit.png ├── vps_ip_list.png ├── vps_migrate.png ├── vps_restart.png ├── vps_restart_grey.png ├── vps_start.png ├── vps_stop.png ├── vpsadminos.png └── warning.png ├── index.html ├── template.html ├── tmp └── image.gif └── vpsAdmin-logo.png /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | .gems 3 | .idea 4 | .php-cs-fixer.cache 5 | .vscode 6 | Gemfile.lock 7 | TODO 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "webui/vendor/haveapi-client-php"] 2 | path = webui/vendor/haveapi-client-php 3 | url = git@git.vpsfree.cz:haveapi-client-php 4 | -------------------------------------------------------------------------------- /.overcommit.yml: -------------------------------------------------------------------------------- 1 | PreCommit: 2 | RuboCop: 3 | enabled: true 4 | PhpCsFixer: 5 | enabled: true 6 | command: 'php-cs-fixer' 7 | CommitMsg: 8 | CapitalizedSubject: 9 | enabled: false 10 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | in(__DIR__) 5 | ; 6 | 7 | return (new PhpCsFixer\Config()) 8 | ->setRules([ 9 | '@PER-CS' => true, 10 | '@PHP82Migration' => true, 11 | ]) 12 | ->setFinder($finder) 13 | ; 14 | -------------------------------------------------------------------------------- /.rubocop_todo.yml: -------------------------------------------------------------------------------- 1 | Layout/LineLength: 2 | Enabled: false 3 | 4 | Lint/UnusedMethodArgument: 5 | Enabled: false 6 | 7 | Style/ClassVars: 8 | Enabled: false 9 | Style/MapIntoArray: 10 | Enabled: false 11 | Style/OptionalBooleanParameter: 12 | Enabled: false 13 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.3.0 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development do 4 | gem 'geminabox' 5 | gem 'overcommit' 6 | gem 'rake' 7 | gem 'rubocop', '~> 1.75.0' 8 | gem 'rubocop-rake' 9 | # TODO: remove when geminabox is fixed, see https://github.com/geminabox/geminabox/pull/572 10 | gem 'rubygems-generate_index' 11 | end 12 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require_relative 'tasks/release' 2 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 4.1.0 2 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | config/database.* 24 | -------------------------------------------------------------------------------- /api/bin/vpsadmin-scheduler: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../lib/vpsadmin' 3 | 4 | $stdout.sync = true 5 | $stderr.sync = true 6 | 7 | VpsAdmin::Scheduler::Daemon.run 8 | -------------------------------------------------------------------------------- /api/bin/vpsadmin-supervisor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../lib/vpsadmin' 3 | 4 | VpsAdmin::Supervisor::Cli.run 5 | -------------------------------------------------------------------------------- /api/config.ru: -------------------------------------------------------------------------------- 1 | require 'bundler/setup' 2 | require_relative 'lib/vpsadmin' 3 | 4 | run VpsAdmin::API.default.app 5 | -------------------------------------------------------------------------------- /api/config/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/api/config/.keep -------------------------------------------------------------------------------- /api/config/dataset_plans.rb: -------------------------------------------------------------------------------- 1 | VpsAdmin::API::DatasetPlans.register do 2 | plan :daily_backup, label: 'Daily backup', 3 | desc: 'Snapshot every day at 01:00 and backup on backuper.prg' do |dip| 4 | group_snapshot dip, '00', '01', '*', '*', '*' 5 | backup dip, '05', '01', '*', '*', '*' 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20141212180955_transaction_rollback.rb: -------------------------------------------------------------------------------- 1 | class TransactionRollback < ActiveRecord::Migration 2 | def change 3 | add_column :transaction_chains, :urgent_rollback, :integer, null: false, default: false 4 | add_column :transactions, :reversible, :integer, null: false, default: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20150205145349_user_owns_ip_addresses.rb: -------------------------------------------------------------------------------- 1 | class UserOwnsIpAddresses < ActiveRecord::Migration 2 | def change 3 | add_column :vps_ip, :user_id, :integer, null: true 4 | add_column :environments, :user_ip_ownership, :boolean, null: false 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20150312171845_cluster_resources_admin_override.rb: -------------------------------------------------------------------------------- 1 | class ClusterResourcesAdminOverride < ActiveRecord::Migration 2 | def change 3 | add_column :cluster_resource_uses, :admin_lock_type, :integer, null: false, default: 0 4 | add_column :cluster_resource_uses, :admin_limit, :integer, null: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20150625145437_user_environment_config_add_default.rb: -------------------------------------------------------------------------------- 1 | class UserEnvironmentConfigAddDefault < ActiveRecord::Migration 2 | def change 3 | add_column :environment_user_configs, :default, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20150715150147_remove_old_vps_backups.rb: -------------------------------------------------------------------------------- 1 | class RemoveOldVpsBackups < ActiveRecord::Migration 2 | def up 3 | drop_table :vps_backups 4 | end 5 | 6 | def down 7 | raise ActiveRecord::IrreversibleMigration 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20150730152316_add_api_tokens_created_at.rb: -------------------------------------------------------------------------------- 1 | class AddApiTokensCreatedAt < ActiveRecord::Migration 2 | def change 3 | add_column :api_tokens, :created_at, :datetime, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20150801090150_admin_user_session.rb: -------------------------------------------------------------------------------- 1 | class AdminUserSession < ActiveRecord::Migration 2 | def change 3 | add_column :user_sessions, :admin_id, :integer, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20150801211753_make_transactions_done_enum.rb: -------------------------------------------------------------------------------- 1 | class MakeTransactionsDoneEnum < ActiveRecord::Migration 2 | def up 3 | change_column :transactions, :t_done, :integer, null: false, default: 0 4 | end 5 | 6 | def down 7 | change_column :transactions, :t_done, :boolean, null: false 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20150802162711_add_transaction_queues.rb: -------------------------------------------------------------------------------- 1 | class AddTransactionQueues < ActiveRecord::Migration 2 | def change 3 | add_column :transactions, :queue, :string, limit: 30, null: false, 4 | default: 'general' 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20150804201125_mail_recipient_voluntary_to.rb: -------------------------------------------------------------------------------- 1 | class MailRecipientVoluntaryTo < ActiveRecord::Migration 2 | def change 3 | change_column_null :mail_recipients, :to, true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20150820174810_datasets_confirmed_integer.rb: -------------------------------------------------------------------------------- 1 | class DatasetsConfirmedInteger < ActiveRecord::Migration 2 | def up 3 | change_column :datasets, :confirmed, :integer, null: false, default: 0 4 | end 5 | 6 | def down 7 | change_column :datasets, :confirmed, :boolean, null: false, default: false 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20150904152438_add_snapshot_download_size.rb: -------------------------------------------------------------------------------- 1 | class AddSnapshotDownloadSize < ActiveRecord::Migration 2 | def change 3 | add_column :snapshot_downloads, :size, :integer, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20151002090440_add_mount_on_start_fail.rb: -------------------------------------------------------------------------------- 1 | class AddMountOnStartFail < ActiveRecord::Migration 2 | def change 3 | add_column :mounts, :on_start_fail, :integer, null: false, default: 1 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20151004115901_add_mount_toggle.rb: -------------------------------------------------------------------------------- 1 | class AddMountToggle < ActiveRecord::Migration 2 | def change 3 | add_column :mounts, :enabled, :boolean, null: false, default: true 4 | add_column :mounts, :master_enabled, :boolean, null: false, default: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20151015085656_mount_state_tracking.rb: -------------------------------------------------------------------------------- 1 | class MountStateTracking < ActiveRecord::Migration 2 | def change 3 | add_column :mounts, :current_state, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20151029160857_add_dns_resolver_ip_version.rb: -------------------------------------------------------------------------------- 1 | class AddDnsResolverIpVersion < ActiveRecord::Migration 2 | def change 3 | add_column :cfg_dns, :ip_version, :integer, null: true, default: 4 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20151124085214_add_transaction_indexes.rb: -------------------------------------------------------------------------------- 1 | class AddTransactionIndexes < ActiveRecord::Migration 2 | def change 3 | add_index :transactions, :t_done 4 | add_index :transaction_chains, :state 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20151213173722_add_more_indexes.rb: -------------------------------------------------------------------------------- 1 | class AddMoreIndexes < ActiveRecord::Migration 2 | def change 3 | add_index :transactions, :t_success 4 | add_index :dataset_properties, :pool_id 5 | add_index :dataset_properties, :dataset_in_pool_id 6 | add_index :dataset_properties, %i[dataset_in_pool_id name] 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/db/migrate/20160109160611_remove_user_playground_enabled.rb: -------------------------------------------------------------------------------- 1 | class RemoveUserPlaygroundEnabled < ActiveRecord::Migration 2 | def change 3 | remove_column :members, :m_playground_enable, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20160120075845_unmanage_vps_hostname.rb: -------------------------------------------------------------------------------- 1 | class UnmanageVpsHostname < ActiveRecord::Migration 2 | def change 3 | add_column :vps, :manage_hostname, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20160203074500_add_polymorphic_resource_lock.rb: -------------------------------------------------------------------------------- 1 | class AddPolymorphicResourceLock < ActiveRecord::Migration 2 | def change 3 | add_reference :resource_locks, :locked_by, null: true, polymorphic: true, index: true 4 | remove_column :resource_locks, :transaction_chain_id, :integer, null: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20160214135014_add_status_indexes.rb: -------------------------------------------------------------------------------- 1 | class AddStatusIndexes < ActiveRecord::Migration 2 | def change 3 | add_index :vps_statuses, :vps_id 4 | add_index :node_statuses, :node_id 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20160214135501_add_vps_migration_cleanup_data.rb: -------------------------------------------------------------------------------- 1 | class AddVpsMigrationCleanupData < ActiveRecord::Migration 2 | def change 3 | add_column :vps_migrations, :cleanup_data, :boolean, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20160308154537_add_snapshot_download_sha256sum.rb: -------------------------------------------------------------------------------- 1 | class AddSnapshotDownloadSha256sum < ActiveRecord::Migration 2 | def change 3 | add_column :snapshot_downloads, :sha256sum, :string, limit: 64, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20160628064205_add_vps_ip_ordering.rb: -------------------------------------------------------------------------------- 1 | class AddVpsIpOrdering < ActiveRecord::Migration 2 | def change 3 | add_column :vps_ip, :order, :integer, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20160805144125_add_pool_maintenance_mode.rb: -------------------------------------------------------------------------------- 1 | class AddPoolMaintenanceMode < ActiveRecord::Migration 2 | def change 3 | add_column :pools, :maintenance_lock, :integer, null: false, default: 0 4 | add_column :pools, :maintenance_lock_reason, :string, null: true, limit: 255 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20160819084000_move_locations_to_environment.rb: -------------------------------------------------------------------------------- 1 | class MoveLocationsToEnvironment < ActiveRecord::Migration 2 | def change 3 | add_column :locations, :environment_id, :integer, null: false 4 | remove_column :servers, :environment_id, :integer, null: false 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20160826150804_set_group_snapshots_unique.rb: -------------------------------------------------------------------------------- 1 | class SetGroupSnapshotsUnique < ActiveRecord::Migration 2 | def change 3 | add_index :group_snapshots, %i[dataset_action_id dataset_in_pool_id], unique: true, 4 | name: :group_snapshots_unique 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20170115104106_refactor_vps_configs.rb: -------------------------------------------------------------------------------- 1 | class RefactorVpsConfigs < ActiveRecord::Migration 2 | def change 3 | rename_table :config, :vps_configs 4 | rename_table :vps_has_config, :vps_has_configs 5 | rename_column :vps_has_configs, :config_id, :vps_config_id 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20170117181427_refactor_ip_addresses.rb: -------------------------------------------------------------------------------- 1 | class RefactorIpAddresses < ActiveRecord::Migration 2 | def change 3 | rename_table :vps_ip, :ip_addresses 4 | rename_column :ip_addresses, :ip_id, :id 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20170118160101_register_node_pubkeys.rb: -------------------------------------------------------------------------------- 1 | class RegisterNodePubkeys < ActiveRecord::Migration 2 | def change 3 | rename_table :node_pubkey, :node_pubkeys 4 | rename_column :node_pubkeys, :type, :key_type 5 | add_index :node_pubkeys, :node_id 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20170130112048_forget_user_passwords.rb: -------------------------------------------------------------------------------- 1 | class ForgetUserPasswords < ActiveRecord::Migration 2 | def up 3 | ActiveRecord::Base.connection.execute( 4 | "UPDATE users SET password = '!' WHERE object_state = 3" 5 | ) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20170130154206_remove_user_payments.rb: -------------------------------------------------------------------------------- 1 | class RemoveUserPayments < ActiveRecord::Migration 2 | def change 3 | remove_column :users, :monthly_payment, :integer, null: false, 4 | default: 300, unsigned: true 5 | remove_column :users, :paid_until, :datetime, null: true 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20170203122106_add_snapshot_labels.rb: -------------------------------------------------------------------------------- 1 | class AddSnapshotLabels < ActiveRecord::Migration 2 | def change 3 | add_column :snapshots, :label, :string, null: true, limit: 255 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20170325151018_add_mail_templates_public.rb: -------------------------------------------------------------------------------- 1 | class AddMailTemplatesPublic < ActiveRecord::Migration 2 | def change 3 | add_column :mail_templates, :user_visibility, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20170610084155_add_cpu_limits.rb: -------------------------------------------------------------------------------- 1 | class AddCpuLimits < ActiveRecord::Migration 2 | def change 3 | add_column :vpses, :cpu_limit, :integer, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20180416111102_add_networks_autopick.rb: -------------------------------------------------------------------------------- 1 | class AddNetworksAutopick < ActiveRecord::Migration 2 | def change 3 | add_column :networks, :autopick, :integer, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20180501071844_add_vps_veth_mac.rb: -------------------------------------------------------------------------------- 1 | class AddVpsVethMac < ActiveRecord::Migration 2 | def change 3 | add_column :vpses, :veth_mac, :string, limit: 17, null: true 4 | add_index :vpses, :veth_mac, unique: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20180518104840_add_userns_timestamps.rb: -------------------------------------------------------------------------------- 1 | class AddUsernsTimestamps < ActiveRecord::Migration 2 | def change 3 | add_timestamps(:user_namespaces, null: true) 4 | add_timestamps(:user_namespace_maps, null: true) 5 | add_timestamps(:user_namespace_map_entries, null: true) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20180518140011_make_ip_address_size_decimal.rb: -------------------------------------------------------------------------------- 1 | class MakeIpAddressSizeDecimal < ActiveRecord::Migration 2 | def up 3 | change_column :ip_addresses, :size, :decimal, precision: 40, scale: 0, null: false 4 | end 5 | 6 | def down 7 | change_column :ip_addresses, :size, 'bigint unsigned ', null: false 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20181119183704_add_ip_addresses_route_via.rb: -------------------------------------------------------------------------------- 1 | class AddIpAddressesRouteVia < ActiveRecord::Migration 2 | def change 3 | add_column :ip_addresses, :route_via_id, :integer, null: true 4 | add_index :ip_addresses, :route_via_id 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20181121153314_add_auto_add_host_ip_addresses.rb: -------------------------------------------------------------------------------- 1 | class AddAutoAddHostIpAddresses < ActiveRecord::Migration 2 | def change 3 | add_column :host_ip_addresses, :auto_add, :boolean, null: false, default: true 4 | add_index :host_ip_addresses, :auto_add 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20190501185918_add_user_password_reset.rb: -------------------------------------------------------------------------------- 1 | class AddUserPasswordReset < ActiveRecord::Migration 2 | def change 3 | add_column :users, :password_reset, :bool, null: false, default: false 4 | add_column :users, :lockout, :bool, null: false, default: false 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20190503142157_remove_old_api_tokens.rb: -------------------------------------------------------------------------------- 1 | class RemoveOldApiTokens < ActiveRecord::Migration 2 | def up 3 | ActiveRecord::Base.connection.execute(' 4 | DELETE api_tokens 5 | FROM api_tokens 6 | INNER JOIN users ON users.id = api_tokens.user_id 7 | WHERE users.object_state > 1 8 | ') 9 | end 10 | 11 | def down; end 12 | end 13 | -------------------------------------------------------------------------------- /api/db/migrate/20190513064011_rename_user_session_agents_to_user_agents.rb: -------------------------------------------------------------------------------- 1 | class RenameUserSessionAgentsToUserAgents < ActiveRecord::Migration 2 | def change 3 | rename_table :user_session_agents, :user_agents 4 | rename_index :user_agents, :user_session_agents_hash, :user_agents_hash 5 | rename_column :user_sessions, :user_session_agent_id, :user_agent_id 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20191021125132_add_network_purpose.rb: -------------------------------------------------------------------------------- 1 | class AddNetworkPurpose < ActiveRecord::Migration 2 | def change 3 | add_column :networks, :purpose, :integer, null: false, default: 0 4 | add_index :networks, :purpose 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20200307143441_add_pool_migration_pubkeys.rb: -------------------------------------------------------------------------------- 1 | class AddPoolMigrationPubkeys < ActiveRecord::Migration 2 | def change 3 | add_column :pools, :migration_public_key, :text, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20200308161901_add_environment_location_description.rb: -------------------------------------------------------------------------------- 1 | class AddEnvironmentLocationDescription < ActiveRecord::Migration 2 | def change 3 | add_column :environments, :description, :text, null: true 4 | add_column :locations, :description, :text, null: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20200309160016_rename_vps_outage_to_maintenance_windows.rb: -------------------------------------------------------------------------------- 1 | class RenameVpsOutageToMaintenanceWindows < ActiveRecord::Migration 2 | def change 3 | rename_table :vps_outage_windows, :vps_maintenance_windows 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20200803134524_add_node_active.rb: -------------------------------------------------------------------------------- 1 | class AddNodeActive < ActiveRecord::Migration 2 | def change 3 | add_column :nodes, :active, :boolean, null: false, default: true 4 | add_index :nodes, :active 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20200924180219_add_transaction_signing.rb: -------------------------------------------------------------------------------- 1 | class AddTransactionSigning < ActiveRecord::Migration 2 | def change 3 | add_column :transactions, :signature, :text, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20210215160434_add_vps_rescue_mode.rb: -------------------------------------------------------------------------------- 1 | class AddVpsRescueMode < ActiveRecord::Migration 2 | def change 3 | add_column :vps_current_statuses, :in_rescue_mode, :bool, default: false 4 | add_column :vps_statuses, :in_rescue_mode, :bool, default: false 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20210529125923_add_oom_report_no_killable.rb: -------------------------------------------------------------------------------- 1 | class AddOomReportNoKillable < ActiveRecord::Migration 2 | def change 3 | change_column_null :oom_reports, :killed_pid, true 4 | change_column_null :oom_reports, :killed_name, true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20220123194603_add_vps_start_menu.rb: -------------------------------------------------------------------------------- 1 | class AddVpsStartMenu < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :vpses, :start_menu_timeout, :integer, default: 5 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20220202111859_add_lifetimes_remind_after_date.rb: -------------------------------------------------------------------------------- 1 | class AddLifetimesRemindAfterDate < ActiveRecord::Migration[6.1] 2 | def change 3 | tables = %i[ 4 | object_states datasets exports mounts snapshot_downloads users vpses 5 | ] 6 | 7 | tables.each do |t| 8 | add_column t, :remind_after_date, :datetime, null: true 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /api/db/migrate/20220504184116_add_indexes_chains_oom_reports.rb: -------------------------------------------------------------------------------- 1 | class AddIndexesChainsOomReports < ActiveRecord::Migration[6.1] 2 | def change 3 | add_index :transaction_chains, :created_at 4 | add_index :transaction_chains, %i[type state] 5 | add_index :oom_reports, :reported_at 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20220820133941_add_network_interface_shaper.rb: -------------------------------------------------------------------------------- 1 | class AddNetworkInterfaceShaper < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :network_interfaces, :max_tx, 'bigint unsigned', null: false, default: 0 4 | add_column :network_interfaces, :max_rx, 'bigint unsigned', null: false, default: 0 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20220831193118_add_transaction_chain_concerns_indexes.rb: -------------------------------------------------------------------------------- 1 | class AddTransactionChainConcernsIndexes < ActiveRecord::Migration[6.1] 2 | def change 3 | add_index :transaction_chain_concerns, :class_name 4 | add_index :transaction_chain_concerns, :row_id 5 | add_index :transaction_chain_concerns, %i[class_name row_id] 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20220908161330_add_vps_autostart_priority.rb: -------------------------------------------------------------------------------- 1 | class AddVpsAutostartPriority < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :vpses, :autostart_priority, :integer, null: false, default: 1000 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20220912070451_add_pool_max_datasets.rb: -------------------------------------------------------------------------------- 1 | class AddPoolMaxDatasets < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :pools, :max_datasets, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20220920120951_add_pool_scan_percent.rb: -------------------------------------------------------------------------------- 1 | class AddPoolScanPercent < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :pools, :scan_percent, :float, null: true 4 | add_column :node_current_statuses, :pool_scan_percent, :float, null: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20230213083054_remove_vps_configs.rb: -------------------------------------------------------------------------------- 1 | class RemoveVpsConfigs < ActiveRecord::Migration[6.1] 2 | def up 3 | drop_table :environment_config_chains 4 | drop_table :vps_has_configs 5 | drop_table :vps_configs 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20230213092308_remove_ip_traffics.rb: -------------------------------------------------------------------------------- 1 | class RemoveIpTraffics < ActiveRecord::Migration[6.1] 2 | def change 3 | drop_table :ip_recent_traffics 4 | drop_table :ip_traffic_live_monitors 5 | drop_table :ip_traffics 6 | # drop_table :ip_traffic_monthly_summaries # TODO: remove in the future 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/db/migrate/20230214074616_remove_integrity_checks.rb: -------------------------------------------------------------------------------- 1 | class RemoveIntegrityChecks < ActiveRecord::Migration[6.1] 2 | def change 3 | drop_table :integrity_facts 4 | drop_table :integrity_objects 5 | drop_table :integrity_checks 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20230214080054_remove_node_vz_attrs.rb: -------------------------------------------------------------------------------- 1 | class RemoveNodeVzAttrs < ActiveRecord::Migration[6.1] 2 | def change 3 | remove_column :nodes, :ve_private, :string, null: true, limit: 255, default: '/vz/private/%{veid}/private' 4 | remove_column :nodes, :net_interface, :string, null: true, limit: 50 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20230218165608_remove_vpses_config_attribute.rb: -------------------------------------------------------------------------------- 1 | class RemoveVpsesConfigAttribute < ActiveRecord::Migration[6.1] 2 | def change 3 | remove_column :vpses, :config, :text, null: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20230225073544_rename_node_statuses_vpsadmind_version.rb: -------------------------------------------------------------------------------- 1 | class RenameNodeStatusesVpsadmindVersion < ActiveRecord::Migration[6.1] 2 | def change 3 | rename_column :node_current_statuses, :vpsadmind_version, :vpsadmin_version 4 | rename_column :node_statuses, :vpsadmind_version, :vpsadmin_version 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20230225142050_add_vps_admin_modifications.rb: -------------------------------------------------------------------------------- 1 | class AddVpsAdminModifications < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :vpses, :allow_admin_modifications, :boolean, null: false, default: true 4 | add_index :vpses, :allow_admin_modifications 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20230421171841_add_oom_reports_count.rb: -------------------------------------------------------------------------------- 1 | class AddOomReportsCount < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :oom_reports, :count, :integer, null: false, default: 1 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20230421182709_add_oom_reports_cgroup.rb: -------------------------------------------------------------------------------- 1 | class AddOomReportsCgroup < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :oom_reports, :cgroup, :string, limit: 255, null: false, default: '/' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20230703161003_add_index_on_oom_reports_created_at.rb: -------------------------------------------------------------------------------- 1 | class AddIndexOnOomReportsCreatedAt < ActiveRecord::Migration[7.0] 2 | def change 3 | add_index :oom_reports, :created_at 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20230821123710_change_mailboxes_default_port_to_imap.rb: -------------------------------------------------------------------------------- 1 | class ChangeMailboxesDefaultPortToImap < ActiveRecord::Migration[7.0] 2 | def change 3 | change_column_default(:mailboxes, :port, from: 995, to: 993) 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20231027164147_add_status_last_log.rb: -------------------------------------------------------------------------------- 1 | class AddStatusLastLog < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :node_current_statuses, :last_log_at, :datetime, null: true 4 | add_column :vps_current_statuses, :last_log_at, :datetime, null: true 5 | add_column :dataset_properties, :last_log_at, :datetime, null: true 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20231031085006_remove_dataset_properties_last_log_at.rb: -------------------------------------------------------------------------------- 1 | class RemoveDatasetPropertiesLastLogAt < ActiveRecord::Migration[7.0] 2 | def change 3 | remove_column :dataset_properties, :last_log_at, :datetime, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20231116085008_add_pools_is_open.rb: -------------------------------------------------------------------------------- 1 | class AddPoolsIsOpen < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :pools, :is_open, :integer, null: false, default: true 4 | add_index :pools, :is_open 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20231203074758_add_oauth2_code_challenge.rb: -------------------------------------------------------------------------------- 1 | class AddOauth2CodeChallenge < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :oauth2_authorizations, :code_challenge, :string, null: true, limit: 255 4 | add_column :oauth2_authorizations, :code_challenge_method, :string, null: true, limit: 20 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20231207174132_remove_node_pubkeys.rb: -------------------------------------------------------------------------------- 1 | class RemoveNodePubkeys < ActiveRecord::Migration[7.0] 2 | def up 3 | drop_table :node_pubkeys 4 | end 5 | 6 | def down 7 | raise ActiveRecord::IrreversibleMigration 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20231216135851_add_auth_token_purpose.rb: -------------------------------------------------------------------------------- 1 | class AddAuthTokenPurpose < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :auth_tokens, :purpose, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20231218085935_add_configurable_user_session_length.rb: -------------------------------------------------------------------------------- 1 | class AddConfigurableUserSessionLength < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :users, :preferred_session_length, :integer, null: false, default: 20 * 60 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20231220100636_add_users_preferred_logout_all.rb: -------------------------------------------------------------------------------- 1 | class AddUsersPreferredLogoutAll < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :users, :preferred_logout_all, :boolean, null: false, default: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20231220124552_add_users_configurable_sso.rb: -------------------------------------------------------------------------------- 1 | class AddUsersConfigurableSso < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :users, :enable_single_sign_on, :boolean, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240126165609_add_user_created_host_ip_addresses.rb: -------------------------------------------------------------------------------- 1 | class AddUserCreatedHostIpAddresses < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :host_ip_addresses, :user_created, :boolean, null: false, default: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240308152841_extend_incident_report_codename.rb: -------------------------------------------------------------------------------- 1 | class ExtendIncidentReportCodename < ActiveRecord::Migration[7.1] 2 | def up 3 | change_column :incident_reports, :codename, :string, null: true, limit: 100 4 | end 5 | 6 | def down 7 | change_column :incident_reports, :codename, :string, null: true, limit: 50 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/db/migrate/20240601131223_add_oom_report_tasks_rss_anon_file_shmem.rb: -------------------------------------------------------------------------------- 1 | class AddOomReportTasksRssAnonFileShmem < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :oom_report_tasks, :rss_anon, :integer, null: true 4 | add_column :oom_report_tasks, :rss_file, :integer, null: true 5 | add_column :oom_report_tasks, :rss_shmem, :integer, null: true 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20240612140437_add_user_devices_skip_multi_factor.rb: -------------------------------------------------------------------------------- 1 | class AddUserDevicesSkipMultiFactor < ActiveRecord::Migration[7.1] 2 | class User < ActiveRecord::Base; end 3 | 4 | def change 5 | add_column :user_devices, :skip_multi_factor, :boolean, null: false, default: false 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/db/migrate/20240614150907_rename_user_devices_skip_multi_factor_auth.rb: -------------------------------------------------------------------------------- 1 | class RenameUserDevicesSkipMultiFactorAuth < ActiveRecord::Migration[7.1] 2 | def change 3 | rename_column :user_devices, :skip_multi_factor, :skip_multi_factor_auth 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240728121215_add_dns_server_zone_secondaries.rb: -------------------------------------------------------------------------------- 1 | class AddDnsServerZoneSecondaries < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :dns_server_zones, :zone_type, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240730113236_add_hidden_dns_servers.rb: -------------------------------------------------------------------------------- 1 | class AddHiddenDnsServers < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :dns_servers, :hidden, :boolean, null: false, default: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240730151611_add_dns_servers_user_dns_zone_type.rb: -------------------------------------------------------------------------------- 1 | class AddDnsServersUserDnsZoneType < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :dns_servers, :user_dns_zone_type, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240801065140_add_dns_records_comments.rb: -------------------------------------------------------------------------------- 1 | class AddDnsRecordsComments < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :dns_records, :comment, :string, limit: 255, null: false, default: '' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20240801112145_add_dynamic_dns_records.rb: -------------------------------------------------------------------------------- 1 | class AddDynamicDnsRecords < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :dns_records, :update_token_id, :bigint, null: true 4 | add_index :dns_records, :update_token_id 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20240831114419_add_users_enable_new_login_notification.rb: -------------------------------------------------------------------------------- 1 | class AddUsersEnableNewLoginNotification < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :users, :enable_new_login_notification, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20241020090006_add_os_template_config.rb: -------------------------------------------------------------------------------- 1 | class AddOsTemplateConfig < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :os_templates, :config, :text, null: false, default: '' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20241101160100_add_vps_current_statuses_halted.rb: -------------------------------------------------------------------------------- 1 | class AddVpsCurrentStatusesHalted < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :vps_current_statuses, :halted, :boolean, default: false, null: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20241104151630_add_user_devices_last_next_multi_factor_auth.rb: -------------------------------------------------------------------------------- 1 | class AddUserDevicesLastNextMultiFactorAuth < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :user_devices, :last_next_multi_factor_auth, :string, null: false, limit: 30, default: '' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20241118093252_add_vpses_enable_os_template_auto_update.rb: -------------------------------------------------------------------------------- 1 | class AddVpsesEnableOsTemplateAutoUpdate < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :vpses, :enable_os_template_auto_update, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20241123161745_add_os_templates_manage_hostname_dns_resolver.rb: -------------------------------------------------------------------------------- 1 | class AddOsTemplatesManageHostnameDnsResolver < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :os_templates, :manage_hostname, :boolean, null: false, default: true 4 | add_column :os_templates, :manage_dns_resolver, :boolean, null: false, default: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /api/db/migrate/20250130150827_add_network_interface_enable.rb: -------------------------------------------------------------------------------- 1 | class AddNetworkInterfaceEnable < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :network_interfaces, :enable, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20250131131838_add_vpses_enable_network.rb: -------------------------------------------------------------------------------- 1 | class AddVpsesEnableNetwork < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :vpses, :enable_network, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20250131161427_add_incident_report_vps_action.rb: -------------------------------------------------------------------------------- 1 | class AddIncidentReportVpsAction < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :incident_reports, :vps_action, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20250425132312_add_exports_original_enabled.rb: -------------------------------------------------------------------------------- 1 | class AddExportsOriginalEnabled < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :exports, :original_enabled, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20250425132321_add_dns_zones_original_enabled.rb: -------------------------------------------------------------------------------- 1 | class AddDnsZonesOriginalEnabled < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :dns_zones, :original_enabled, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/db/migrate/20250425142931_add_dns_records_user_id.rb: -------------------------------------------------------------------------------- 1 | class AddDnsRecordsUserId < ActiveRecord::Migration[7.2] 2 | def change 3 | add_column :dns_records, :user_id, :integer, null: true 4 | add_index :dns_records, :user_id 5 | 6 | add_column :dns_records, :original_enabled, :boolean, null: false, default: true 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/db/test.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/api/db/test.sqlite3 -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/inflections.rb: -------------------------------------------------------------------------------- 1 | ActiveSupport::Inflector.inflections(:en) do |inflect| 2 | inflect.irregular 'data', 'data' 3 | inflect.irregular 'dns', 'dnses' 4 | inflect.irregular 'prometheus', 'prometheuses' 5 | inflect.irregular 'vps', 'vpses' 6 | end 7 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/base.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API 2 | class Operations::Base 3 | def self.run(*, **) 4 | op = new 5 | op.run(*, **) 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/dns_tsig_key/destroy.rb: -------------------------------------------------------------------------------- 1 | require 'vpsadmin/api/operations/base' 2 | 3 | module VpsAdmin::API 4 | class Operations::DnsTsigKey::Destroy < Operations::Base 5 | # @param tsig_key [::DnsTsigKey] 6 | def run(tsig_key) 7 | tsig_key.destroy! 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/export/destroy.rb: -------------------------------------------------------------------------------- 1 | require 'vpsadmin/api/operations/base' 2 | 3 | module VpsAdmin::API 4 | class Operations::Export::Destroy < Operations::Base 5 | # @param export [::Export] 6 | # @return [TransactionChain] 7 | def run(export) 8 | chain, = TransactionChains::Export::Destroy.fire(export) 9 | chain 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/totp_device/delete.rb: -------------------------------------------------------------------------------- 1 | require 'vpsadmin/api/operations/base' 2 | 3 | module VpsAdmin::API 4 | class Operations::TotpDevice::Delete < Operations::Base 5 | # @param device [::UserTotpDevice] 6 | def run(device) 7 | device.destroy! 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/totp_device/disable.rb: -------------------------------------------------------------------------------- 1 | require 'vpsadmin/api/operations/base' 2 | 3 | module VpsAdmin::API 4 | class Operations::TotpDevice::Disable < Operations::Base 5 | # @param device [::UserTotpDevice] 6 | # @return [::UserTotpDevice] 7 | def run(device) 8 | device.update!(enabled: false) 9 | device 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/operations/utils/dns.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API 2 | module Operations::Utils::Dns 3 | # @param ip [String] 4 | # @return [String] 5 | def get_ptr(ip) 6 | Resolv.new.getname(ip) 7 | rescue Resolv::ResolvError => e 8 | e.message 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/tasks/snapshot.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API::Tasks 2 | class Snapshot < Base 3 | def purge_clones 4 | TransactionChains::SnapshotInPool::PurgeClones.fire 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/lib/vpsadmin/api/version.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin 2 | module API 3 | VERSION = '4.1.0'.freeze 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /api/models/application_record.rb: -------------------------------------------------------------------------------- 1 | class ApplicationRecord < ActiveRecord::Base 2 | self.abstract_class = true 3 | end 4 | -------------------------------------------------------------------------------- /api/models/branch.rb: -------------------------------------------------------------------------------- 1 | require_relative 'confirmable' 2 | require_relative 'lockable' 3 | 4 | class Branch < ApplicationRecord 5 | belongs_to :dataset_tree 6 | has_many :snapshot_in_pool_in_branches 7 | 8 | include Confirmable 9 | include Lockable 10 | 11 | def full_name 12 | "branch-#{name}.#{index}" 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/cluster_resource.rb: -------------------------------------------------------------------------------- 1 | class ClusterResource < ApplicationRecord 2 | has_many :default_object_cluster_resources 3 | 4 | enum :resource_type, %i[numeric object] 5 | end 6 | -------------------------------------------------------------------------------- /api/models/cluster_resource_package_item.rb: -------------------------------------------------------------------------------- 1 | class ClusterResourcePackageItem < ApplicationRecord 2 | belongs_to :cluster_resource_package 3 | belongs_to :cluster_resource 4 | end 5 | -------------------------------------------------------------------------------- /api/models/dataset_expansion_event.rb: -------------------------------------------------------------------------------- 1 | class DatasetExpansionEvent < ApplicationRecord 2 | belongs_to :dataset 3 | end 4 | -------------------------------------------------------------------------------- /api/models/dataset_expansion_history.rb: -------------------------------------------------------------------------------- 1 | class DatasetExpansionHistory < ApplicationRecord 2 | belongs_to :dataset_expansion 3 | belongs_to :admin, class_name: 'User', foreign_key: :admin_id 4 | end 5 | -------------------------------------------------------------------------------- /api/models/dataset_in_pool_plan.rb: -------------------------------------------------------------------------------- 1 | class DatasetInPoolPlan < ApplicationRecord 2 | belongs_to :environment_dataset_plan 3 | belongs_to :dataset_in_pool 4 | has_many :dataset_actions 5 | end 6 | -------------------------------------------------------------------------------- /api/models/dataset_plan.rb: -------------------------------------------------------------------------------- 1 | class DatasetPlan < ApplicationRecord 2 | has_many :environment_dataset_plans 3 | has_many :dataset_actions 4 | 5 | def label 6 | VpsAdmin::API::DatasetPlans.plans[name.to_sym].label 7 | end 8 | 9 | def description 10 | VpsAdmin::API::DatasetPlans.plans[name.to_sym].desc 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /api/models/dataset_property_history.rb: -------------------------------------------------------------------------------- 1 | class DatasetPropertyHistory < ApplicationRecord 2 | belongs_to :dataset_property 3 | 4 | def name 5 | dataset_property.name 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/models/dataset_tree.rb: -------------------------------------------------------------------------------- 1 | require_relative 'confirmable' 2 | require_relative 'lockable' 3 | 4 | class DatasetTree < ApplicationRecord 5 | belongs_to :dataset_in_pool 6 | has_many :branches 7 | 8 | include Confirmable 9 | include Lockable 10 | 11 | def full_name 12 | "tree.#{index}" 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/default_lifetime_value.rb: -------------------------------------------------------------------------------- 1 | require 'vpsadmin/api/lifetimes' 2 | 3 | class DefaultLifetimeValue < ApplicationRecord 4 | belongs_to :environment 5 | 6 | enum :direction, %i[leave enter] 7 | enum :state, VpsAdmin::API::Lifetimes::STATES 8 | end 9 | -------------------------------------------------------------------------------- /api/models/default_object_cluster_resource.rb: -------------------------------------------------------------------------------- 1 | class DefaultObjectClusterResource < ApplicationRecord 2 | belongs_to :environment 3 | belongs_to :cluster_resource 4 | end 5 | -------------------------------------------------------------------------------- /api/models/default_user_cluster_resource_package.rb: -------------------------------------------------------------------------------- 1 | class DefaultUserClusterResourcePackage < ApplicationRecord 2 | belongs_to :environment 3 | belongs_to :cluster_resource_package 4 | end 5 | -------------------------------------------------------------------------------- /api/models/dnssec_record.rb: -------------------------------------------------------------------------------- 1 | class DnssecRecord < ApplicationRecord 2 | belongs_to :dns_zone 3 | end 4 | -------------------------------------------------------------------------------- /api/models/environment_dataset_plan.rb: -------------------------------------------------------------------------------- 1 | class EnvironmentDatasetPlan < ApplicationRecord 2 | belongs_to :environment 3 | belongs_to :dataset_plan 4 | has_many :dataset_in_pool_plans 5 | 6 | def label 7 | dataset_plan.label 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/models/environment_os_template.rb: -------------------------------------------------------------------------------- 1 | class EnvironmentOsTemplate < ApplicationRecord 2 | belongs_to :environment 3 | belongs_to :os_template 4 | has_paper_trail 5 | end 6 | -------------------------------------------------------------------------------- /api/models/export_host.rb: -------------------------------------------------------------------------------- 1 | class ExportHost < ApplicationRecord 2 | belongs_to :export 3 | belongs_to :ip_address 4 | end 5 | -------------------------------------------------------------------------------- /api/models/group_snapshot.rb: -------------------------------------------------------------------------------- 1 | class GroupSnapshot < ApplicationRecord 2 | belongs_to :dataset_action 3 | belongs_to :dataset_in_pool 4 | end 5 | -------------------------------------------------------------------------------- /api/models/language.rb: -------------------------------------------------------------------------------- 1 | class Language < ApplicationRecord 2 | has_many :users 3 | has_many :mail_template_translations 4 | end 5 | -------------------------------------------------------------------------------- /api/models/mail_log.rb: -------------------------------------------------------------------------------- 1 | class MailLog < ApplicationRecord 2 | belongs_to :user 3 | belongs_to :mail_template 4 | belongs_to :mail_transaction, class_name: 'Transaction', foreign_key: :transaction_id 5 | end 6 | -------------------------------------------------------------------------------- /api/models/mail_recipient.rb: -------------------------------------------------------------------------------- 1 | class MailRecipient < ApplicationRecord 2 | has_many :mail_template_recipients 3 | has_many :mail_templates, through: :mail_template_recipients 4 | 5 | validates :label, presence: true 6 | end 7 | -------------------------------------------------------------------------------- /api/models/mail_template_recipient.rb: -------------------------------------------------------------------------------- 1 | class MailTemplateRecipient < ApplicationRecord 2 | belongs_to :mail_template 3 | belongs_to :mail_recipient 4 | end 5 | -------------------------------------------------------------------------------- /api/models/mailbox.rb: -------------------------------------------------------------------------------- 1 | class Mailbox < ApplicationRecord 2 | has_many :mailbox_handlers, dependent: :delete_all 3 | end 4 | -------------------------------------------------------------------------------- /api/models/mailbox_handler.rb: -------------------------------------------------------------------------------- 1 | class MailboxHandler < ApplicationRecord 2 | belongs_to :mailbox 3 | end 4 | -------------------------------------------------------------------------------- /api/models/network_interface_daily_accounting.rb: -------------------------------------------------------------------------------- 1 | class NetworkInterfaceDailyAccounting < ApplicationRecord 2 | self.primary_key = %i[network_interface_id user_id year month day] 3 | belongs_to :network_interface 4 | belongs_to :user 5 | end 6 | -------------------------------------------------------------------------------- /api/models/network_interface_monitor.rb: -------------------------------------------------------------------------------- 1 | class NetworkInterfaceMonitor < ApplicationRecord 2 | self.primary_key = 'network_interface_id' 3 | belongs_to :network_interface 4 | 5 | def id 6 | network_interface_id 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/models/network_interface_yearly_accounting.rb: -------------------------------------------------------------------------------- 1 | class NetworkInterfaceYearlyAccounting < ApplicationRecord 2 | self.primary_key = %i[network_interface_id user_id year] 3 | belongs_to :network_interface 4 | belongs_to :user 5 | end 6 | -------------------------------------------------------------------------------- /api/models/node_status.rb: -------------------------------------------------------------------------------- 1 | class NodeStatus < ApplicationRecord 2 | belongs_to :node 3 | 4 | enum :cgroup_version, %i[cgroup_invalid cgroup_v1 cgroup_v2] 5 | end 6 | -------------------------------------------------------------------------------- /api/models/oom_prevention.rb: -------------------------------------------------------------------------------- 1 | class OomPrevention < ApplicationRecord 2 | belongs_to :vps 3 | enum :action, %i[restart stop] 4 | end 5 | -------------------------------------------------------------------------------- /api/models/oom_report.rb: -------------------------------------------------------------------------------- 1 | class OomReport < ApplicationRecord 2 | belongs_to :vps 3 | belongs_to :oom_report_rule 4 | has_many :oom_report_usages, dependent: :delete_all 5 | has_many :oom_report_stats, dependent: :delete_all 6 | has_many :oom_report_tasks, dependent: :delete_all 7 | 8 | default_scope { where(processed: true) } 9 | end 10 | -------------------------------------------------------------------------------- /api/models/oom_report_counter.rb: -------------------------------------------------------------------------------- 1 | class OomReportCounter < ApplicationRecord 2 | belongs_to :vps 3 | end 4 | -------------------------------------------------------------------------------- /api/models/oom_report_stat.rb: -------------------------------------------------------------------------------- 1 | class OomReportStat < ApplicationRecord 2 | belongs_to :oom_report 3 | end 4 | -------------------------------------------------------------------------------- /api/models/oom_report_task.rb: -------------------------------------------------------------------------------- 1 | class OomReportTask < ApplicationRecord 2 | belongs_to :oom_report 3 | end 4 | -------------------------------------------------------------------------------- /api/models/oom_report_usage.rb: -------------------------------------------------------------------------------- 1 | class OomReportUsage < ApplicationRecord 2 | belongs_to :oom_report 3 | end 4 | -------------------------------------------------------------------------------- /api/models/os_family.rb: -------------------------------------------------------------------------------- 1 | class OsFamily < ApplicationRecord 2 | has_many :os_templates, dependent: :restrict_with_exception 3 | 4 | validates :label, presence: true 5 | end 6 | -------------------------------------------------------------------------------- /api/models/snapshot_in_pool.rb: -------------------------------------------------------------------------------- 1 | require_relative 'confirmable' 2 | require_relative 'lockable' 3 | 4 | class SnapshotInPool < ApplicationRecord 5 | belongs_to :snapshot 6 | belongs_to :dataset_in_pool 7 | belongs_to :mount 8 | has_many :snapshot_in_pool_in_branches 9 | has_many :mounts 10 | 11 | include Confirmable 12 | include Lockable 13 | end 14 | -------------------------------------------------------------------------------- /api/models/snapshot_in_pool_clone.rb: -------------------------------------------------------------------------------- 1 | require_relative 'confirmable' 2 | require_relative 'lockable' 3 | 4 | class SnapshotInPoolClone < ApplicationRecord 5 | belongs_to :snapshot_in_pool 6 | belongs_to :user_namespace_map 7 | has_many :mounts 8 | enum :state, %i[active inactive] 9 | 10 | include Confirmable 11 | include Lockable 12 | end 13 | -------------------------------------------------------------------------------- /api/models/snapshot_in_pool_in_branch.rb: -------------------------------------------------------------------------------- 1 | require_relative 'confirmable' 2 | require_relative 'lockable' 3 | 4 | class SnapshotInPoolInBranch < ApplicationRecord 5 | belongs_to :snapshot_in_pool 6 | belongs_to :branch 7 | belongs_to :snapshot_in_pool_in_branch 8 | 9 | include Confirmable 10 | include Lockable 11 | end 12 | -------------------------------------------------------------------------------- /api/models/transaction_chain_concern.rb: -------------------------------------------------------------------------------- 1 | class TransactionChainConcern < ApplicationRecord 2 | belongs_to :transaction_chain 3 | end 4 | -------------------------------------------------------------------------------- /api/models/transaction_chains/lifetimes/not_implemented.rb: -------------------------------------------------------------------------------- 1 | module TransactionChains 2 | class Lifetimes::NotImplemented < ::TransactionChain 3 | def link_chain(obj, target, state, log) 4 | raise NotImplementedError, 5 | "Transition to state '#{state}' is not implemented" 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /api/models/transaction_chains/maintenance/custom.rb: -------------------------------------------------------------------------------- 1 | module TransactionChains::Maintenance 2 | class Custom < ::TransactionChain 3 | label 'Custom' 4 | 5 | def link_chain(*args) 6 | raise NotImplementedError 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /api/models/transaction_chains/network_interface.rb: -------------------------------------------------------------------------------- 1 | module TransactionChains 2 | module NetworkInterface 3 | TYPES = { 4 | venet: Venet, 5 | veth_routed: VethRouted 6 | }.freeze 7 | 8 | def self.chain_for(type, action) 9 | TYPES[type.to_sym].const_get(action) 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /api/models/transactions/dns_server/reload.rb: -------------------------------------------------------------------------------- 1 | module Transactions::DnsServer 2 | class Reload < ::Transaction 3 | t_name :dns_server_reload 4 | t_type 5510 5 | queue :dns 6 | 7 | def params(dns_server, zone: nil) 8 | self.node_id = dns_server.node_id 9 | 10 | { zone: } 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /api/models/transactions/export/disable.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Export 2 | class Disable < ::Transaction 3 | t_name :export_disable 4 | t_type 5404 5 | queue :storage 6 | 7 | def params(export) 8 | self.node_id = export.dataset_in_pool.pool.node_id 9 | 10 | { 11 | export_id: export.id 12 | } 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/transactions/export/enable.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Export 2 | class Enable < ::Transaction 3 | t_name :export_enable 4 | t_type 5403 5 | queue :storage 6 | 7 | def params(export) 8 | self.node_id = export.dataset_in_pool.pool.node_id 9 | 10 | { 11 | export_id: export.id 12 | } 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/transactions/queue/release.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Queue 2 | class Release < ::Transaction 3 | t_name :queue_release 4 | t_type 102 5 | 6 | # @param node [::Node] 7 | # @param queue [Symbol] 8 | def params(node, queue) 9 | self.node_id = node.id 10 | { queue: } 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /api/models/transactions/queue/reserve.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Queue 2 | class Reserve < ::Transaction 3 | t_name :queue_reserve 4 | t_type 101 5 | queue :queue 6 | 7 | # @param node [::Node] 8 | # @param queue [Symbol] 9 | def params(node, queue) 10 | self.node_id = node.id 11 | { queue: } 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/transactions/storage/clone_snapshot_name.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Storage 2 | class CloneSnapshotName < ::Transaction 3 | t_name :storage_clone_snapshot_name 4 | t_type 5224 5 | queue :storage 6 | 7 | def params(node, clones) 8 | self.node_id = node.id 9 | 10 | { 11 | snapshots: clones 12 | } 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/transactions/utils/no_op.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Utils 2 | class NoOp < ::Transaction 3 | t_name :utils_no_op 4 | t_type 10_001 5 | 6 | def params(node_id, sleep: nil) 7 | self.node_id = node_id 8 | 9 | { sleep: } 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /api/models/transactions/utils/user_namespaces.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Utils 2 | module UserNamespaces 3 | def build_map(userns_map, kind) 4 | userns_map.build_map(kind) 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /api/models/transactions/vps/deploy_public_key.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class DeployPublicKey < ::Transaction 3 | t_name :vps_deploy_public_key 4 | t_type 2017 5 | queue :vps 6 | 7 | def params(vps, pubkey) 8 | self.vps_id = vps.id 9 | self.node_id = vps.node_id 10 | 11 | { pubkey: pubkey.key } 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/transactions/vps/destroy.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class Destroy < ::Transaction 3 | t_name :vps_destroy 4 | t_type 3002 5 | queue :vps 6 | irreversible 7 | 8 | def params(vps) 9 | self.vps_id = vps.id 10 | self.node_id = vps.node_id 11 | 12 | {} 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/transactions/vps/send_cleanup.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class SendCleanup < ::Transaction 3 | t_name :vps_send_cleanup 4 | t_type 3034 5 | queue :vps 6 | irreversible 7 | 8 | def params(vps) 9 | self.vps_id = vps.id 10 | self.node_id = vps.node_id 11 | 12 | {} 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/transactions/vps/send_rollback_config.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class SendRollbackConfig < ::Transaction 3 | t_name :vps_send_rollback_config 4 | t_type 3035 5 | queue :vps 6 | 7 | def params(vps) 8 | self.vps_id = vps.id 9 | self.node_id = vps.node_id 10 | 11 | {} 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/transactions/vps/send_rootfs.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class SendRootfs < ::Transaction 3 | t_name :vps_send_rootfs 4 | t_type 3031 5 | queue :zfs_send 6 | 7 | def params(vps) 8 | self.vps_id = vps.id 9 | self.node_id = vps.node_id 10 | 11 | {} 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/transactions/vps/send_sync.rb: -------------------------------------------------------------------------------- 1 | module Transactions::Vps 2 | class SendSync < ::Transaction 3 | t_name :vps_send_sync 4 | t_type 3032 5 | queue :zfs_send 6 | 7 | def params(vps) 8 | self.vps_id = vps.id 9 | self.node_id = vps.node_id 10 | 11 | {} 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /api/models/user_failed_login.rb: -------------------------------------------------------------------------------- 1 | class UserFailedLogin < ApplicationRecord 2 | belongs_to :user 3 | belongs_to :user_agent 4 | end 5 | -------------------------------------------------------------------------------- /api/models/user_namespace.rb: -------------------------------------------------------------------------------- 1 | require_relative 'lockable' 2 | 3 | class UserNamespace < ApplicationRecord 4 | belongs_to :user 5 | has_many :user_namespace_blocks 6 | has_many :user_namespace_maps 7 | 8 | include Lockable 9 | end 10 | -------------------------------------------------------------------------------- /api/models/user_namespace_block.rb: -------------------------------------------------------------------------------- 1 | require_relative 'lockable' 2 | 3 | class UserNamespaceBlock < ApplicationRecord 4 | belongs_to :user_namespace 5 | 6 | include Lockable 7 | end 8 | -------------------------------------------------------------------------------- /api/models/vps_current_status.rb: -------------------------------------------------------------------------------- 1 | class VpsCurrentStatus < ApplicationRecord 2 | belongs_to :vps 3 | end 4 | -------------------------------------------------------------------------------- /api/models/vps_os_process.rb: -------------------------------------------------------------------------------- 1 | class VpsOsProcess < ApplicationRecord 2 | belongs_to :vps 3 | end 4 | -------------------------------------------------------------------------------- /api/models/vps_ssh_host_key.rb: -------------------------------------------------------------------------------- 1 | class VpsSshHostKey < ApplicationRecord 2 | belongs_to :vps 3 | end 4 | -------------------------------------------------------------------------------- /api/models/vps_status.rb: -------------------------------------------------------------------------------- 1 | class VpsStatus < ApplicationRecord 2 | belongs_to :vps 3 | end 4 | -------------------------------------------------------------------------------- /api/models/vpsadmin_component.rb: -------------------------------------------------------------------------------- 1 | class Component < ApplicationRecord 2 | end 3 | -------------------------------------------------------------------------------- /api/models/webauthn_challenge.rb: -------------------------------------------------------------------------------- 1 | class WebauthnChallenge < ApplicationRecord 2 | belongs_to :user 3 | belongs_to :token, dependent: :delete 4 | belongs_to :user_agent 5 | 6 | enum :challenge_type, %i[registration authentication] 7 | 8 | def valid_to 9 | token.valid_to 10 | end 11 | 12 | def token_valid? 13 | valid_to > Time.now 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /api/models/webauthn_credential.rb: -------------------------------------------------------------------------------- 1 | class WebauthnCredential < ApplicationRecord 2 | belongs_to :user 3 | 4 | validates :external_id, :public_key, :label, :sign_count, presence: true 5 | validates :label, length: { minimum: 3 } 6 | validates :sign_count, 7 | numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: (2**32) - 1 } 8 | end 9 | -------------------------------------------------------------------------------- /api/spec/fixtures/environments.yml: -------------------------------------------------------------------------------- 1 | production: 2 | label: Production 3 | domain: vpsfree.cz 4 | 5 | playground: 6 | label: Playground 7 | domain: vpsfree.cz 8 | -------------------------------------------------------------------------------- /api/spec/fixtures/os_templates.yml: -------------------------------------------------------------------------------- 1 | scientific: 2 | templ_name: scientific-x86_64 3 | templ_label: Scientific Linux 6 4 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /client/.rubocop.yml: -------------------------------------------------------------------------------- 1 | inherit_from: ../.rubocop.yml 2 | 3 | 4 | AllCops: 5 | TargetRubyVersion: 3.0 -------------------------------------------------------------------------------- /client/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gemspec 4 | 5 | group :development do 6 | gem 'rake' 7 | end 8 | -------------------------------------------------------------------------------- /client/Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/gem_tasks' 2 | -------------------------------------------------------------------------------- /client/bin/vpsadminctl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'vpsadmin/cli' 3 | 4 | VpsAdmin::CLI::Cli.run 5 | -------------------------------------------------------------------------------- /client/lib/vpsadmin/client.rb: -------------------------------------------------------------------------------- 1 | require 'haveapi/client' 2 | 3 | module VpsAdmin 4 | module Client 5 | class Client < HaveAPI::Client::Client 6 | end 7 | 8 | # Shortcut to {VpsAdmin::Client::Client.new} 9 | def self.new(*args) 10 | Client.new(*args) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /client/lib/vpsadmin/client/version.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin 2 | module Client 3 | VERSION = '4.1.0'.freeze 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /console_router/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | [public/*.js] 4 | indent_size = 2 5 | indent_style = space 6 | -------------------------------------------------------------------------------- /console_router/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | node_modules 24 | package.json 25 | package-lock.json 26 | -------------------------------------------------------------------------------- /console_router/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'base64' 4 | gem 'bunny', '~> 2.23.0' 5 | gem 'puma' 6 | gem 'require_all', '~> 2.0.0' 7 | gem 'sinatra', '~> 4.0' 8 | 9 | group :development do 10 | gem 'rackup' 11 | gem 'webrick' 12 | end 13 | -------------------------------------------------------------------------------- /console_router/bin/vpsadmin-console-router: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../lib/vpsadmin/console_router' 3 | 4 | VpsAdmin::ConsoleRouter::Server.run! 5 | -------------------------------------------------------------------------------- /console_router/config.ru: -------------------------------------------------------------------------------- 1 | require 'bundler/setup' 2 | require_relative 'lib/vpsadmin/console_router' 3 | 4 | run VpsAdmin::ConsoleRouter::Server 5 | -------------------------------------------------------------------------------- /console_router/config/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/console_router/config/.keep -------------------------------------------------------------------------------- /console_router/lib/vpsadmin/console_router.rb: -------------------------------------------------------------------------------- 1 | require 'base64' 2 | require 'require_all' 3 | require 'sinatra/base' 4 | 5 | module VpsAdmin 6 | module ConsoleRouter 7 | end 8 | end 9 | 10 | require_rel 'console_router/*.rb' 11 | -------------------------------------------------------------------------------- /console_router/lib/vpsadmin/console_router/version.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin 2 | module ConsoleRouter 3 | VERSION = '4.1.0'.freeze 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /console_router/public/vzconsole.js: -------------------------------------------------------------------------------- 1 | // Monitoring checks this file, make it happy for now 2 | -------------------------------------------------------------------------------- /console_router/update-simple-keyboard.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | curl -L -o public/simple-keyboard.js https://github.com/hodgef/simple-keyboard/raw/master/build/index.js 4 | curl -L -o public/simple-keyboard.css https://github.com/hodgef/simple-keyboard/raw/master/build/css/index.css 5 | -------------------------------------------------------------------------------- /console_router/update-xterm-js.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | npm install @xterm/xterm 4 | cp node_modules/@xterm/xterm/lib/xterm.{js,js.map} public/ 5 | cp node_modules/@xterm/xterm/css/xterm.css public/ 6 | 7 | npm install @xterm/addon-fit 8 | cp node_modules/@xterm/addon-fit/lib/addon-fit.{js,js.map} public/ 9 | -------------------------------------------------------------------------------- /doc/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | [*.mdwn] 3 | trim_trailing_whitespace = false 4 | -------------------------------------------------------------------------------- /doc/local.css: -------------------------------------------------------------------------------- 1 | pre.hl { 2 | background-color: #eee; 3 | } 4 | 5 | -------------------------------------------------------------------------------- /doc/networking.mdwn: -------------------------------------------------------------------------------- 1 | - [[Shaping]] -------------------------------------------------------------------------------- /doc/storage/create.mdwn: -------------------------------------------------------------------------------- 1 | When creating a dataset, it is possible, that dataset with the same name already 2 | existed and its backup dataset still exists (but is marked for destroyal). 3 | In such a case, the newly created dataset is reconnected with the already existing 4 | backup and the expiration date is removed. 5 | -------------------------------------------------------------------------------- /doc/storage/rotate.mdwn: -------------------------------------------------------------------------------- 1 | Dataset in pool has some limits as to how many snapshots should be kept. 2 | Rotate removes those old snapshots. 3 | -------------------------------------------------------------------------------- /doc/storage/set.mdwn: -------------------------------------------------------------------------------- 1 | Change ZFS properties of selected dataset. 2 | -------------------------------------------------------------------------------- /doc/storage/snapshot.mdwn: -------------------------------------------------------------------------------- 1 | A simple transaction that creates a snapshot of a dataset in pool. The only 2 | catch is that the snapshot name being a date of its creation, the name 3 | is first guessed and the transaction then returns the real name. 4 | That is because the time of an enqueue can differ from the execution time. 5 | -------------------------------------------------------------------------------- /doc/storage/transfer.mdwn: -------------------------------------------------------------------------------- 1 | Transfer one or more snapshots from one dataset in pool to another dataset 2 | in pool (of the same dataset). 3 | 4 | The transfer itself is realized through ``zfs send/recv`` via SSH. 5 | -------------------------------------------------------------------------------- /doc/vps.mdwn: -------------------------------------------------------------------------------- 1 | - [[Datasets]] 2 | - [[Remote console]] 3 | -------------------------------------------------------------------------------- /download_mounter/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /download_mounter/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'haveapi-client', '~> 0.26.0' 4 | gem 'highline' 5 | -------------------------------------------------------------------------------- /download_mounter/bin/vpsadmin-download-mounter: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../lib/vpsadmin/download_mounter' 3 | 4 | VpsAdmin::DownloadMounter::Cli.run 5 | -------------------------------------------------------------------------------- /download_mounter/lib/vpsadmin/download_mounter/version.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin 2 | module DownloadMounter 3 | VERSION = '4.1.0'.freeze 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /libnodectld/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /libnodectld/.rubocop.yml: -------------------------------------------------------------------------------- 1 | inherit_from: ../.rubocop.yml 2 | 3 | Style/GlobalVars: 4 | Enabled: false 5 | -------------------------------------------------------------------------------- /libnodectld/CHANGELOG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/libnodectld/CHANGELOG -------------------------------------------------------------------------------- /libnodectld/Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/gem_tasks' 2 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/branch/destroy.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Branch::Destroy < Commands::Base 3 | handle 5207 4 | 5 | include Utils::System 6 | include Utils::Zfs 7 | 8 | def exec 9 | zfs(:destroy, nil, "#{@pool_fs}/#{@dataset_name}/#{@tree}/#{@branch}") 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/dataset/destroy.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Dataset::Destroy < Commands::Base 3 | handle 5203 4 | 5 | def exec 6 | Dataset.new.destroy(@pool_fs, @name, recursive: false, trash: true) 7 | ok 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/dataset/remove_clone.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Dataset::RemoveClone < Commands::Base 3 | handle 5218 4 | needs :system, :zfs, :pool 5 | 6 | def exec 7 | clone = pool_mounted_clone(@pool_fs, @clone_name) 8 | 9 | zfs(:set, 'canmount=off', clone) 10 | zfs(:destroy, nil, clone) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/dataset_tree/destroy.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::DatasetTree::Destroy < Commands::Base 3 | handle 5214 4 | 5 | include Utils::System 6 | include Utils::Zfs 7 | 8 | def exec 9 | zfs(:destroy, nil, "#{@pool_fs}/#{@dataset_name}/#{@tree}") 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/dns_server_zone/add_servers.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::DnsServerZone::AddServers < Commands::Base 3 | handle 5507 4 | needs :dns 5 | 6 | def exec 7 | add_servers_to_zone 8 | ok 9 | end 10 | 11 | def rollback 12 | remove_servers_from_zone 13 | ok 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/dns_server_zone/remove_servers.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::DnsServerZone::RemoveServers < Commands::Base 3 | handle 5508 4 | needs :dns 5 | 6 | def exec 7 | remove_servers_from_zone 8 | ok 9 | end 10 | 11 | def rollback 12 | add_servers_to_zone 13 | ok 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/export/destroy.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Export::Destroy < Commands::Base 3 | handle 5402 4 | 5 | def exec 6 | s = NfsServer.new(@export_id, @address) 7 | s.destroy! 8 | end 9 | 10 | def rollback 11 | s = NfsServer.new(@export_id, @address) 12 | s.create! 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/export/disable.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Export::Disable < Commands::Base 3 | handle 5404 4 | 5 | def exec 6 | s = NfsServer.new(@export_id, nil) 7 | s.stop! 8 | end 9 | 10 | def rollback 11 | s = NfsServer.new(@export_id, nil) 12 | s.start! 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/export/enable.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Export::Enable < Commands::Base 3 | handle 5403 4 | 5 | def exec 6 | s = NfsServer.new(@export_id, nil) 7 | s.start! 8 | end 9 | 10 | def rollback 11 | s = NfsServer.new(@export_id, nil) 12 | s.stop! 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/network/register.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Network::Register < Commands::Base 3 | handle 2201 4 | 5 | def exec 6 | ok 7 | end 8 | 9 | def rollback 10 | ok 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/outage_window/in_or_fail.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::OutageWindow::InOrFail < Commands::Base 3 | handle 2102 4 | needs :outage_window 5 | 6 | def exec 7 | raise 'not in a window' unless windows.open? 8 | 9 | ok 10 | end 11 | 12 | def rollback 13 | ok 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/queue/release.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Queue::Release < Commands::Base 3 | handle 102 4 | needs :queue 5 | 6 | def exec 7 | release_queue(@queue) 8 | ok 9 | end 10 | 11 | def rollback 12 | ok 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/queue/reserve.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Queue::Reserve < Commands::Base 3 | handle 101 4 | needs :queue 5 | 6 | def exec 7 | reserve_queue(@queue) 8 | ok 9 | end 10 | 11 | def rollback 12 | release_queue(@queue) 13 | ok 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/utils/no_op.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Utils::NoOp < Commands::Base 3 | handle 10_001 4 | 5 | def exec 6 | sleep(@sleep) if @sleep 7 | ok 8 | end 9 | 10 | def rollback 11 | sleep(@sleep) if @sleep 12 | ok 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/destroy.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::Destroy < Commands::Base 3 | handle 3002 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct del], @vps_id) 8 | NetAccounting.remove_vps(@vps_id) 9 | ok 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/hostname.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::Hostname < Commands::Base 3 | handle 2004 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct set hostname], [@vps_id, @hostname]) 8 | end 9 | 10 | def rollback 11 | osctl(%i[ct set hostname], [@vps_id, @original]) 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/restart.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::Restart < Commands::Base 3 | handle 1003 4 | 5 | def exec 6 | @vps = Vps.new(@vps_id) 7 | @vps.restart(@start_timeout, @autostart_priority) 8 | ok 9 | end 10 | 11 | def rollback 12 | ok 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/send_cleanup.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::SendCleanup < Commands::Base 3 | handle 3034 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct send cleanup], @vps_id) 8 | NetAccounting.remove_vps(@vps_id) 9 | ok 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/send_rollback_config.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::SendRollbackConfig < Commands::Base 3 | handle 3035 4 | needs :system, :osctl 5 | 6 | def exec 7 | ok 8 | end 9 | 10 | def rollback 11 | osctl(%i[ct del], @vps_id, { force: true }) 12 | ok 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/send_rootfs.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::SendRootfs < Commands::Base 3 | handle 3031 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct send rootfs], @vps_id) 8 | end 9 | 10 | def rollback 11 | ok 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/send_sync.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::SendSync < Commands::Base 3 | handle 3032 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct send sync], @vps_id) 8 | end 9 | 10 | def rollback 11 | ok 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/commands/vps/unmanage_hostname.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | class Commands::Vps::UnmanageHostname < Commands::Base 3 | handle 2016 4 | needs :system, :osctl 5 | 6 | def exec 7 | osctl(%i[ct unset hostname], @vps_id) 8 | end 9 | 10 | def rollback 11 | osctl(%i[ct set hostname], [@vps_id, @hostname]) 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/console.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | module Console; end 3 | end 4 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/exceptions.rb: -------------------------------------------------------------------------------- 1 | require 'libosctl' 2 | 3 | module NodeCtld 4 | SystemCommandFailed = OsCtl::Lib::Exceptions::SystemCommandFailed 5 | 6 | class CommandNotImplemented < StandardError; end 7 | 8 | class TransactionCheckError < StandardError; end 9 | 10 | class RemoteCommandError < StandardError; end 11 | end 12 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/kernel_log/events.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | module KernelLog 3 | module OomKill; end 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/mount_state.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class MountState < Base 3 | handle :mount_state 4 | 5 | def exec 6 | NodeCtld::MountReporter.report(@vps_id.to_i, @mount_id.to_i, @state.to_sym) 7 | ok 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/pause.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class Pause < Base 3 | handle :pause 4 | 5 | def exec 6 | @daemon.pause(@t_id || true) 7 | ok 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/ping.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class Ping < Base 3 | handle :ping 4 | 5 | def exec 6 | ok.update({ output: { pong: :pong } }) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/pry.rb: -------------------------------------------------------------------------------- 1 | require 'pry-remote' 2 | 3 | module NodeCtld::RemoteCommands 4 | class Pry < Base 5 | handle :pry 6 | 7 | def exec 8 | binding.remote_pry # rubocop:disable Lint/Debugger 9 | ok 10 | rescue DRb::DRbConnError 11 | ok 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/refresh.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class Refresh < Base 3 | handle :refresh 4 | 5 | def exec 6 | log(:info, :remote, 'Resource update requested') 7 | @daemon.update_all 8 | 9 | ok 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/reload.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class Reload < Base 3 | handle :reload 4 | 5 | def exec 6 | log 'Reloading config' 7 | $CFG.reload 8 | ok 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/remote_commands/resume.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::RemoteCommands 2 | class Resume < Base 3 | handle :resume 4 | 5 | def exec 6 | @daemon.resume 7 | ok 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/system_probes.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | module SystemProbe; end 3 | end 4 | 5 | require_rel 'system_probes' 6 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/system_probes/kernel.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld::SystemProbes 2 | class Kernel 3 | def version 4 | File.read('/proc/sys/kernel/osrelease').strip 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/utils.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | module Utils; end 3 | end 4 | 5 | require_rel 'utils' 6 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/utils/compat.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | module Utils::Compat 3 | def class_from_name(name) 4 | name.split('::').inject(Object) do |mod, part| 5 | mod.const_get(part) 6 | end 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /libnodectld/lib/nodectld/version.rb: -------------------------------------------------------------------------------- 1 | module NodeCtld 2 | VERSION = '4.1.0'.freeze 3 | end 4 | -------------------------------------------------------------------------------- /libnodectld/templates/ct/hook/post-mount: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::CtHook.post_mount(ENV) 5 | -------------------------------------------------------------------------------- /libnodectld/templates/ct/hook/pre-start: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::CtHook.pre_start(ENV) 5 | -------------------------------------------------------------------------------- /libnodectld/templates/ct/hook/veth-up: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::CtHook.veth_up(ENV) 5 | -------------------------------------------------------------------------------- /libnodectld/templates/pool/hook/post-import: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::PoolHook.post_import(ENV) 5 | -------------------------------------------------------------------------------- /libnodectld/templates/pool/hook/pre-export: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::PoolHook.pre_export(ENV) 5 | -------------------------------------------------------------------------------- /libnodectld/templates/pool/hook/pre-import: -------------------------------------------------------------------------------- 1 | #!/run/nodectl/nodectl script 2 | require 'nodectld/standalone' 3 | 4 | NodeCtld::PoolHook.pre_import(ENV) 5 | -------------------------------------------------------------------------------- /mail_templates/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /mail_templates/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gemspec 3 | -------------------------------------------------------------------------------- /mail_templates/bin/vpsadmin-mail-templates: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../lib/vpsadmin/mail_templates' 3 | 4 | VpsAdmin::MailTemplates::Cli.run 5 | -------------------------------------------------------------------------------- /mail_templates/lib/vpsadmin/mail_templates/version.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin 2 | module MailTemplates 3 | VERSION = '4.1.0'.freeze 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /nixos/modules/nixos-modules.nix: -------------------------------------------------------------------------------- 1 | { config, ... }: 2 | { 3 | imports = (import ./module-list.nix).nixos; 4 | } 5 | -------------------------------------------------------------------------------- /nixos/modules/vpsadminos-modules.nix: -------------------------------------------------------------------------------- 1 | { config, ... }: 2 | { 3 | imports = (import ./module-list.nix).vpsadminos; 4 | } 5 | -------------------------------------------------------------------------------- /nodectl/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | man/style.css 24 | man/*.html 25 | man/**/*.html 26 | man/man?/*.? 27 | -------------------------------------------------------------------------------- /nodectl/.rubocop.yml: -------------------------------------------------------------------------------- 1 | inherit_from: ../.rubocop.yml 2 | 3 | Style/GlobalVars: 4 | Enabled: false 5 | -------------------------------------------------------------------------------- /nodectl/CHANGELOG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/nodectl/CHANGELOG -------------------------------------------------------------------------------- /nodectl/bin/nodectl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'nodectl' 3 | NodeCtl::Cli.run 4 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl.rb: -------------------------------------------------------------------------------- 1 | require 'require_all' 2 | 3 | module NodeCtl 4 | module Commands; end 5 | module CommandTemplates; end 6 | end 7 | 8 | require_rel 'nodectl/*.rb' 9 | require_rel 'nodectl/command' 10 | require_rel 'nodectl/command_templates' 11 | require_rel 'nodectl/commands' 12 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/command/local.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Command::Local < Command::Base 3 | def execute; end 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/flush.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Flush < CommandTemplates::ResourceControl 3 | cmd :flush 4 | description 'Flush resource' 5 | 6 | def process 7 | puts 'Flushed' 8 | super 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/init.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Init < CommandTemplates::ResourceControl 3 | cmd :init 4 | description 'Initialize resource' 5 | 6 | def process 7 | puts 'Initialized' 8 | super 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/ping.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Ping < Command::Remote 3 | cmd :ping 4 | description 'Check if nodectld is alive' 5 | 6 | def process 7 | if response[:pong] == 'pong' 8 | puts 'pong' 9 | 10 | else 11 | error('nodectld did not respond correctly') 12 | end 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/refresh.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Refresh < Command::Remote 3 | cmd :refresh 4 | description 'Update VPS status, traffic counters, storage usage and server status' 5 | 6 | def process 7 | puts 'Refreshed' 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/reinit.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Reinit < CommandTemplates::ResourceControl 3 | cmd :reinit 4 | description 'Reinitialize resource' 5 | 6 | def process 7 | puts 'Reinitialized' 8 | super 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/reload.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Reload < Command::Remote 3 | cmd :reload 4 | description "Reload nodectld's configuration" 5 | 6 | def process 7 | puts 'Config reloaded' 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/commands/resume.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class Commands::Resume < Command::Remote 3 | cmd :resume 4 | description 'Resume execution of queued transactions' 5 | 6 | def process 7 | puts 'Resumed' 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/exceptions.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | class ValidationError < StandardError; end 3 | end 4 | -------------------------------------------------------------------------------- /nodectl/lib/nodectl/version.rb: -------------------------------------------------------------------------------- 1 | module NodeCtl 2 | VERSION = '4.1.0'.freeze 3 | end 4 | -------------------------------------------------------------------------------- /nodectld/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /nodectld/.rubocop.yml: -------------------------------------------------------------------------------- 1 | inherit_from: ../.rubocop.yml 2 | 3 | Style/GlobalVars: 4 | Enabled: false 5 | -------------------------------------------------------------------------------- /nodectld/Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/gem_tasks' 2 | -------------------------------------------------------------------------------- /nodectld/bin/nodectld: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'nodectld' 3 | require 'nodectld/cli' 4 | NodeCtld::Cli.run 5 | -------------------------------------------------------------------------------- /packages/api/api.nix: -------------------------------------------------------------------------------- 1 | { lib, stdenv, fetchurl, bundlerEnv, ruby, vpsadmin-source } @ args: 2 | import ./common.nix args { name = "api"; } 3 | -------------------------------------------------------------------------------- /packages/api/supervisor.nix: -------------------------------------------------------------------------------- 1 | { lib, stdenv, fetchurl, bundlerEnv, ruby, vpsadmin-source } @ args: 2 | import ./common.nix args { name = "supervisor"; } 3 | -------------------------------------------------------------------------------- /packages/console-router/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'base64' 4 | gem 'bunny', '~> 2.23.0' 5 | gem 'puma' 6 | gem 'require_all', '~> 2.0.0' 7 | gem 'sinatra', '~> 4.0' 8 | 9 | group :development do 10 | gem 'rackup' 11 | gem 'webrick' 12 | end 13 | -------------------------------------------------------------------------------- /packages/download-mounter/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'haveapi-client', '~> 0.26.0' 4 | gem 'highline' 5 | -------------------------------------------------------------------------------- /packages/libnodectld/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | source 'https://rubygems.vpsfree.cz' do 4 | gem 'libnodectld', '4.1.0.build20250529113933' 5 | end 6 | -------------------------------------------------------------------------------- /packages/libnodectld/default.nix: -------------------------------------------------------------------------------- 1 | { lib, bundlerApp }: 2 | 3 | bundlerApp { 4 | pname = "libnodectld"; 5 | gemdir = ./.; 6 | 7 | meta = with lib; { 8 | description = ""; 9 | homepage = https://github.com/vpsfreecz/vpsadmin; 10 | license = licenses.gpl3; 11 | maintainers = [ maintainers.sorki ]; 12 | platforms = platforms.unix; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /packages/nodectl/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | source 'https://rubygems.vpsfree.cz' do 4 | gem 'nodectl', '4.1.0.build20250529113933' 5 | end 6 | -------------------------------------------------------------------------------- /packages/nodectld/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | source 'https://rubygems.vpsfree.cz' do 4 | gem 'nodectld', '4.1.0.build20250529113933' 5 | end 6 | -------------------------------------------------------------------------------- /packages/webui/default.nix: -------------------------------------------------------------------------------- 1 | { vpsadmin-source, vpsadminPath ? }: 2 | pkgs: 3 | import "${vpsadmin-source}/webui" { inherit pkgs; } 4 | -------------------------------------------------------------------------------- /plugins/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /plugins/monitoring/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - Initial release 3 | -------------------------------------------------------------------------------- /plugins/monitoring/api/db/migrate/20230123085900_add_monitored_event_action_state.rb: -------------------------------------------------------------------------------- 1 | class AddMonitoredEventActionState < ActiveRecord::Migration[6.1] 2 | def change 3 | add_column :monitored_events, :action_state, :text, null: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /plugins/monitoring/api/db/migrate/20231105124400_add_monitored_event_alert_count.rb: -------------------------------------------------------------------------------- 1 | class AddMonitoredEventAlertCount < ActiveRecord::Migration[7.0] 2 | def change 3 | add_column :monitored_events, :alert_count, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /plugins/monitoring/api/init.rb: -------------------------------------------------------------------------------- 1 | require_rel 'lib' 2 | require_rel 'models' 3 | require_rel 'resources' 4 | 5 | if defined?(namespace) 6 | # Load tasks only if run by rake 7 | load_rel 'tasks/*.rake' 8 | end 9 | 10 | VpsAdmin::API.load_configurable(:monitoring) 11 | -------------------------------------------------------------------------------- /plugins/monitoring/api/models/monitored_event_log.rb: -------------------------------------------------------------------------------- 1 | class MonitoredEventLog < ApplicationRecord 2 | belongs_to :monitored_event 3 | serialize :value 4 | end 5 | -------------------------------------------------------------------------------- /plugins/monitoring/api/models/monitored_event_state.rb: -------------------------------------------------------------------------------- 1 | class MonitoredEventState < ApplicationRecord 2 | belongs_to :monitored_event 3 | enum :state, MonitoredEvent.states.keys 4 | end 5 | -------------------------------------------------------------------------------- /plugins/monitoring/meta.rb: -------------------------------------------------------------------------------- 1 | VpsAdmin::API::Plugin.register(:monitoring) do 2 | name 'Monitoring' 3 | description 'Monitors resource usage and sends alerts' 4 | version '4.1.0' 5 | author 'Jakub Skokan' 6 | email 'jakub.skokan@vpsfree.cz' 7 | components :api 8 | end 9 | -------------------------------------------------------------------------------- /plugins/newslog/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - No changes 3 | 4 | * Wed Jun 07 2017 - version 2.8.0 5 | - No changes 6 | 7 | * Mon Mar 20 2017 - version 2.7.0 8 | - Initial release 9 | -------------------------------------------------------------------------------- /plugins/newslog/api/models/news_log.rb: -------------------------------------------------------------------------------- 1 | class NewsLog < ApplicationRecord 2 | validates :message, :published_at, presence: true 3 | end 4 | -------------------------------------------------------------------------------- /plugins/newslog/meta.rb: -------------------------------------------------------------------------------- 1 | VpsAdmin::API::Plugin.register(:newslog) do 2 | name 'News log' 3 | description 'Lets admins to announce news' 4 | version '4.1.0' 5 | author 'Jakub Skokan' 6 | email 'jakub.skokan@vpsfree.cz' 7 | components :api 8 | end 9 | -------------------------------------------------------------------------------- /plugins/outage_reports/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - Outage.Create: make short summaries required in all languages 3 | - Replace Outage.Announce, Cancel and Close actions by the Update action 4 | 5 | * Wed Jun 07 2017 - version 2.8.0 6 | - Initial release 7 | -------------------------------------------------------------------------------- /plugins/outage_reports/api/db/migrate/20240124185400_add_auto_resolve.rb: -------------------------------------------------------------------------------- 1 | class AddAutoResolve < ActiveRecord::Migration[7.1] 2 | def change 3 | add_column :outages, :auto_resolve, :boolean, null: false, default: true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /plugins/outage_reports/api/models/outage_export.rb: -------------------------------------------------------------------------------- 1 | class OutageExport < ApplicationRecord 2 | belongs_to :outage 3 | belongs_to :export 4 | belongs_to :user 5 | belongs_to :environment 6 | belongs_to :location 7 | belongs_to :node 8 | end 9 | 10 | class Export 11 | has_many :outage_exports 12 | end 13 | -------------------------------------------------------------------------------- /plugins/outage_reports/api/models/outage_handler.rb: -------------------------------------------------------------------------------- 1 | class OutageHandler < ApplicationRecord 2 | belongs_to :outage 3 | belongs_to :user 4 | 5 | before_validation :set_name 6 | 7 | protected 8 | 9 | def set_name 10 | return if !full_name.nil? && !full_name.empty? 11 | 12 | self.full_name = user.full_name 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /plugins/outage_reports/api/models/outage_user.rb: -------------------------------------------------------------------------------- 1 | class OutageUser < ApplicationRecord 2 | belongs_to :outage 3 | belongs_to :user 4 | end 5 | -------------------------------------------------------------------------------- /plugins/outage_reports/api/models/outage_vps.rb: -------------------------------------------------------------------------------- 1 | class OutageVps < ApplicationRecord 2 | belongs_to :outage 3 | belongs_to :vps 4 | belongs_to :user 5 | belongs_to :environment 6 | belongs_to :location 7 | belongs_to :node 8 | end 9 | 10 | class Vps 11 | has_many :outage_vpses 12 | end 13 | -------------------------------------------------------------------------------- /plugins/outage_reports/utils/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'haveapi-client', '~> 0.8.0' 3 | gem 'highline' 4 | gem 'nokogiri' 5 | -------------------------------------------------------------------------------- /plugins/payments/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - No changes 3 | 4 | * Wed Jun 07 2017 - version 2.8.0 5 | - No changes 6 | 7 | * Mon Mar 20 2017 - version 2.7.0 8 | - Initial release 9 | -------------------------------------------------------------------------------- /plugins/payments/api/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' do 2 | gem 'fio_api' 3 | end 4 | -------------------------------------------------------------------------------- /plugins/payments/api/lib/vpsadmin/api/plugins/payments.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API::Plugins::Payments 2 | def self.register_backend(name, klass) 3 | @backends ||= {} 4 | @backends[name] = klass 5 | end 6 | 7 | def self.get_backend(name) 8 | @backends && @backends[name] 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /plugins/payments/api/lib/vpsadmin/api/plugins/payments/backends/base.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API::Plugins::Payments::Backends 2 | class Base 3 | class << self 4 | def register(name) 5 | VpsAdmin::API::Plugins::Payments.register_backend(name, self) 6 | end 7 | end 8 | 9 | def fetch; end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /plugins/requests/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - No changes 3 | 4 | * Wed Jun 07 2017 - version 2.8.0 5 | - No changes 6 | 7 | * Mon Mar 20 2017 - version 2.7.0 8 | - Initial release 9 | -------------------------------------------------------------------------------- /plugins/requests/api/db/migrate/20170908165000_add_access_token.rb: -------------------------------------------------------------------------------- 1 | class AddAccessToken < ActiveRecord::Migration 2 | def change 3 | add_column :user_requests, :access_token, :string, null: true, limit: 40 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /plugins/requests/api/models/transaction_chains/requests/utils.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API::Plugins::Requests::TransactionChains 2 | module Utils 3 | def message_id(r, mail_id = nil) 4 | format(::SysConfig.get(:plugin_requests, :message_id), id: r.id, mail_id: mail_id || r.last_mail_id) 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /plugins/requests/api/resources/user_request.rb: -------------------------------------------------------------------------------- 1 | module VpsAdmin::API::Resources 2 | class UserRequest < HaveAPI::Resource 3 | singular true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /plugins/requests/mail_templates/request_create_admin/en.plain.erb: -------------------------------------------------------------------------------- 1 | Hi, 2 | 3 | new request #<%= @r.id %> has been created. 4 | 5 | Best regards, 6 | 7 | vpsAdmin 8 | -------------------------------------------------------------------------------- /plugins/requests/mail_templates/request_create_user/en.plain.erb: -------------------------------------------------------------------------------- 1 | Hi, 2 | 3 | this an automated message confirming creation of vpsAdmin Request #<%= @r.id %>. 4 | 5 | Best regards, 6 | 7 | vpsAdmin 8 | -------------------------------------------------------------------------------- /plugins/requests/mail_templates/request_create_user/meta.rb: -------------------------------------------------------------------------------- 1 | template :request_action_role do 2 | label 'Create request (user)' 3 | from 'podpora@vpsfree.cz' 4 | reply_to 'podpora@vpsfree.cz' 5 | return_path 'podpora@vpsfree.cz' 6 | 7 | lang :en do 8 | subject '[vpsAdmin Request #<%= @r.id %> <%= @r.type_name %>] <%= @r.state %>' 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /plugins/requests/mail_templates/request_resolve_admin/en.plain.erb: -------------------------------------------------------------------------------- 1 | Hi, 2 | 3 | request #<%= @r.id %> has been <%= @r.state %>. 4 | 5 | Best regards, 6 | 7 | vpsAdmin 8 | -------------------------------------------------------------------------------- /plugins/requests/mail_templates/request_resolve_user/en.plain.erb: -------------------------------------------------------------------------------- 1 | Hi, 2 | 3 | vpsAdmin Request #<%= @r.id %> has been <%= @r.state %>. 4 | 5 | <% if @r.admin_response %>Reason: <%= @r.admin_response %><% end %> 6 | 7 | Best regards, 8 | 9 | vpsAdmin 10 | -------------------------------------------------------------------------------- /plugins/webui/CHANGELOG: -------------------------------------------------------------------------------- 1 | * Wed Sep 20 2017 - version 2.9.0 2 | - No changes 3 | 4 | * Wed Jun 07 2017 - version 2.8.0 5 | - No changes 6 | 7 | * Mon Mar 20 2017 - version 2.7.0 8 | - Initial release 9 | -------------------------------------------------------------------------------- /plugins/webui/api/models/help_box.rb: -------------------------------------------------------------------------------- 1 | class HelpBox < ApplicationRecord 2 | belongs_to :language 3 | 4 | validates :content, presence: true 5 | end 6 | -------------------------------------------------------------------------------- /plugins/webui/api/models/transaction_chains/mail/daily_report.rb: -------------------------------------------------------------------------------- 1 | TransactionChains::Mail::DailyReport.connect_hook(:send) do |ret, _from, _now| 2 | ret[:base_url] = ::SysConfig.get('webui', 'base_url') 3 | ret 4 | end 5 | -------------------------------------------------------------------------------- /tools/bundix_all.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | for file in ./tools/bundix_*.sh ; do 4 | [ "$file" == "./tools/bundix_all.sh" ] && continue 5 | echo $file 6 | $file 7 | done 8 | -------------------------------------------------------------------------------- /tools/bundix_console_router.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Usage: run from repository root 3 | 4 | set -e 5 | export TMPDIR=/tmp 6 | pushd packages/console-router 7 | rm -f Gemfile.lock 8 | cp -pf ../../console_router/Gemfile . 9 | bundix -l 10 | popd 11 | -------------------------------------------------------------------------------- /tools/bundix_download_mounter.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Usage: run from repository root 3 | 4 | set -e 5 | export TMPDIR=/tmp 6 | pushd packages/download-mounter 7 | rm -f Gemfile.lock 8 | cp -pf ../../download_mounter/Gemfile . 9 | bundix -l 10 | popd 11 | -------------------------------------------------------------------------------- /webui/.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | composer.lock 3 | -------------------------------------------------------------------------------- /webui/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :test do 4 | gem 'rspec' 5 | gem 'selenium-webdriver' 6 | end 7 | -------------------------------------------------------------------------------- /webui/README: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/README -------------------------------------------------------------------------------- /webui/Rakefile: -------------------------------------------------------------------------------- 1 | require 'rspec/core' 2 | require 'rspec/core/rake_task' 3 | 4 | RSpec::Core::RakeTask.new(:spec) do |spec| 5 | spec.pattern = FileList['spec/**/*_spec.rb'] 6 | end 7 | -------------------------------------------------------------------------------- /webui/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "haveapi/client": "0.26.*", 4 | "endroid/qr-code": "4.5.*", 5 | "whichbrowser/parser": ">=2.1 <3.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /webui/js/jquery.tablednd.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/js/jquery.tablednd.js -------------------------------------------------------------------------------- /webui/lang/locale-data/._vpsadmin-sk.po: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale-data/._vpsadmin-sk.po -------------------------------------------------------------------------------- /webui/lang/locale-data/._vpsadmin.po: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale-data/._vpsadmin.po -------------------------------------------------------------------------------- /webui/lang/locale/en/vpsadmin.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale/en/vpsadmin.mo -------------------------------------------------------------------------------- /webui/lang/locale/en_US.utf8/LC_MESSAGES/vpsAdmin.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale/en_US.utf8/LC_MESSAGES/vpsAdmin.mo -------------------------------------------------------------------------------- /webui/lang/locale/sk_SK.utf8/LC_MESSAGES/._vpsAdmin.po: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale/sk_SK.utf8/LC_MESSAGES/._vpsAdmin.po -------------------------------------------------------------------------------- /webui/lang/locale/sk_SK.utf8/LC_MESSAGES/vpsAdmin.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/lang/locale/sk_SK.utf8/LC_MESSAGES/vpsAdmin.mo -------------------------------------------------------------------------------- /webui/lang/scripts/locales-generate: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | for x in langs/*/vpsadmin.po ; do 3 | lang=`echo $x | sed 's@langs/\(.*\)/vpsadmin.po@\1@'` 4 | echo -n "$lang: " 5 | mkdir -p langs-data/$lang/LC_MESSAGES 6 | msgfmt --statistics --check -o langs-data/$lang/LC_MESSAGES/vpsadmin.mo $x 7 | done 8 | -------------------------------------------------------------------------------- /webui/lang/scripts/locales-stats: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | for x in langs/*/vpsadmin.po ; do 3 | lang=`echo $x | sed 's@langs/\(.*\)/vpsadmin.po@\1@'` 4 | echo -n "$lang: " 5 | msgfmt --statistics --check -o - $x > /dev/null 6 | done 7 | -------------------------------------------------------------------------------- /webui/lib/version.lib.php: -------------------------------------------------------------------------------- 1 | perex(_("Access forbidden"), _("You have to log in to be able to access vpsAdmin's functions")); 9 | } 10 | -------------------------------------------------------------------------------- /webui/pages/page_node.php: -------------------------------------------------------------------------------- 1 | sbar_add(_('Back to status'), '?page='); 5 | $xtpl->sbar_out(_('Node')); 6 | 7 | node_details_table($_GET['id']); 8 | 9 | } else { 10 | $xtpl->perex( 11 | _("Access forbidden"), 12 | _("You have to log in to be able to access vpsadmin's functions") 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /webui/template/._ajax_get_transactbox.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/._ajax_get_transactbox.html -------------------------------------------------------------------------------- /webui/template/css/._main.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/css/._main.css -------------------------------------------------------------------------------- /webui/template/css/._scheme.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/css/._scheme.css -------------------------------------------------------------------------------- /webui/template/design/arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/design/arrow.gif -------------------------------------------------------------------------------- /webui/template/design/aside.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/design/aside.gif -------------------------------------------------------------------------------- /webui/template/design/nav.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/design/nav.gif -------------------------------------------------------------------------------- /webui/template/design/section.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/design/section.gif -------------------------------------------------------------------------------- /webui/template/design/ul-style01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/design/ul-style01.gif -------------------------------------------------------------------------------- /webui/template/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/favicon.png -------------------------------------------------------------------------------- /webui/template/icons/backup_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/backup_progress.png -------------------------------------------------------------------------------- /webui/template/icons/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/bug.png -------------------------------------------------------------------------------- /webui/template/icons/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/console.png -------------------------------------------------------------------------------- /webui/template/icons/copy_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/copy_template.png -------------------------------------------------------------------------------- /webui/template/icons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/delete.png -------------------------------------------------------------------------------- /webui/template/icons/delete_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/delete_grey.png -------------------------------------------------------------------------------- /webui/template/icons/draw-arrow-forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/draw-arrow-forward.png -------------------------------------------------------------------------------- /webui/template/icons/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/edit.png -------------------------------------------------------------------------------- /webui/template/icons/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/error.png -------------------------------------------------------------------------------- /webui/template/icons/firewall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/firewall.png -------------------------------------------------------------------------------- /webui/template/icons/firewall_approve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/firewall_approve.png -------------------------------------------------------------------------------- /webui/template/icons/firewall_approve_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/firewall_approve_old.png -------------------------------------------------------------------------------- /webui/template/icons/firewall_flush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/firewall_flush.png -------------------------------------------------------------------------------- /webui/template/icons/firewall_reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/firewall_reload.png -------------------------------------------------------------------------------- /webui/template/icons/heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/heatmap.png -------------------------------------------------------------------------------- /webui/template/icons/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/info.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ad.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ae.png -------------------------------------------------------------------------------- /webui/template/icons/langs/af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/af.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ag.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ai.png -------------------------------------------------------------------------------- /webui/template/icons/langs/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/al.png -------------------------------------------------------------------------------- /webui/template/icons/langs/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/am.png -------------------------------------------------------------------------------- /webui/template/icons/langs/an.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/an.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ao.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ar.png -------------------------------------------------------------------------------- /webui/template/icons/langs/as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/as.png -------------------------------------------------------------------------------- /webui/template/icons/langs/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/at.png -------------------------------------------------------------------------------- /webui/template/icons/langs/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/au.png -------------------------------------------------------------------------------- /webui/template/icons/langs/aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/aw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ax.png -------------------------------------------------------------------------------- /webui/template/icons/langs/az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/az.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ba.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bb.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bd.png -------------------------------------------------------------------------------- /webui/template/icons/langs/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/be.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bi.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bj.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bo.png -------------------------------------------------------------------------------- /webui/template/icons/langs/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/br.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bs.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/by.png -------------------------------------------------------------------------------- /webui/template/icons/langs/bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/bz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ca.png -------------------------------------------------------------------------------- /webui/template/icons/langs/catalonia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/catalonia.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cd.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ch.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ci.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ck.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/co.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cs.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cx.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cy.png -------------------------------------------------------------------------------- /webui/template/icons/langs/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/cz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/de.png -------------------------------------------------------------------------------- /webui/template/icons/langs/dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/dj.png -------------------------------------------------------------------------------- /webui/template/icons/langs/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/dk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/dm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/do.png -------------------------------------------------------------------------------- /webui/template/icons/langs/dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/dz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ec.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ee.png -------------------------------------------------------------------------------- /webui/template/icons/langs/eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/eg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/eh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/england.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/england.png -------------------------------------------------------------------------------- /webui/template/icons/langs/er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/er.png -------------------------------------------------------------------------------- /webui/template/icons/langs/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/es.png -------------------------------------------------------------------------------- /webui/template/icons/langs/et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/et.png -------------------------------------------------------------------------------- /webui/template/icons/langs/europeanunion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/europeanunion.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fam.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fi.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fj.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fo.png -------------------------------------------------------------------------------- /webui/template/icons/langs/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/fr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ga.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gb.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gd.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ge.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gi.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gp.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gq.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gs.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/gy.png -------------------------------------------------------------------------------- /webui/template/icons/langs/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/hk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/hm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/hn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/hr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ht.png -------------------------------------------------------------------------------- /webui/template/icons/langs/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/hu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/id.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ie.png -------------------------------------------------------------------------------- /webui/template/icons/langs/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/il.png -------------------------------------------------------------------------------- /webui/template/icons/langs/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/in.png -------------------------------------------------------------------------------- /webui/template/icons/langs/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/io.png -------------------------------------------------------------------------------- /webui/template/icons/langs/iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/iq.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ir.png -------------------------------------------------------------------------------- /webui/template/icons/langs/is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/is.png -------------------------------------------------------------------------------- /webui/template/icons/langs/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/it.png -------------------------------------------------------------------------------- /webui/template/icons/langs/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/jm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/jo.png -------------------------------------------------------------------------------- /webui/template/icons/langs/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/jp.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ke.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ki.png -------------------------------------------------------------------------------- /webui/template/icons/langs/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/km.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kp.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ky.png -------------------------------------------------------------------------------- /webui/template/icons/langs/kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/kz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/la.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lb.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/li.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ls.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/lv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ly.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ma.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/md.png -------------------------------------------------------------------------------- /webui/template/icons/langs/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/me.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ml.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mo.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mp.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mq.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ms.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mx.png -------------------------------------------------------------------------------- /webui/template/icons/langs/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/my.png -------------------------------------------------------------------------------- /webui/template/icons/langs/mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/mz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/na.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ne.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ng.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ni.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/no.png -------------------------------------------------------------------------------- /webui/template/icons/langs/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/np.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/nz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/om.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pa.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pe.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ph.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ps.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/pw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/py.png -------------------------------------------------------------------------------- /webui/template/icons/langs/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/qa.png -------------------------------------------------------------------------------- /webui/template/icons/langs/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/re.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ro.png -------------------------------------------------------------------------------- /webui/template/icons/langs/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/rs.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ru.png -------------------------------------------------------------------------------- /webui/template/icons/langs/rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/rw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sa.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sb.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/scotland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/scotland.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sd.png -------------------------------------------------------------------------------- /webui/template/icons/langs/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/se.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sh.png -------------------------------------------------------------------------------- /webui/template/icons/langs/si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/si.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sj.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/so.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/st.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sy.png -------------------------------------------------------------------------------- /webui/template/icons/langs/sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/sz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/td.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/th.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tj.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tk.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tl.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/to.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tr.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tv.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tw.png -------------------------------------------------------------------------------- /webui/template/icons/langs/tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/tz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ua.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ug.png -------------------------------------------------------------------------------- /webui/template/icons/langs/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/um.png -------------------------------------------------------------------------------- /webui/template/icons/langs/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/us.png -------------------------------------------------------------------------------- /webui/template/icons/langs/uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/uy.png -------------------------------------------------------------------------------- /webui/template/icons/langs/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/uz.png -------------------------------------------------------------------------------- /webui/template/icons/langs/va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/va.png -------------------------------------------------------------------------------- /webui/template/icons/langs/vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/vc.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ve.png -------------------------------------------------------------------------------- /webui/template/icons/langs/vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/vg.png -------------------------------------------------------------------------------- /webui/template/icons/langs/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/vi.png -------------------------------------------------------------------------------- /webui/template/icons/langs/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/vn.png -------------------------------------------------------------------------------- /webui/template/icons/langs/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/vu.png -------------------------------------------------------------------------------- /webui/template/icons/langs/wales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/wales.png -------------------------------------------------------------------------------- /webui/template/icons/langs/wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/wf.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ws.png -------------------------------------------------------------------------------- /webui/template/icons/langs/ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/ye.png -------------------------------------------------------------------------------- /webui/template/icons/langs/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/yt.png -------------------------------------------------------------------------------- /webui/template/icons/langs/za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/za.png -------------------------------------------------------------------------------- /webui/template/icons/langs/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/zm.png -------------------------------------------------------------------------------- /webui/template/icons/langs/zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/langs/zw.png -------------------------------------------------------------------------------- /webui/template/icons/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/logout.png -------------------------------------------------------------------------------- /webui/template/icons/m_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_add.png -------------------------------------------------------------------------------- /webui/template/icons/m_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_delete.png -------------------------------------------------------------------------------- /webui/template/icons/m_dropadmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_dropadmin.png -------------------------------------------------------------------------------- /webui/template/icons/m_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_edit.png -------------------------------------------------------------------------------- /webui/template/icons/m_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_remove.png -------------------------------------------------------------------------------- /webui/template/icons/m_switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/m_switch.png -------------------------------------------------------------------------------- /webui/template/icons/maintenance_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/maintenance_mode.png -------------------------------------------------------------------------------- /webui/template/icons/server_daemon_offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/server_daemon_offline.png -------------------------------------------------------------------------------- /webui/template/icons/server_online.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/server_online.png -------------------------------------------------------------------------------- /webui/template/icons/server_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/server_warning.png -------------------------------------------------------------------------------- /webui/template/icons/tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/tool.png -------------------------------------------------------------------------------- /webui/template/icons/transact_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/transact_fail.png -------------------------------------------------------------------------------- /webui/template/icons/transact_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/transact_ok.png -------------------------------------------------------------------------------- /webui/template/icons/transact_pending.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/transact_pending.gif -------------------------------------------------------------------------------- /webui/template/icons/vps_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_add.png -------------------------------------------------------------------------------- /webui/template/icons/vps_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_delete.png -------------------------------------------------------------------------------- /webui/template/icons/vps_delete_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_delete_grey.png -------------------------------------------------------------------------------- /webui/template/icons/vps_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_edit.png -------------------------------------------------------------------------------- /webui/template/icons/vps_ip_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_ip_list.png -------------------------------------------------------------------------------- /webui/template/icons/vps_migrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_migrate.png -------------------------------------------------------------------------------- /webui/template/icons/vps_restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_restart.png -------------------------------------------------------------------------------- /webui/template/icons/vps_restart_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_restart_grey.png -------------------------------------------------------------------------------- /webui/template/icons/vps_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_start.png -------------------------------------------------------------------------------- /webui/template/icons/vps_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vps_stop.png -------------------------------------------------------------------------------- /webui/template/icons/vpsadminos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/vpsadminos.png -------------------------------------------------------------------------------- /webui/template/icons/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/icons/warning.png -------------------------------------------------------------------------------- /webui/template/tmp/image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/tmp/image.gif -------------------------------------------------------------------------------- /webui/template/vpsAdmin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpsfreecz/vpsadmin/e6b5a4f0b04bdc71e763fd97e5fc6b040f269966/webui/template/vpsAdmin-logo.png --------------------------------------------------------------------------------