foreman_discovery 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +619 -0
- data/README.md +128 -0
- data/Rakefile +111 -0
- data/app/controllers/discovers_controller.rb +151 -0
- data/app/helpers/discovers_helper.rb +37 -0
- data/app/models/host/discovered.rb +97 -0
- data/app/models/host/managed_extensions.rb +32 -0
- data/app/models/setting/discovered.rb +28 -0
- data/app/overrides/add_build_flag.rb +4 -0
- data/app/views/discovers/_discovers_list.html.erb +54 -0
- data/app/views/discovers/_selected_hosts.html.erb +29 -0
- data/app/views/discovers/index.html.erb +2 -0
- data/app/views/discovers/multiple_destroy.html.erb +5 -0
- data/app/views/discovers/select_multiple_location.html.erb +10 -0
- data/app/views/discovers/select_multiple_organization.html.erb +10 -0
- data/app/views/discovers/show.html.erb +16 -0
- data/config/environment.rb +0 -0
- data/config/initializers/discovery_setup.rb +20 -0
- data/config/routes.rb +26 -0
- data/lib/discovery_home_helper_patch.rb +21 -0
- data/lib/foreman_discovery.rb +4 -0
- data/lib/foreman_discovery/engine.rb +32 -0
- data/lib/foreman_discovery/facts.rb +12 -0
- data/lib/foreman_discovery/version.rb +3 -0
- data/lib/tasks.rake +72 -0
- data/test/foreman_app/CHANGELOG +3969 -0
- data/test/foreman_app/Contributors +94 -0
- data/test/foreman_app/Gemfile +33 -0
- data/test/foreman_app/README.md +17 -0
- data/test/foreman_app/Rakefile +7 -0
- data/test/foreman_app/VERSION +1 -0
- data/test/foreman_app/app/assets/images/Archlinux.png +0 -0
- data/test/foreman_app/app/assets/images/Centos.png +0 -0
- data/test/foreman_app/app/assets/images/Darwin.png +0 -0
- data/test/foreman_app/app/assets/images/Debian.png +0 -0
- data/test/foreman_app/app/assets/images/Fedora.png +0 -0
- data/test/foreman_app/app/assets/images/Redhat.png +0 -0
- data/test/foreman_app/app/assets/images/SLC.png +0 -0
- data/test/foreman_app/app/assets/images/Scientific.png +0 -0
- data/test/foreman_app/app/assets/images/Solaris.png +0 -0
- data/test/foreman_app/app/assets/images/Suse.png +0 -0
- data/test/foreman_app/app/assets/images/Ubuntu.png +0 -0
- data/test/foreman_app/app/assets/images/Windows.png +0 -0
- data/test/foreman_app/app/assets/images/bullet_toggle_plus.png +0 -0
- data/test/foreman_app/app/assets/images/edit-hover.png +0 -0
- data/test/foreman_app/app/assets/images/edit.png +0 -0
- data/test/foreman_app/app/assets/images/false.png +0 -0
- data/test/foreman_app/app/assets/images/foreman.png +0 -0
- data/test/foreman_app/app/assets/images/foreman_background.png +0 -0
- data/test/foreman_app/app/assets/images/foreman_large.png +0 -0
- data/test/foreman_app/app/assets/images/foreman_white.png +0 -0
- data/test/foreman_app/app/assets/images/pie_chart_icon.png +0 -0
- data/test/foreman_app/app/assets/images/pie_overlay.png +0 -0
- data/test/foreman_app/app/assets/images/spinner.gif +0 -0
- data/test/foreman_app/app/assets/images/switch.png +0 -0
- data/test/foreman_app/app/assets/images/toggle_check.png +0 -0
- data/test/foreman_app/app/assets/images/true.png +0 -0
- data/test/foreman_app/app/assets/images/user.jpg +0 -0
- data/test/foreman_app/app/assets/javascripts/application.js +348 -0
- data/test/foreman_app/app/assets/javascripts/charts.js +317 -0
- data/test/foreman_app/app/assets/javascripts/compute_resource.js +120 -0
- data/test/foreman_app/app/assets/javascripts/config_template.js +153 -0
- data/test/foreman_app/app/assets/javascripts/host_checkbox.js +151 -0
- data/test/foreman_app/app/assets/javascripts/host_edit.js +591 -0
- data/test/foreman_app/app/assets/javascripts/lookup_keys.js +184 -0
- data/test/foreman_app/app/assets/javascripts/nfs_visibility.js +33 -0
- data/test/foreman_app/app/assets/javascripts/noVNC.js +47 -0
- data/test/foreman_app/app/assets/javascripts/reports.js +27 -0
- data/test/foreman_app/app/assets/javascripts/spice.js +53 -0
- data/test/foreman_app/app/assets/javascripts/taxonomy.js +18 -0
- data/test/foreman_app/app/assets/javascripts/topbar.js +39 -0
- data/test/foreman_app/app/assets/javascripts/trends.js +10 -0
- data/test/foreman_app/app/assets/stylesheets/application.scss +350 -0
- data/test/foreman_app/app/assets/stylesheets/bootstrap_and_overrides.scss +130 -0
- data/test/foreman_app/app/assets/stylesheets/charts.scss +138 -0
- data/test/foreman_app/app/assets/stylesheets/dashboard.scss +42 -0
- data/test/foreman_app/app/assets/stylesheets/login.scss +77 -0
- data/test/foreman_app/app/assets/stylesheets/topbar.scss +83 -0
- data/test/foreman_app/app/assets/stylesheets/wizard.scss +60 -0
- data/test/foreman_app/app/controllers/api/base_controller.rb +162 -0
- data/test/foreman_app/app/controllers/api/v1/architectures_controller.rb +53 -0
- data/test/foreman_app/app/controllers/api/v1/audits_controller.rb +26 -0
- data/test/foreman_app/app/controllers/api/v1/auth_source_ldaps_controller.rb +72 -0
- data/test/foreman_app/app/controllers/api/v1/base_controller.rb +12 -0
- data/test/foreman_app/app/controllers/api/v1/bookmarks_controller.rb +59 -0
- data/test/foreman_app/app/controllers/api/v1/common_parameters_controller.rb +53 -0
- data/test/foreman_app/app/controllers/api/v1/compute_resources_controller.rb +71 -0
- data/test/foreman_app/app/controllers/api/v1/config_templates_controller.rb +102 -0
- data/test/foreman_app/app/controllers/api/v1/dashboard_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v1/domains_controller.rb +74 -0
- data/test/foreman_app/app/controllers/api/v1/environments_controller.rb +50 -0
- data/test/foreman_app/app/controllers/api/v1/fact_values_controller.rb +23 -0
- data/test/foreman_app/app/controllers/api/v1/home_controller.rb +25 -0
- data/test/foreman_app/app/controllers/api/v1/hostgroups_controller.rb +70 -0
- data/test/foreman_app/app/controllers/api/v1/hosts_controller.rb +113 -0
- data/test/foreman_app/app/controllers/api/v1/images_controller.rb +73 -0
- data/test/foreman_app/app/controllers/api/v1/lookup_keys_controller.rb +63 -0
- data/test/foreman_app/app/controllers/api/v1/media_controller.rb +75 -0
- data/test/foreman_app/app/controllers/api/v1/models_controller.rb +56 -0
- data/test/foreman_app/app/controllers/api/v1/operatingsystems_controller.rb +79 -0
- data/test/foreman_app/app/controllers/api/v1/ptables_controller.rb +55 -0
- data/test/foreman_app/app/controllers/api/v1/puppetclasses_controller.rb +56 -0
- data/test/foreman_app/app/controllers/api/v1/reports_controller.rb +43 -0
- data/test/foreman_app/app/controllers/api/v1/roles_controller.rb +49 -0
- data/test/foreman_app/app/controllers/api/v1/settings_controller.rb +35 -0
- data/test/foreman_app/app/controllers/api/v1/smart_proxies_controller.rb +69 -0
- data/test/foreman_app/app/controllers/api/v1/subnets_controller.rb +77 -0
- data/test/foreman_app/app/controllers/api/v1/template_kinds_controller.rb +14 -0
- data/test/foreman_app/app/controllers/api/v1/usergroups_controller.rb +51 -0
- data/test/foreman_app/app/controllers/api/v1/users_controller.rb +102 -0
- data/test/foreman_app/app/controllers/api/v2/base_controller.rb +12 -0
- data/test/foreman_app/app/controllers/api/v2/compute_resources_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/config_templates_controller.rb +26 -0
- data/test/foreman_app/app/controllers/api/v2/domains_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/environments_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/host_classes_controller.rb +49 -0
- data/test/foreman_app/app/controllers/api/v2/hostgroup_classes_controller.rb +44 -0
- data/test/foreman_app/app/controllers/api/v2/hostgroups_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/locations_controller.rb +9 -0
- data/test/foreman_app/app/controllers/api/v2/media_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/organizations_controller.rb +9 -0
- data/test/foreman_app/app/controllers/api/v2/parameters_controller.rb +131 -0
- data/test/foreman_app/app/controllers/api/v2/puppetclasses_controller.rb +60 -0
- data/test/foreman_app/app/controllers/api/v2/smart_proxies_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/subnets_controller.rb +20 -0
- data/test/foreman_app/app/controllers/api/v2/template_combinations_controller.rb +46 -0
- data/test/foreman_app/app/controllers/api/v2/users_controller.rb +20 -0
- data/test/foreman_app/app/controllers/application_controller.rb +349 -0
- data/test/foreman_app/app/controllers/architectures_controller.rb +51 -0
- data/test/foreman_app/app/controllers/audits_controller.rb +19 -0
- data/test/foreman_app/app/controllers/auth_source_ldaps_controller.rb +49 -0
- data/test/foreman_app/app/controllers/bookmarks_controller.rb +55 -0
- data/test/foreman_app/app/controllers/common_parameters_controller.rb +46 -0
- data/test/foreman_app/app/controllers/compute_resources_controller.rb +103 -0
- data/test/foreman_app/app/controllers/compute_resources_vms_controller.rb +78 -0
- data/test/foreman_app/app/controllers/concerns/api/taxonomy_scope.rb +15 -0
- data/test/foreman_app/app/controllers/concerns/api/v2/taxonomies_controller.rb +99 -0
- data/test/foreman_app/app/controllers/config_templates_controller.rb +105 -0
- data/test/foreman_app/app/controllers/dashboard_controller.rb +21 -0
- data/test/foreman_app/app/controllers/domains_controller.rb +55 -0
- data/test/foreman_app/app/controllers/environments_controller.rb +59 -0
- data/test/foreman_app/app/controllers/fact_values_controller.rb +60 -0
- data/test/foreman_app/app/controllers/facts_controller.rb +25 -0
- data/test/foreman_app/app/controllers/home_controller.rb +37 -0
- data/test/foreman_app/app/controllers/hostgroups_controller.rb +115 -0
- data/test/foreman_app/app/controllers/hosts_controller.rb +570 -0
- data/test/foreman_app/app/controllers/images_controller.rb +57 -0
- data/test/foreman_app/app/controllers/locations_controller.rb +4 -0
- data/test/foreman_app/app/controllers/lookup_keys_controller.rb +60 -0
- data/test/foreman_app/app/controllers/lookup_values_controller.rb +58 -0
- data/test/foreman_app/app/controllers/media_controller.rb +56 -0
- data/test/foreman_app/app/controllers/models_controller.rb +49 -0
- data/test/foreman_app/app/controllers/notices_controller.rb +9 -0
- data/test/foreman_app/app/controllers/operatingsystems_controller.rb +77 -0
- data/test/foreman_app/app/controllers/organizations_controller.rb +4 -0
- data/test/foreman_app/app/controllers/ptables_controller.rb +56 -0
- data/test/foreman_app/app/controllers/puppetclasses_controller.rb +85 -0
- data/test/foreman_app/app/controllers/reports_controller.rb +60 -0
- data/test/foreman_app/app/controllers/roles_controller.rb +78 -0
- data/test/foreman_app/app/controllers/settings_controller.rb +21 -0
- data/test/foreman_app/app/controllers/smart_proxies/autosign_controller.rb +47 -0
- data/test/foreman_app/app/controllers/smart_proxies/puppetca_controller.rb +59 -0
- data/test/foreman_app/app/controllers/smart_proxies_controller.rb +43 -0
- data/test/foreman_app/app/controllers/statistics_controller.rb +27 -0
- data/test/foreman_app/app/controllers/subnets_controller.rb +88 -0
- data/test/foreman_app/app/controllers/tasks_controller.rb +16 -0
- data/test/foreman_app/app/controllers/topbar_sweeper.rb +24 -0
- data/test/foreman_app/app/controllers/trends_controller.rb +56 -0
- data/test/foreman_app/app/controllers/unattended_controller.rb +257 -0
- data/test/foreman_app/app/controllers/usergroups_controller.rb +44 -0
- data/test/foreman_app/app/controllers/users_controller.rb +150 -0
- data/test/foreman_app/app/helpers/application_helper.rb +317 -0
- data/test/foreman_app/app/helpers/architecture_helper.rb +2 -0
- data/test/foreman_app/app/helpers/architectures_helper.rb +2 -0
- data/test/foreman_app/app/helpers/audits_helper.rb +138 -0
- data/test/foreman_app/app/helpers/auth_source_ldaps_helper.rb +8 -0
- data/test/foreman_app/app/helpers/auth_sources_helper.rb +2 -0
- data/test/foreman_app/app/helpers/bookmarks_helper.rb +2 -0
- data/test/foreman_app/app/helpers/common_parameters_helper.rb +22 -0
- data/test/foreman_app/app/helpers/compute_resources_helper.rb +28 -0
- data/test/foreman_app/app/helpers/compute_resources_vms_helper.rb +45 -0
- data/test/foreman_app/app/helpers/config_templates_helper.rb +10 -0
- data/test/foreman_app/app/helpers/dashboard_helper.rb +35 -0
- data/test/foreman_app/app/helpers/domains_helper.rb +3 -0
- data/test/foreman_app/app/helpers/environments_helper.rb +3 -0
- data/test/foreman_app/app/helpers/fact_values_helper.rb +8 -0
- data/test/foreman_app/app/helpers/home_helper.rb +116 -0
- data/test/foreman_app/app/helpers/hostgroups_helper.rb +14 -0
- data/test/foreman_app/app/helpers/hosts_and_hostgroups_helper.rb +99 -0
- data/test/foreman_app/app/helpers/hosts_helper.rb +267 -0
- data/test/foreman_app/app/helpers/images_helper.rb +11 -0
- data/test/foreman_app/app/helpers/layout_helper.rb +214 -0
- data/test/foreman_app/app/helpers/lookup_keys_helper.rb +108 -0
- data/test/foreman_app/app/helpers/media_helper.rb +2 -0
- data/test/foreman_app/app/helpers/medium_helper.rb +2 -0
- data/test/foreman_app/app/helpers/model_helper.rb +2 -0
- data/test/foreman_app/app/helpers/models_helper.rb +2 -0
- data/test/foreman_app/app/helpers/notices_helper.rb +3 -0
- data/test/foreman_app/app/helpers/operatingsystems_helper.rb +40 -0
- data/test/foreman_app/app/helpers/organization_helper.rb +2 -0
- data/test/foreman_app/app/helpers/ptables_helper.rb +2 -0
- data/test/foreman_app/app/helpers/puppetclasses_and_environments_helper.rb +39 -0
- data/test/foreman_app/app/helpers/puppetclasses_helper.rb +16 -0
- data/test/foreman_app/app/helpers/reports_helper.rb +48 -0
- data/test/foreman_app/app/helpers/settings_helper.rb +27 -0
- data/test/foreman_app/app/helpers/smart_proxies/autosign_helper.rb +6 -0
- data/test/foreman_app/app/helpers/smart_proxies/puppetca_helper.rb +20 -0
- data/test/foreman_app/app/helpers/smart_proxies_helper.rb +2 -0
- data/test/foreman_app/app/helpers/statistics_helper.rb +16 -0
- data/test/foreman_app/app/helpers/subnets_helper.rb +9 -0
- data/test/foreman_app/app/helpers/tasks_helper.rb +22 -0
- data/test/foreman_app/app/helpers/taxonomy_helper.rb +107 -0
- data/test/foreman_app/app/helpers/trends_helper.rb +46 -0
- data/test/foreman_app/app/helpers/unattended_helper.rb +16 -0
- data/test/foreman_app/app/helpers/usergroups_helper.rb +2 -0
- data/test/foreman_app/app/helpers/users_helper.rb +21 -0
- data/test/foreman_app/app/models/architecture.rb +23 -0
- data/test/foreman_app/app/models/archlinux.rb +27 -0
- data/test/foreman_app/app/models/auth_source.rb +70 -0
- data/test/foreman_app/app/models/auth_source_internal.rb +17 -0
- data/test/foreman_app/app/models/auth_source_ldap.rb +147 -0
- data/test/foreman_app/app/models/authorization.rb +51 -0
- data/test/foreman_app/app/models/bookmark.rb +30 -0
- data/test/foreman_app/app/models/classification.rb +126 -0
- data/test/foreman_app/app/models/common_parameter.rb +13 -0
- data/test/foreman_app/app/models/compute_resource.rb +232 -0
- data/test/foreman_app/app/models/config_template.rb +172 -0
- data/test/foreman_app/app/models/dashboard.rb +53 -0
- data/test/foreman_app/app/models/debian.rb +47 -0
- data/test/foreman_app/app/models/domain.rb +90 -0
- data/test/foreman_app/app/models/domain_parameter.rb +22 -0
- data/test/foreman_app/app/models/environment.rb +57 -0
- data/test/foreman_app/app/models/environment_class.rb +25 -0
- data/test/foreman_app/app/models/fact_name.rb +17 -0
- data/test/foreman_app/app/models/fact_trend.rb +57 -0
- data/test/foreman_app/app/models/fact_value.rb +83 -0
- data/test/foreman_app/app/models/facts_importer.rb +121 -0
- data/test/foreman_app/app/models/feature.rb +4 -0
- data/test/foreman_app/app/models/foreman_trend.rb +38 -0
- data/test/foreman_app/app/models/group_parameter.rb +22 -0
- data/test/foreman_app/app/models/host.rb +30 -0
- data/test/foreman_app/app/models/host/base.rb +141 -0
- data/test/foreman_app/app/models/host/hostmix.rb +13 -0
- data/test/foreman_app/app/models/host/managed.rb +854 -0
- data/test/foreman_app/app/models/host_class.rb +13 -0
- data/test/foreman_app/app/models/host_common.rb +95 -0
- data/test/foreman_app/app/models/host_mailer.rb +77 -0
- data/test/foreman_app/app/models/host_observer.rb +19 -0
- data/test/foreman_app/app/models/host_parameter.rb +20 -0
- data/test/foreman_app/app/models/host_template_helpers.rb +43 -0
- data/test/foreman_app/app/models/hostext/search.rb +128 -0
- data/test/foreman_app/app/models/hostgroup.rb +159 -0
- data/test/foreman_app/app/models/hostgroup_class.rb +15 -0
- data/test/foreman_app/app/models/image.rb +14 -0
- data/test/foreman_app/app/models/key_pair.rb +5 -0
- data/test/foreman_app/app/models/location.rb +25 -0
- data/test/foreman_app/app/models/log.rb +25 -0
- data/test/foreman_app/app/models/lookup_key.rb +261 -0
- data/test/foreman_app/app/models/lookup_value.rb +61 -0
- data/test/foreman_app/app/models/medium.rb +58 -0
- data/test/foreman_app/app/models/message.rb +19 -0
- data/test/foreman_app/app/models/model.rb +14 -0
- data/test/foreman_app/app/models/nic.rb +61 -0
- data/test/foreman_app/app/models/nic/bmc.rb +22 -0
- data/test/foreman_app/app/models/nic/bootable.rb +31 -0
- data/test/foreman_app/app/models/nic/interface.rb +23 -0
- data/test/foreman_app/app/models/nic/managed.rb +57 -0
- data/test/foreman_app/app/models/notice.rb +36 -0
- data/test/foreman_app/app/models/operatingsystem.rb +196 -0
- data/test/foreman_app/app/models/orchestration.rb +184 -0
- data/test/foreman_app/app/models/orchestration/compute.rb +157 -0
- data/test/foreman_app/app/models/orchestration/dhcp.rb +154 -0
- data/test/foreman_app/app/models/orchestration/dns.rb +130 -0
- data/test/foreman_app/app/models/orchestration/puppetca.rb +79 -0
- data/test/foreman_app/app/models/orchestration/ssh_provision.rb +115 -0
- data/test/foreman_app/app/models/orchestration/tftp.rb +133 -0
- data/test/foreman_app/app/models/organization.rb +24 -0
- data/test/foreman_app/app/models/os_default_template.rb +11 -0
- data/test/foreman_app/app/models/os_parameter.rb +16 -0
- data/test/foreman_app/app/models/parameter.rb +34 -0
- data/test/foreman_app/app/models/ptable.rb +25 -0
- data/test/foreman_app/app/models/puppet_class_importer.rb +269 -0
- data/test/foreman_app/app/models/puppetclass.rb +172 -0
- data/test/foreman_app/app/models/redhat.rb +61 -0
- data/test/foreman_app/app/models/report.rb +356 -0
- data/test/foreman_app/app/models/report_common.rb +52 -0
- data/test/foreman_app/app/models/role.rb +156 -0
- data/test/foreman_app/app/models/setting.rb +174 -0
- data/test/foreman_app/app/models/setting/auth.rb +29 -0
- data/test/foreman_app/app/models/setting/general.rb +27 -0
- data/test/foreman_app/app/models/setting/provisioning.rb +28 -0
- data/test/foreman_app/app/models/setting/puppet.rb +36 -0
- data/test/foreman_app/app/models/smart_proxies/puppet_ca.rb +66 -0
- data/test/foreman_app/app/models/smart_proxy.rb +96 -0
- data/test/foreman_app/app/models/solaris.rb +114 -0
- data/test/foreman_app/app/models/source.rb +18 -0
- data/test/foreman_app/app/models/subnet.rb +146 -0
- data/test/foreman_app/app/models/subnet_domain.rb +12 -0
- data/test/foreman_app/app/models/suse.rb +22 -0
- data/test/foreman_app/app/models/tax_host.rb +181 -0
- data/test/foreman_app/app/models/taxable_taxonomy.rb +14 -0
- data/test/foreman_app/app/models/taxonomix.rb +47 -0
- data/test/foreman_app/app/models/taxonomy.rb +135 -0
- data/test/foreman_app/app/models/template_combination.rb +12 -0
- data/test/foreman_app/app/models/template_kind.rb +6 -0
- data/test/foreman_app/app/models/token.rb +23 -0
- data/test/foreman_app/app/models/trend.rb +22 -0
- data/test/foreman_app/app/models/trend_counter.rb +7 -0
- data/test/foreman_app/app/models/trend_importer.rb +50 -0
- data/test/foreman_app/app/models/user.rb +251 -0
- data/test/foreman_app/app/models/user_fact.rb +26 -0
- data/test/foreman_app/app/models/user_hostgroup.rb +10 -0
- data/test/foreman_app/app/models/user_role.rb +32 -0
- data/test/foreman_app/app/models/usergroup.rb +61 -0
- data/test/foreman_app/app/models/usergroup_member.rb +5 -0
- data/test/foreman_app/app/models/windows.rb +20 -0
- data/test/foreman_app/app/views/api/v1/architectures/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/architectures/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/architectures/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/audits/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/audits/show.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v1/auth_source_ldaps/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/auth_source_ldaps/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/bookmarks/create.json.rabl +2 -0
- data/test/foreman_app/app/views/api/v1/bookmarks/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/bookmarks/show.json.rabl +2 -0
- data/test/foreman_app/app/views/api/v1/bookmarks/update.json.rabl +8 -0
- data/test/foreman_app/app/views/api/v1/common_parameters/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/common_parameters/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/common_parameters/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/ec2.json.rabl +1 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/libvirt.json.rabl +0 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/openstack.json.rabl +1 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/ovirt.json.rabl +1 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/rackspace.json.rabl +1 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/show.json.rabl +8 -0
- data/test/foreman_app/app/views/api/v1/compute_resources/vmware.json.rabl +1 -0
- data/test/foreman_app/app/views/api/v1/config_templates/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/config_templates/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/config_templates/show.json.rabl +11 -0
- data/test/foreman_app/app/views/api/v1/domains/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/domains/show.json.rabl +2 -0
- data/test/foreman_app/app/views/api/v1/environments/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/environments/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/environments/show.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v1/errors/access_denied.json.rabl +4 -0
- data/test/foreman_app/app/views/api/v1/errors/not_found.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/errors/param_error.json.rabl +7 -0
- data/test/foreman_app/app/views/api/v1/errors/route_error.json.rabl +4 -0
- data/test/foreman_app/app/views/api/v1/errors/standard_error.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v1/errors/unauthorized.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/errors/unprocessable_entity.json.rabl +6 -0
- data/test/foreman_app/app/views/api/v1/home/index.json.rabl +24 -0
- data/test/foreman_app/app/views/api/v1/home/status.json.rabl +6 -0
- data/test/foreman_app/app/views/api/v1/hostgroups/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/hostgroups/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/hostgroups/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/hosts/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/hosts/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/hosts/show.json.rabl +12 -0
- data/test/foreman_app/app/views/api/v1/images/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/images/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/lookup_keys/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/lookup_keys/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/media/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/media/show.json.rabl +9 -0
- data/test/foreman_app/app/views/api/v1/models/index.rabl +4 -0
- data/test/foreman_app/app/views/api/v1/models/show.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/operatingsystems/create.json.rabl +4 -0
- data/test/foreman_app/app/views/api/v1/operatingsystems/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/operatingsystems/show.json.rabl +22 -0
- data/test/foreman_app/app/views/api/v1/operatingsystems/update.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/ptables/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/ptables/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/reports/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/reports/show.json.rabl +16 -0
- data/test/foreman_app/app/views/api/v1/roles/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/roles/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/roles/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/settings/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/settings/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/smart_proxies/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/smart_proxies/show.json.rabl +9 -0
- data/test/foreman_app/app/views/api/v1/subnets/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/subnets/index.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v1/subnets/show.json.rabl +17 -0
- data/test/foreman_app/app/views/api/v1/subnets/update.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/template_kinds/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/template_kinds/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/usergroups/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/usergroups/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/users/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v1/users/index.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v1/users/show.json.rabl +13 -0
- data/test/foreman_app/app/views/api/v2/config_templates/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/config_templates/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/config_templates/show.json.rabl +33 -0
- data/test/foreman_app/app/views/api/v2/errors/access_denied.json.rabl +4 -0
- data/test/foreman_app/app/views/api/v2/errors/not_found.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/errors/param_error.json.rabl +7 -0
- data/test/foreman_app/app/views/api/v2/errors/route_error.json.rabl +4 -0
- data/test/foreman_app/app/views/api/v2/errors/standard_error.json.rabl +5 -0
- data/test/foreman_app/app/views/api/v2/errors/unauthorized.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/errors/unprocessable_entity.json.rabl +6 -0
- data/test/foreman_app/app/views/api/v2/parameters/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/parameters/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/parameters/show.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/parameters/update.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/puppetclasses/show.json.rabl +7 -0
- data/test/foreman_app/app/views/api/v2/taxonomies/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/taxonomies/show.json.rabl +7 -0
- data/test/foreman_app/app/views/api/v2/taxonomies/update.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/template_combinations/create.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/template_combinations/index.json.rabl +3 -0
- data/test/foreman_app/app/views/api/v2/template_combinations/show.json.rabl +3 -0
- data/test/foreman_app/app/views/architectures/_form.html.erb +6 -0
- data/test/foreman_app/app/views/architectures/edit.html.erb +3 -0
- data/test/foreman_app/app/views/architectures/index.html.erb +21 -0
- data/test/foreman_app/app/views/architectures/new.html.erb +3 -0
- data/test/foreman_app/app/views/architectures/welcome.html.erb +14 -0
- data/test/foreman_app/app/views/audits/_list.erb +24 -0
- data/test/foreman_app/app/views/audits/index.html.erb +6 -0
- data/test/foreman_app/app/views/audits/show.html.erb +56 -0
- data/test/foreman_app/app/views/auth_source_ldaps/_form.html.erb +23 -0
- data/test/foreman_app/app/views/auth_source_ldaps/edit.html.erb +3 -0
- data/test/foreman_app/app/views/auth_source_ldaps/index.html.erb +22 -0
- data/test/foreman_app/app/views/auth_source_ldaps/new.html.erb +3 -0
- data/test/foreman_app/app/views/auth_source_ldaps/welcome.html.erb +8 -0
- data/test/foreman_app/app/views/bookmarks/_form.html.erb +8 -0
- data/test/foreman_app/app/views/bookmarks/_list.html.erb +7 -0
- data/test/foreman_app/app/views/bookmarks/edit.html.erb +3 -0
- data/test/foreman_app/app/views/bookmarks/index.html.erb +25 -0
- data/test/foreman_app/app/views/bookmarks/new.html.erb +3 -0
- data/test/foreman_app/app/views/bookmarks/welcome.html.erb +8 -0
- data/test/foreman_app/app/views/common/403.html.erb +9 -0
- data/test/foreman_app/app/views/common/404.html.erb +8 -0
- data/test/foreman_app/app/views/common/500.html.erb +19 -0
- data/test/foreman_app/app/views/common/_domain.html.erb +9 -0
- data/test/foreman_app/app/views/common/_domain_subnet.html.erb +10 -0
- data/test/foreman_app/app/views/common/_edit_habtm.erb +20 -0
- data/test/foreman_app/app/views/common/_notice.erb +20 -0
- data/test/foreman_app/app/views/common/_puppetclasses_or_envs_changed.html.erb +32 -0
- data/test/foreman_app/app/views/common/_searchbar.erb +37 -0
- data/test/foreman_app/app/views/common/_show_habtm.html.erb +1 -0
- data/test/foreman_app/app/views/common/os_selection/_architecture.html.erb +9 -0
- data/test/foreman_app/app/views/common/os_selection/_image_details.html.erb +7 -0
- data/test/foreman_app/app/views/common/os_selection/_initial.html.erb +15 -0
- data/test/foreman_app/app/views/common/os_selection/_operatingsystem.html.erb +15 -0
- data/test/foreman_app/app/views/common_parameters/_form.html.erb +6 -0
- data/test/foreman_app/app/views/common_parameters/_inherited_parameters.erb +23 -0
- data/test/foreman_app/app/views/common_parameters/_parameter.erb +14 -0
- data/test/foreman_app/app/views/common_parameters/_parameters.erb +6 -0
- data/test/foreman_app/app/views/common_parameters/_puppetclass_parameter.erb +16 -0
- data/test/foreman_app/app/views/common_parameters/_puppetclasses_parameters.erb +7 -0
- data/test/foreman_app/app/views/common_parameters/_show_parameter.html.erb +5 -0
- data/test/foreman_app/app/views/common_parameters/edit.html.erb +3 -0
- data/test/foreman_app/app/views/common_parameters/index.html.erb +22 -0
- data/test/foreman_app/app/views/common_parameters/new.html.erb +3 -0
- data/test/foreman_app/app/views/compute_resources/_form.html.erb +44 -0
- data/test/foreman_app/app/views/compute_resources/edit.html.erb +3 -0
- data/test/foreman_app/app/views/compute_resources/form/_ec2.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources/form/_libvirt.html.erb +9 -0
- data/test/foreman_app/app/views/compute_resources/form/_openstack.html.erb +9 -0
- data/test/foreman_app/app/views/compute_resources/form/_ovirt.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources/form/_rackspace.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources/form/_vmware.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources/index.html.erb +24 -0
- data/test/foreman_app/app/views/compute_resources/new.html.erb +3 -0
- data/test/foreman_app/app/views/compute_resources/show.html.erb +56 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_ec2.html.erb +10 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_libvirt.html.erb +33 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_openstack.html.erb +9 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_ovirt.html.erb +43 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_rackspace.html.erb +7 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/_vmware.html.erb +37 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/libvirt/_network.html.erb +9 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/libvirt/_volume.html.erb +6 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/ovirt/_network.html.erb +13 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/ovirt/_volume.html.erb +18 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/vmware/_network.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources_vms/form/vmware/_volume.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources_vms/index.html.erb +3 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_ec2.html.erb +25 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_libvirt.html.erb +23 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_openstack.html.erb +23 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_ovirt.html.erb +24 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_rackspace.html.erb +22 -0
- data/test/foreman_app/app/views/compute_resources_vms/index/_vmware.html.erb +27 -0
- data/test/foreman_app/app/views/compute_resources_vms/new.html.erb +9 -0
- data/test/foreman_app/app/views/compute_resources_vms/show.html.erb +8 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_ec2.html.erb +19 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_libvirt.html.erb +53 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_openstack.html.erb +19 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_ovirt.html.erb +47 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_rackspace.html.erb +19 -0
- data/test/foreman_app/app/views/compute_resources_vms/show/_vmware.html.erb +16 -0
- data/test/foreman_app/app/views/config_templates/_combination.html.erb +5 -0
- data/test/foreman_app/app/views/config_templates/_combinations.html.erb +6 -0
- data/test/foreman_app/app/views/config_templates/_diff.erb +14 -0
- data/test/foreman_app/app/views/config_templates/_form.html.erb +94 -0
- data/test/foreman_app/app/views/config_templates/edit.html.erb +3 -0
- data/test/foreman_app/app/views/config_templates/index.html.erb +31 -0
- data/test/foreman_app/app/views/config_templates/new.html.erb +3 -0
- data/test/foreman_app/app/views/dashboard/_status_table.html.erb +32 -0
- data/test/foreman_app/app/views/dashboard/index.html.erb +24 -0
- data/test/foreman_app/app/views/dashboard/welcome.html.erb +118 -0
- data/test/foreman_app/app/views/domains/_form.html.erb +43 -0
- data/test/foreman_app/app/views/domains/edit.html.erb +3 -0
- data/test/foreman_app/app/views/domains/index.html.erb +20 -0
- data/test/foreman_app/app/views/domains/new.html.erb +3 -0
- data/test/foreman_app/app/views/domains/welcome.html.erb +13 -0
- data/test/foreman_app/app/views/environments/_form.html.erb +38 -0
- data/test/foreman_app/app/views/environments/edit.html.erb +3 -0
- data/test/foreman_app/app/views/environments/index.html.erb +27 -0
- data/test/foreman_app/app/views/environments/new.html.erb +3 -0
- data/test/foreman_app/app/views/environments/welcome.html.erb +15 -0
- data/test/foreman_app/app/views/fact_values/index.html.erb +40 -0
- data/test/foreman_app/app/views/fact_values/welcome.html.erb +9 -0
- data/test/foreman_app/app/views/facts/show.html.erb +3 -0
- data/test/foreman_app/app/views/home/_location_dropdown.html.erb +17 -0
- data/test/foreman_app/app/views/home/_org_switcher.html.erb +11 -0
- data/test/foreman_app/app/views/home/_organization_dropdown.html.erb +17 -0
- data/test/foreman_app/app/views/home/_settings.html.erb +22 -0
- data/test/foreman_app/app/views/home/_topbar.html.erb +33 -0
- data/test/foreman_app/app/views/home/_user_dropdown.html.erb +10 -0
- data/test/foreman_app/app/views/host_mailer/_active_hosts.html.erb +30 -0
- data/test/foreman_app/app/views/host_mailer/_link_to_host.html.erb +5 -0
- data/test/foreman_app/app/views/host_mailer/_list.html.erb +13 -0
- data/test/foreman_app/app/views/host_mailer/_nonactive_hosts.html.erb +30 -0
- data/test/foreman_app/app/views/host_mailer/error_state.html.erb +10 -0
- data/test/foreman_app/app/views/host_mailer/summary.html.erb +17 -0
- data/test/foreman_app/app/views/hostgroups/_form.html.erb +69 -0
- data/test/foreman_app/app/views/hostgroups/edit.html.erb +3 -0
- data/test/foreman_app/app/views/hostgroups/index.html.erb +23 -0
- data/test/foreman_app/app/views/hostgroups/new.html.erb +3 -0
- data/test/foreman_app/app/views/hostgroups/welcome.html.erb +20 -0
- data/test/foreman_app/app/views/hosts/_assign_hosts.html.erb +42 -0
- data/test/foreman_app/app/views/hosts/_compute.html.erb +12 -0
- data/test/foreman_app/app/views/hosts/_conflicts.html.erb +28 -0
- data/test/foreman_app/app/views/hosts/_form.html.erb +109 -0
- data/test/foreman_app/app/views/hosts/_interfaces.html.erb +29 -0
- data/test/foreman_app/app/views/hosts/_list.html.erb +47 -0
- data/test/foreman_app/app/views/hosts/_metrics.html.erb +13 -0
- data/test/foreman_app/app/views/hosts/_operating_system.erb +41 -0
- data/test/foreman_app/app/views/hosts/_overview.html.erb +25 -0
- data/test/foreman_app/app/views/hosts/_progress.erb +8 -0
- data/test/foreman_app/app/views/hosts/_provisioning.html.erb +9 -0
- data/test/foreman_app/app/views/hosts/_selected_hosts.html.erb +31 -0
- data/test/foreman_app/app/views/hosts/_taxonomy_import_option.html.erb +2 -0
- data/test/foreman_app/app/views/hosts/_unattended.html.erb +34 -0
- data/test/foreman_app/app/views/hosts/assign_hosts.html.erb +5 -0
- data/test/foreman_app/app/views/hosts/console/log.html.erb +17 -0
- data/test/foreman_app/app/views/hosts/console/spice.html.erb +18 -0
- data/test/foreman_app/app/views/hosts/console/vnc.html.erb +21 -0
- data/test/foreman_app/app/views/hosts/edit.html.erb +7 -0
- data/test/foreman_app/app/views/hosts/index.html.erb +4 -0
- data/test/foreman_app/app/views/hosts/multiple_build.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/multiple_destroy.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/multiple_disable.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/multiple_enable.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/multiple_parameters.html.erb +12 -0
- data/test/foreman_app/app/views/hosts/multiple_puppetrun.html.erb +5 -0
- data/test/foreman_app/app/views/hosts/new.html.erb +3 -0
- data/test/foreman_app/app/views/hosts/query.html.erb +3 -0
- data/test/foreman_app/app/views/hosts/select_multiple_environment.html.erb +8 -0
- data/test/foreman_app/app/views/hosts/select_multiple_hostgroup.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/select_multiple_location.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/select_multiple_organization.html.erb +6 -0
- data/test/foreman_app/app/views/hosts/show.html.erb +55 -0
- data/test/foreman_app/app/views/hosts/storeconfig_klasses.html.erb +12 -0
- data/test/foreman_app/app/views/hosts/update_multiple_parameters.html.erb +18 -0
- data/test/foreman_app/app/views/hosts/welcome.html.erb +10 -0
- data/test/foreman_app/app/views/images/_form.html.erb +16 -0
- data/test/foreman_app/app/views/images/edit.html.erb +3 -0
- data/test/foreman_app/app/views/images/index.html.erb +26 -0
- data/test/foreman_app/app/views/images/new.html.erb +4 -0
- data/test/foreman_app/app/views/layouts/application.html.erb +69 -0
- data/test/foreman_app/app/views/locations/welcome.html.erb +9 -0
- data/test/foreman_app/app/views/lookup_keys/_fields.html.erb +42 -0
- data/test/foreman_app/app/views/lookup_keys/_value.html.erb +6 -0
- data/test/foreman_app/app/views/lookup_keys/edit.html.erb +7 -0
- data/test/foreman_app/app/views/lookup_keys/index.html.erb +22 -0
- data/test/foreman_app/app/views/media/_form.html.erb +53 -0
- data/test/foreman_app/app/views/media/edit.html.erb +3 -0
- data/test/foreman_app/app/views/media/index.html.erb +26 -0
- data/test/foreman_app/app/views/media/new.html.erb +3 -0
- data/test/foreman_app/app/views/media/welcome.html.erb +19 -0
- data/test/foreman_app/app/views/models/_form.html.erb +8 -0
- data/test/foreman_app/app/views/models/edit.html.erb +3 -0
- data/test/foreman_app/app/views/models/index.html.erb +26 -0
- data/test/foreman_app/app/views/models/new.html.erb +3 -0
- data/test/foreman_app/app/views/operatingsystems/_form.html.erb +38 -0
- data/test/foreman_app/app/views/operatingsystems/_template_defaults.html.erb +19 -0
- data/test/foreman_app/app/views/operatingsystems/_templates.html.erb +2 -0
- data/test/foreman_app/app/views/operatingsystems/edit.html.erb +3 -0
- data/test/foreman_app/app/views/operatingsystems/index.html.erb +22 -0
- data/test/foreman_app/app/views/operatingsystems/new.html.erb +3 -0
- data/test/foreman_app/app/views/organizations/welcome.html.erb +14 -0
- data/test/foreman_app/app/views/ptables/_form.html.erb +8 -0
- data/test/foreman_app/app/views/ptables/edit.html.erb +3 -0
- data/test/foreman_app/app/views/ptables/index.html.erb +23 -0
- data/test/foreman_app/app/views/ptables/new.html.erb +3 -0
- data/test/foreman_app/app/views/ptables/welcome.html.erb +52 -0
- data/test/foreman_app/app/views/puppetclasses/_class_parameters.html.erb +16 -0
- data/test/foreman_app/app/views/puppetclasses/_class_selection.html.erb +44 -0
- data/test/foreman_app/app/views/puppetclasses/_classes.html.erb +23 -0
- data/test/foreman_app/app/views/puppetclasses/_classes_parameters.html.erb +14 -0
- data/test/foreman_app/app/views/puppetclasses/_form.html.erb +90 -0
- data/test/foreman_app/app/views/puppetclasses/_selectedClasses.html.erb +4 -0
- data/test/foreman_app/app/views/puppetclasses/edit.html.erb +3 -0
- data/test/foreman_app/app/views/puppetclasses/index.html.erb +33 -0
- data/test/foreman_app/app/views/puppetclasses/new.html.erb +3 -0
- data/test/foreman_app/app/views/puppetclasses/no_route.html.erb +11 -0
- data/test/foreman_app/app/views/reports/_list.html.erb +34 -0
- data/test/foreman_app/app/views/reports/_metrics.html.erb +25 -0
- data/test/foreman_app/app/views/reports/_output.html.erb +13 -0
- data/test/foreman_app/app/views/reports/index.html.erb +3 -0
- data/test/foreman_app/app/views/reports/show.html.erb +37 -0
- data/test/foreman_app/app/views/reports/welcome.html.erb +11 -0
- data/test/foreman_app/app/views/roles/_form.html.erb +28 -0
- data/test/foreman_app/app/views/roles/edit.html.erb +3 -0
- data/test/foreman_app/app/views/roles/index.html.erb +28 -0
- data/test/foreman_app/app/views/roles/new.html.erb +3 -0
- data/test/foreman_app/app/views/roles/report.html.erb +52 -0
- data/test/foreman_app/app/views/settings/index.html.erb +29 -0
- data/test/foreman_app/app/views/smart_proxies/_form.html.erb +38 -0
- data/test/foreman_app/app/views/smart_proxies/autosign/_form.html.erb +9 -0
- data/test/foreman_app/app/views/smart_proxies/autosign/index.html.erb +21 -0
- data/test/foreman_app/app/views/smart_proxies/autosign/new.html.erb +3 -0
- data/test/foreman_app/app/views/smart_proxies/edit.html.erb +3 -0
- data/test/foreman_app/app/views/smart_proxies/index.html.erb +37 -0
- data/test/foreman_app/app/views/smart_proxies/new.html.erb +3 -0
- data/test/foreman_app/app/views/smart_proxies/puppetca/index.html.erb +36 -0
- data/test/foreman_app/app/views/statistics/index.html.erb +5 -0
- data/test/foreman_app/app/views/subnets/_fields.html.erb +17 -0
- data/test/foreman_app/app/views/subnets/_form.html.erb +34 -0
- data/test/foreman_app/app/views/subnets/edit.html.erb +3 -0
- data/test/foreman_app/app/views/subnets/import.html.erb +26 -0
- data/test/foreman_app/app/views/subnets/index.html.erb +28 -0
- data/test/foreman_app/app/views/subnets/new.html.erb +3 -0
- data/test/foreman_app/app/views/tasks/_list.html.erb +5 -0
- data/test/foreman_app/app/views/tasks/show.html.erb +1 -0
- data/test/foreman_app/app/views/taxonomies/_form.html.erb +111 -0
- data/test/foreman_app/app/views/taxonomies/_step1.html.erb +14 -0
- data/test/foreman_app/app/views/taxonomies/_step2.html.erb +18 -0
- data/test/foreman_app/app/views/taxonomies/clone.html.erb +3 -0
- data/test/foreman_app/app/views/taxonomies/edit.html.erb +4 -0
- data/test/foreman_app/app/views/taxonomies/index.html.erb +39 -0
- data/test/foreman_app/app/views/taxonomies/mismatches.html.erb +37 -0
- data/test/foreman_app/app/views/taxonomies/new.html.erb +3 -0
- data/test/foreman_app/app/views/taxonomies/step2.html.erb +3 -0
- data/test/foreman_app/app/views/trends/_fields.html.erb +7 -0
- data/test/foreman_app/app/views/trends/_form.html.erb +9 -0
- data/test/foreman_app/app/views/trends/_hosts.html.erb +13 -0
- data/test/foreman_app/app/views/trends/edit.html.erb +33 -0
- data/test/foreman_app/app/views/trends/index.html.erb +47 -0
- data/test/foreman_app/app/views/trends/new.html.erb +3 -0
- data/test/foreman_app/app/views/trends/show.html.erb +19 -0
- data/test/foreman_app/app/views/unattended/autowaik.xml.erb +2 -0
- data/test/foreman_app/app/views/unattended/autoyast.xml.erb +80 -0
- data/test/foreman_app/app/views/unattended/gpxe_kickstart_config.erb +5 -0
- data/test/foreman_app/app/views/unattended/grubby.erb +9 -0
- data/test/foreman_app/app/views/unattended/jumpstart.html.erb +10 -0
- data/test/foreman_app/app/views/unattended/jumpstart_finish.html.erb +51 -0
- data/test/foreman_app/app/views/unattended/kickstart.html.erb +71 -0
- data/test/foreman_app/app/views/unattended/preseed.html.erb +66 -0
- data/test/foreman_app/app/views/unattended/preseed_finish.html.erb +7 -0
- data/test/foreman_app/app/views/unattended/pxe_autowaik.erb +3 -0
- data/test/foreman_app/app/views/unattended/pxe_autoyast.erb +4 -0
- data/test/foreman_app/app/views/unattended/pxe_debian_config.erb +4 -0
- data/test/foreman_app/app/views/unattended/pxe_default.erb +23 -0
- data/test/foreman_app/app/views/unattended/pxe_jumpstart_config.erb +10 -0
- data/test/foreman_app/app/views/unattended/pxe_kickstart_config.erb +4 -0
- data/test/foreman_app/app/views/unattended/pxe_local.erb +11 -0
- data/test/foreman_app/app/views/unattended/snippets/_epel.erb +15 -0
- data/test/foreman_app/app/views/unattended/snippets/_http_proxy.erb +8 -0
- data/test/foreman_app/app/views/unattended/snippets/_puppet.conf.erb +15 -0
- data/test/foreman_app/app/views/unattended/snippets/_puppet.init.erb +8 -0
- data/test/foreman_app/app/views/unattended/snippets/_redhat_register.erb +67 -0
- data/test/foreman_app/app/views/unattended/snippets/_vmware.erb +62 -0
- data/test/foreman_app/app/views/usergroups/_form.html.erb +7 -0
- data/test/foreman_app/app/views/usergroups/edit.html.erb +3 -0
- data/test/foreman_app/app/views/usergroups/index.html.erb +24 -0
- data/test/foreman_app/app/views/usergroups/new.html.erb +3 -0
- data/test/foreman_app/app/views/users/_filters.html.erb +38 -0
- data/test/foreman_app/app/views/users/_form.html.erb +58 -0
- data/test/foreman_app/app/views/users/_user_fact.html.erb +14 -0
- data/test/foreman_app/app/views/users/edit.html.erb +3 -0
- data/test/foreman_app/app/views/users/index.html.erb +31 -0
- data/test/foreman_app/app/views/users/login.html.erb +22 -0
- data/test/foreman_app/app/views/users/new.html.erb +3 -0
- data/test/foreman_app/bundler.d/Gemfile.local.rb +2 -0
- data/test/foreman_app/bundler.d/assets.rb +12 -0
- data/test/foreman_app/bundler.d/console.rb +5 -0
- data/test/foreman_app/bundler.d/development.rb +17 -0
- data/test/foreman_app/bundler.d/fog.rb +3 -0
- data/test/foreman_app/bundler.d/i18n.rb +5 -0
- data/test/foreman_app/bundler.d/jsonp.rb +3 -0
- data/test/foreman_app/bundler.d/libvirt.rb +3 -0
- data/test/foreman_app/bundler.d/mysql.rb +3 -0
- data/test/foreman_app/bundler.d/mysql2.rb +3 -0
- data/test/foreman_app/bundler.d/openid.rb +3 -0
- data/test/foreman_app/bundler.d/ovirt.rb +3 -0
- data/test/foreman_app/bundler.d/postgresql.rb +3 -0
- data/test/foreman_app/bundler.d/sqlite.rb +3 -0
- data/test/foreman_app/bundler.d/test.rb +17 -0
- data/test/foreman_app/bundler.d/vmware.rb +3 -0
- data/test/foreman_app/config.ru +8 -0
- data/test/foreman_app/config/application.rb +114 -0
- data/test/foreman_app/config/boot.rb +6 -0
- data/test/foreman_app/config/database.yml +22 -0
- data/test/foreman_app/config/database.yml.example +22 -0
- data/test/foreman_app/config/email.yaml.example +9 -0
- data/test/foreman_app/config/environment.rb +5 -0
- data/test/foreman_app/config/environments/development.rb +38 -0
- data/test/foreman_app/config/environments/production.rb +112 -0
- data/test/foreman_app/config/environments/test.rb +42 -0
- data/test/foreman_app/config/ignored_environments.yml.sample +9 -0
- data/test/foreman_app/config/initializers/apipie.rb +71 -0
- data/test/foreman_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/foreman_app/config/initializers/email.rb +17 -0
- data/test/foreman_app/config/initializers/fast_gettext.rb +49 -0
- data/test/foreman_app/config/initializers/foreman.rb +24 -0
- data/test/foreman_app/config/initializers/hostable.rb +3 -0
- data/test/foreman_app/config/initializers/inflections.rb +10 -0
- data/test/foreman_app/config/initializers/local_secret_token.rb.example +10 -0
- data/test/foreman_app/config/initializers/mime_types.rb +6 -0
- data/test/foreman_app/config/initializers/puppet.rb +22 -0
- data/test/foreman_app/config/initializers/rack_openid.rb +8 -0
- data/test/foreman_app/config/initializers/secret_token.rb +15 -0
- data/test/foreman_app/config/initializers/session_store.rb +8 -0
- data/test/foreman_app/config/initializers/will_paginate.rb +27 -0
- data/test/foreman_app/config/initializers/wrap_parameters.rb +13 -0
- data/test/foreman_app/config/locales/README +24 -0
- data/test/foreman_app/config/locales/de.yml +203 -0
- data/test/foreman_app/config/locales/en.yml +205 -0
- data/test/foreman_app/config/locales/es.yml +199 -0
- data/test/foreman_app/config/locales/ja.yml +197 -0
- data/test/foreman_app/config/model.mappings.example +342 -0
- data/test/foreman_app/config/routes.rb +332 -0
- data/test/foreman_app/config/routes/api/apipiedoc.rb +4 -0
- data/test/foreman_app/config/routes/api/v1.rb +65 -0
- data/test/foreman_app/config/routes/api/v2.rb +208 -0
- data/test/foreman_app/config/settings.rb +13 -0
- data/test/foreman_app/config/settings.yaml +18 -0
- data/test/foreman_app/config/settings.yaml.example +17 -0
- data/test/foreman_app/db/migrate/20090714132448_create_hosts.rb +47 -0
- data/test/foreman_app/db/migrate/20090714132449_add_audits_table.rb +27 -0
- data/test/foreman_app/db/migrate/20090715143858_create_architectures.rb +19 -0
- data/test/foreman_app/db/migrate/20090717025820_create_media.rb +19 -0
- data/test/foreman_app/db/migrate/20090718060746_create_domains.rb +15 -0
- data/test/foreman_app/db/migrate/20090718064254_create_subnets.rb +18 -0
- data/test/foreman_app/db/migrate/20090720134126_create_operatingsystems.rb +16 -0
- data/test/foreman_app/db/migrate/20090722140138_create_models.rb +16 -0
- data/test/foreman_app/db/migrate/20090722141107_create_environments.rb +18 -0
- data/test/foreman_app/db/migrate/20090729132209_create_reports.rb +14 -0
- data/test/foreman_app/db/migrate/20090730152224_create_ptables.rb +24 -0
- data/test/foreman_app/db/migrate/20090802062223_create_puppetclasses.rb +26 -0
- data/test/foreman_app/db/migrate/20090804130144_create_parameters.rb +13 -0
- data/test/foreman_app/db/migrate/20090820130541_create_auth_sources.rb +25 -0
- data/test/foreman_app/db/migrate/20090905150131_create_hostgroups.rb +24 -0
- data/test/foreman_app/db/migrate/20090905155444_add_type_to_parameter.rb +9 -0
- data/test/foreman_app/db/migrate/20090907045751_add_domain_to_parameter.rb +10 -0
- data/test/foreman_app/db/migrate/20090915030726_change_report_field_type_to_text.rb +13 -0
- data/test/foreman_app/db/migrate/20090916053824_change_host_build_default_to_false.rb +11 -0
- data/test/foreman_app/db/migrate/20090920043521_add_index_to_host.rb +25 -0
- data/test/foreman_app/db/migrate/20090920064156_add_index_to_parameters.rb +15 -0
- data/test/foreman_app/db/migrate/20090920065522_add_index_to_reports.rb +9 -0
- data/test/foreman_app/db/migrate/20091012135004_create_users.rb +19 -0
- data/test/foreman_app/db/migrate/20091016031017_create_sessions.rb +16 -0
- data/test/foreman_app/db/migrate/20091022054108_add_status_to_report.rb +15 -0
- data/test/foreman_app/db/migrate/20091214045923_calc_existing_reports.rb +19 -0
- data/test/foreman_app/db/migrate/20091219132338_create_lookup_keys.rb +14 -0
- data/test/foreman_app/db/migrate/20091219132839_create_lookup_values.rb +17 -0
- data/test/foreman_app/db/migrate/20100115021803_change_mysql_reports_column.rb +14 -0
- data/test/foreman_app/db/migrate/20100310080727_add_family_to_os.rb +33 -0
- data/test/foreman_app/db/migrate/20100325142616_update_fact_names_and_values_to_bin.rb +15 -0
- data/test/foreman_app/db/migrate/20100414125652_add_releasename_to_os.rb +24 -0
- data/test/foreman_app/db/migrate/20100416124600_create_usergroups.rb +17 -0
- data/test/foreman_app/db/migrate/20100419151910_add_owner_to_hosts.rb +26 -0
- data/test/foreman_app/db/migrate/20100523114430_add_ubuntu_custom_lvm_ptable.rb +67 -0
- data/test/foreman_app/db/migrate/20100523141204_create_media_operatingsystems_and_migrate_data.rb +34 -0
- data/test/foreman_app/db/migrate/20100524080302_migrate_installation_medium_uri.rb +15 -0
- data/test/foreman_app/db/migrate/20100525094200_simplify_parameters.rb +62 -0
- data/test/foreman_app/db/migrate/20100601221000_update_os_minor.rb +13 -0
- data/test/foreman_app/db/migrate/20100616114400_change_family_in_os.rb +50 -0
- data/test/foreman_app/db/migrate/20100625155400_create_notices.rb +21 -0
- data/test/foreman_app/db/migrate/20100628123400_add_internal_auth.rb +33 -0
- data/test/foreman_app/db/migrate/20100629093200_create_roles.rb +23 -0
- data/test/foreman_app/db/migrate/20100701081235_add_user_domains_and_hostgroups.rb +20 -0
- data/test/foreman_app/db/migrate/20100822072954_create_user_facts.rb +18 -0
- data/test/foreman_app/db/migrate/20100823181036_add_enabled_to_hosts.rb +9 -0
- data/test/foreman_app/db/migrate/20100914092104_add_my_booleans_to_user.rb +13 -0
- data/test/foreman_app/db/migrate/20101018120548_create_messages.rb +18 -0
- data/test/foreman_app/db/migrate/20101018120603_create_sources.rb +18 -0
- data/test/foreman_app/db/migrate/20101018120621_create_logs.rb +22 -0
- data/test/foreman_app/db/migrate/20101019122857_add_metrics_to_report.rb +9 -0
- data/test/foreman_app/db/migrate/20101019183859_convert_reports.rb +38 -0
- data/test/foreman_app/db/migrate/20101103150254_add_owned_filter_to_user.rb +9 -0
- data/test/foreman_app/db/migrate/20101118130026_correct_media.rb +35 -0
- data/test/foreman_app/db/migrate/20101121080425_create_config_templates.rb +15 -0
- data/test/foreman_app/db/migrate/20101121135521_create_template_combinations.rb +15 -0
- data/test/foreman_app/db/migrate/20101122132041_create_operatingsystems_config_templates.rb +12 -0
- data/test/foreman_app/db/migrate/20101123152150_create_template_kinds.rb +18 -0
- data/test/foreman_app/db/migrate/20101123153303_create_os_default_templates.rb +15 -0
- data/test/foreman_app/db/migrate/20101125153351_add_default_templates.rb +59 -0
- data/test/foreman_app/db/migrate/20101130093613_add_sub_systems_to_subnet.rb +13 -0
- data/test/foreman_app/db/migrate/20101130100315_create_proxies.rb +13 -0
- data/test/foreman_app/db/migrate/20101202104444_add_proxy_to_domain.rb +11 -0
- data/test/foreman_app/db/migrate/20101213085232_add_grubby_template.rb +15 -0
- data/test/foreman_app/db/migrate/20110117162722_add_host_group_defaults.rb +21 -0
- data/test/foreman_app/db/migrate/20110128130239_add_default_pxe_menu_template.rb +15 -0
- data/test/foreman_app/db/migrate/20110213104226_create_proxy_features.rb +28 -0
- data/test/foreman_app/db/migrate/20110216101848_change_puppetmaster_column.rb +21 -0
- data/test/foreman_app/db/migrate/20110301154453_add_managed_to_hosts.rb +15 -0
- data/test/foreman_app/db/migrate/20110321070954_revert_face_names_and_values_to_text_records.rb +13 -0
- data/test/foreman_app/db/migrate/20110327123639_add_priority_to_parameter.rb +11 -0
- data/test/foreman_app/db/migrate/20110404150043_add_media_path_to_medium.rb +13 -0
- data/test/foreman_app/db/migrate/20110407091150_add_image_to_host.rb +15 -0
- data/test/foreman_app/db/migrate/20110412103238_remove_unused_fields_from_puppet_classes.rb +9 -0
- data/test/foreman_app/db/migrate/20110417102947_add_table_bookmarks.rb +31 -0
- data/test/foreman_app/db/migrate/20110420150600_add_solaris_templates.rb +42 -0
- data/test/foreman_app/db/migrate/20110613141800_add_solaris_disks.rb +16 -0
- data/test/foreman_app/db/migrate/20110616080444_add_look_up_key_id_to_puppet_class.rb +28 -0
- data/test/foreman_app/db/migrate/20110617190131_add_sparc_info_to_model.rb +11 -0
- data/test/foreman_app/db/migrate/20110619130336_add_ancestry_to_hostgroup.rb +11 -0
- data/test/foreman_app/db/migrate/20110628115422_create_settings.rb +18 -0
- data/test/foreman_app/db/migrate/20110712064120_update_audits_table.rb +16 -0
- data/test/foreman_app/db/migrate/20110712070522_create_host_class.rb +11 -0
- data/test/foreman_app/db/migrate/20110725142054_add_suse_templates.rb +46 -0
- data/test/foreman_app/db/migrate/20110801090318_add_vm_defaults_to_hostgroup.rb +9 -0
- data/test/foreman_app/db/migrate/20110803114134_add_subnet_and_domain_to_host_groups.rb +11 -0
- data/test/foreman_app/db/migrate/20111124095053_rename_changes_to_audited_changes.rb +9 -0
- data/test/foreman_app/db/migrate/20111124095054_add_remote_address_to_audits.rb +10 -0
- data/test/foreman_app/db/migrate/20111124095055_rename_parent_to_association.rb +11 -0
- data/test/foreman_app/db/migrate/20111205231500_add_gateway_and_dns_to_subnets.rb +13 -0
- data/test/foreman_app/db/migrate/20111227095806_ensure_all_hostnames_are_lowercase.rb +9 -0
- data/test/foreman_app/db/migrate/20120102071633_add_from_and_to_ranges_to_subnets.rb +13 -0
- data/test/foreman_app/db/migrate/20120110113051_create_subnet_domain.rb +21 -0
- data/test/foreman_app/db/migrate/20120122131037_create_compute_resources.rb +19 -0
- data/test/foreman_app/db/migrate/20120126113850_add_uuid_and_compute_id_to_host.rb +11 -0
- data/test/foreman_app/db/migrate/20120127141602_add_windows_templates.rb +47 -0
- data/test/foreman_app/db/migrate/20120311081257_create_nics.rb +52 -0
- data/test/foreman_app/db/migrate/20120313081913_add_puppet_master_proxy_to_host_and_host_group.rb +41 -0
- data/test/foreman_app/db/migrate/20120502105518_update_report_field_to_large_int.rb +9 -0
- data/test/foreman_app/db/migrate/20120506143325_create_images.rb +18 -0
- data/test/foreman_app/db/migrate/20120509131302_add_cert_name_to_host.rb +12 -0
- data/test/foreman_app/db/migrate/20120510113417_create_key_pairs.rb +15 -0
- data/test/foreman_app/db/migrate/20120521142924_add_dns_id_to_subnet.rb +9 -0
- data/test/foreman_app/db/migrate/20120523065531_add_image_id_to_host.rb +9 -0
- data/test/foreman_app/db/migrate/20120529113900_add_user_compute_resources.rb +14 -0
- data/test/foreman_app/db/migrate/20120529115814_add_compute_resources_boolean_to_user.rb +9 -0
- data/test/foreman_app/db/migrate/20120604114049_add_epel_snippets.rb +10 -0
- data/test/foreman_app/db/migrate/20120607074318_convert_params_to_text.rb +11 -0
- data/test/foreman_app/db/migrate/20120612070100_change_bookmark_column_to_text.rb +10 -0
- data/test/foreman_app/db/migrate/20120613082125_rename_association_to_associated.rb +25 -0
- data/test/foreman_app/db/migrate/20120620124658_fix_auditable_type.rb +9 -0
- data/test/foreman_app/db/migrate/20120620124659_fix_associated_type.rb +9 -0
- data/test/foreman_app/db/migrate/20120621135042_create_taxonomies.rb +14 -0
- data/test/foreman_app/db/migrate/20120623002052_add_ok_hosts_book_mark.rb +13 -0
- data/test/foreman_app/db/migrate/20120624081510_add_auditable_name_and_associated_name_to_audit.rb +29 -0
- data/test/foreman_app/db/migrate/20120624093958_add_os_family_to_media.rb +14 -0
- data/test/foreman_app/db/migrate/20120624094034_add_os_family_to_ptable.rb +17 -0
- data/test/foreman_app/db/migrate/20120705130038_add_attributes_to_compute_resources.rb +9 -0
- data/test/foreman_app/db/migrate/20120824142048_add_some_indexes.rb +23 -0
- data/test/foreman_app/db/migrate/20120905095532_create_environment_classes.rb +16 -0
- data/test/foreman_app/db/migrate/20120905131841_add_lookup_keys_override_and_required.rb +15 -0
- data/test/foreman_app/db/migrate/20120916080843_add_lookup_values_count_to_lookup_keys.rb +9 -0
- data/test/foreman_app/db/migrate/20120916080926_cache_lookup_values_count.rb +8 -0
- data/test/foreman_app/db/migrate/20120921000313_add_iam_role_to_images.rb +9 -0
- data/test/foreman_app/db/migrate/20120921105349_create_tokens.rb +15 -0
- data/test/foreman_app/db/migrate/20120927020752_add_bmc_feature_to_proxy.rb +8 -0
- data/test/foreman_app/db/migrate/20121003172526_add_taxonomy_ids_to_hosts.rb +11 -0
- data/test/foreman_app/db/migrate/20121011115320_change_domain_character_count.rb +9 -0
- data/test/foreman_app/db/migrate/20121012170851_create_trends.rb +25 -0
- data/test/foreman_app/db/migrate/20121012170936_create_trend_counters.rb +16 -0
- data/test/foreman_app/db/migrate/20121015113502_update_media_path_limit.rb +9 -0
- data/test/foreman_app/db/migrate/20121018152459_create_hostgroup_classes.rb +11 -0
- data/test/foreman_app/db/migrate/20121026160433_add_localboot_template.rb +15 -0
- data/test/foreman_app/db/migrate/20121029164911_rename_reply_adress_setting.rb +9 -0
- data/test/foreman_app/db/migrate/20121101141448_add_locations_organizations.rb +12 -0
- data/test/foreman_app/db/migrate/20121118120028_migrate_hypervisors_to_compute_resources.rb +20 -0
- data/test/foreman_app/db/migrate/20121118125341_create_taxable_taxonomies.rb +19 -0
- data/test/foreman_app/db/migrate/20121119102104_add_my_taxonomy_to_user.rb +11 -0
- data/test/foreman_app/db/migrate/20121218084123_change_smart_variable_length.rb +9 -0
- data/test/foreman_app/db/migrate/20121219040534_remove_replay_address_setting.rb +8 -0
- data/test/foreman_app/db/migrate/20130109155024_add_ignore_types_to_taxonomy.rb +9 -0
- data/test/foreman_app/db/migrate/20130121130826_add_digest_to_messages.rb +18 -0
- data/test/foreman_app/db/migrate/20130211160200_add_sti_to_hosts.rb +11 -0
- data/test/foreman_app/db/migrate/20130228145456_add_digest_to_sources.rb +22 -0
- data/test/foreman_app/db/migrate/20130329195742_remove_duplicate_snippets.rb +20 -0
- data/test/foreman_app/db/migrate/20130409081924_add_label_to_host_group.rb +18 -0
- data/test/foreman_app/db/migrate/20130417110127_add_sti_to_settings.rb +17 -0
- data/test/foreman_app/db/migrate/20130418134513_fix_sti_host_auditable_type.rb +9 -0
- data/test/foreman_app/db/migrate/20130419145808_add_id_to_user_hostgroup.rb +9 -0
- data/test/foreman_app/db/schema.rb +746 -0
- data/test/foreman_app/db/seeds.rb +9 -0
- data/test/foreman_app/db/test.sqlite3 +0 -0
- data/test/foreman_app/doc/README_FOR_APP +2 -0
- data/test/foreman_app/doc/apipie_examples.yml +4645 -0
- data/test/foreman_app/extras/changelog +39 -0
- data/test/foreman_app/extras/ci/migration.sh +64 -0
- data/test/foreman_app/extras/ci/setup.sh +19 -0
- data/test/foreman_app/extras/cli/foremancli +210 -0
- data/test/foreman_app/extras/dbmigrate +10 -0
- data/test/foreman_app/extras/foreman-release.spec +41 -0
- data/test/foreman_app/extras/foreman.repo +11 -0
- data/test/foreman_app/extras/git2nightly_snapshot +9 -0
- data/test/foreman_app/extras/git2release +22 -0
- data/test/foreman_app/extras/ignored_environments.yml.sample +10 -0
- data/test/foreman_app/extras/jumpstart/README +2 -0
- data/test/foreman_app/extras/jumpstart/admin +11 -0
- data/test/foreman_app/extras/jumpstart/curl +0 -0
- data/test/foreman_app/extras/jumpstart/curl-license +22 -0
- data/test/foreman_app/extras/jumpstart/curl.i386 +0 -0
- data/test/foreman_app/extras/jumpstart/curl.sparc +0 -0
- data/test/foreman_app/extras/jumpstart/dynamic_finish +18 -0
- data/test/foreman_app/extras/jumpstart/dynamic_profile +17 -0
- data/test/foreman_app/extras/jumpstart/nsswitch.conf +34 -0
- data/test/foreman_app/extras/jumpstart/rules +1 -0
- data/test/foreman_app/extras/jumpstart/rules.ok +2 -0
- data/test/foreman_app/extras/jumpstart/sysidcfg/sysidcfg_primary/sysidcfg +12 -0
- data/test/foreman_app/extras/noVNC/websockify.py +5 -0
- data/test/foreman_app/extras/noVNC/websockify/__init__.py +2 -0
- data/test/foreman_app/extras/noVNC/websockify/websocket.py +982 -0
- data/test/foreman_app/extras/noVNC/websockify/websocketproxy.py +393 -0
- data/test/foreman_app/extras/packaging/rpm/rel-eng/comps/comps-foreman-fedora18.xml +76 -0
- data/test/foreman_app/extras/packaging/rpm/rel-eng/comps/comps-foreman-rhel6.xml +115 -0
- data/test/foreman_app/extras/packaging/rpm/rel-eng/packages/foreman +1 -0
- data/test/foreman_app/extras/packaging/rpm/rel-eng/releasers.conf +59 -0
- data/test/foreman_app/extras/packaging/rpm/rel-eng/tito.props +3 -0
- data/test/foreman_app/extras/packaging/rpm/sources/0001-rubygem-actionmailer-fix-dep-versions.patch +19 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.cron.d +27 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.init +154 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.logrotate +10 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.repo +11 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.spec-devel.patch +55 -0
- data/test/foreman_app/extras/packaging/rpm/sources/foreman.sysconfig +21 -0
- data/test/foreman_app/extras/query/ssh_using_foreman +136 -0
- data/test/foreman_app/extras/rdoc/rdoc_prepare_script.rb +51 -0
- data/test/foreman_app/foreman.spec +621 -0
- data/test/foreman_app/lib/api/api_responder.rb +17 -0
- data/test/foreman_app/lib/api/authorization.rb +78 -0
- data/test/foreman_app/lib/api/version1.rb +7 -0
- data/test/foreman_app/lib/api/version2.rb +7 -0
- data/test/foreman_app/lib/api_constraints.rb +15 -0
- data/test/foreman_app/lib/audit_extensions.rb +63 -0
- data/test/foreman_app/lib/core_extensions.rb +100 -0
- data/test/foreman_app/lib/fog_extensions.rb +45 -0
- data/test/foreman_app/lib/fog_extensions/aws/flavor.rb +9 -0
- data/test/foreman_app/lib/fog_extensions/aws/server.rb +18 -0
- data/test/foreman_app/lib/fog_extensions/libvirt/server.rb +24 -0
- data/test/foreman_app/lib/fog_extensions/model.rb +27 -0
- data/test/foreman_app/lib/fog_extensions/openstack/flavor.rb +13 -0
- data/test/foreman_app/lib/fog_extensions/openstack/server.rb +40 -0
- data/test/foreman_app/lib/fog_extensions/ovirt/server.rb +15 -0
- data/test/foreman_app/lib/fog_extensions/ovirt/volume.rb +11 -0
- data/test/foreman_app/lib/fog_extensions/vsphere/folder.rb +14 -0
- data/test/foreman_app/lib/fog_extensions/vsphere/mini_server.rb +20 -0
- data/test/foreman_app/lib/fog_extensions/vsphere/mini_servers.rb +22 -0
- data/test/foreman_app/lib/fog_extensions/vsphere/server.rb +19 -0
- data/test/foreman_app/lib/foreman.rb +14 -0
- data/test/foreman_app/lib/foreman/access_control.rb +120 -0
- data/test/foreman_app/lib/foreman/access_permissions.rb +572 -0
- data/test/foreman_app/lib/foreman/controller.rb +2 -0
- data/test/foreman_app/lib/foreman/controller/auto_complete_search.rb +23 -0
- data/test/foreman_app/lib/foreman/controller/environments.rb +36 -0
- data/test/foreman_app/lib/foreman/controller/host_details.rb +69 -0
- data/test/foreman_app/lib/foreman/controller/smart_proxy_auth.rb +68 -0
- data/test/foreman_app/lib/foreman/controller/taxonomies_controller.rb +178 -0
- data/test/foreman_app/lib/foreman/controller/taxonomy_multiple.rb +56 -0
- data/test/foreman_app/lib/foreman/default_data/loader.rb +166 -0
- data/test/foreman_app/lib/foreman/exception.rb +37 -0
- data/test/foreman_app/lib/foreman/importer_puppetclass.rb +48 -0
- data/test/foreman_app/lib/foreman/model.rb +2 -0
- data/test/foreman_app/lib/foreman/model/ec2.rb +128 -0
- data/test/foreman_app/lib/foreman/model/libvirt.rb +150 -0
- data/test/foreman_app/lib/foreman/model/openstack.rb +130 -0
- data/test/foreman_app/lib/foreman/model/ovirt.rb +250 -0
- data/test/foreman_app/lib/foreman/model/rackspace.rb +108 -0
- data/test/foreman_app/lib/foreman/model/vmware.rb +181 -0
- data/test/foreman_app/lib/foreman/provision.rb +3 -0
- data/test/foreman_app/lib/foreman/provision/ssh.rb +102 -0
- data/test/foreman_app/lib/foreman/renderer.rb +68 -0
- data/test/foreman_app/lib/foreman/sti.rb +30 -0
- data/test/foreman_app/lib/foreman/thread_session.rb +163 -0
- data/test/foreman_app/lib/foreman/util.rb +25 -0
- data/test/foreman_app/lib/foreman/wrapped_exception.rb +23 -0
- data/test/foreman_app/lib/net.rb +50 -0
- data/test/foreman_app/lib/net/dhcp.rb +6 -0
- data/test/foreman_app/lib/net/dhcp/record.rb +56 -0
- data/test/foreman_app/lib/net/dhcp/sparc_record.rb +25 -0
- data/test/foreman_app/lib/net/dns.rb +78 -0
- data/test/foreman_app/lib/net/dns/a_record.rb +47 -0
- data/test/foreman_app/lib/net/dns/ptr_record.rb +52 -0
- data/test/foreman_app/lib/net/validations.rb +47 -0
- data/test/foreman_app/lib/orchestration/queue.rb +58 -0
- data/test/foreman_app/lib/proxy_api.rb +6 -0
- data/test/foreman_app/lib/proxy_api/bmc.rb +120 -0
- data/test/foreman_app/lib/proxy_api/dhcp.rb +70 -0
- data/test/foreman_app/lib/proxy_api/dns.rb +26 -0
- data/test/foreman_app/lib/proxy_api/features.rb +12 -0
- data/test/foreman_app/lib/proxy_api/puppet.rb +28 -0
- data/test/foreman_app/lib/proxy_api/puppetca.rb +38 -0
- data/test/foreman_app/lib/proxy_api/resource.rb +90 -0
- data/test/foreman_app/lib/proxy_api/tftp.rb +54 -0
- data/test/foreman_app/lib/puppet_setting.rb +69 -0
- data/test/foreman_app/lib/regexp_extensions.rb +14 -0
- data/test/foreman_app/lib/sso.rb +13 -0
- data/test/foreman_app/lib/sso/apache.rb +16 -0
- data/test/foreman_app/lib/sso/base.rb +27 -0
- data/test/foreman_app/lib/sso/signo.rb +60 -0
- data/test/foreman_app/lib/task.rb +39 -0
- data/test/foreman_app/lib/tasks/convert.rake +127 -0
- data/test/foreman_app/lib/tasks/exception.rake +32 -0
- data/test/foreman_app/lib/tasks/gettext.rake +9 -0
- data/test/foreman_app/lib/tasks/hosts.rake +67 -0
- data/test/foreman_app/lib/tasks/jenkins.rake +19 -0
- data/test/foreman_app/lib/tasks/load_default_data.rake +16 -0
- data/test/foreman_app/lib/tasks/locale.rake +43 -0
- data/test/foreman_app/lib/tasks/model.rake +83 -0
- data/test/foreman_app/lib/tasks/patches.rake +19 -0
- data/test/foreman_app/lib/tasks/pkg.rake +19 -0
- data/test/foreman_app/lib/tasks/puppet.rake +178 -0
- data/test/foreman_app/lib/tasks/reports.rake +82 -0
- data/test/foreman_app/lib/tasks/reset_permissions.rake +20 -0
- data/test/foreman_app/lib/tasks/security.rake +21 -0
- data/test/foreman_app/lib/tasks/smartproxy.rake +58 -0
- data/test/foreman_app/lib/tasks/test_api_dir.rake +10 -0
- data/test/foreman_app/lib/tasks/test_lib_dir.rake +14 -0
- data/test/foreman_app/lib/tasks/trends.rake +32 -0
- data/test/foreman_app/lib/timed_cached_store.rb +55 -0
- data/test/foreman_app/lib/ws_proxy.rb +78 -0
- data/test/foreman_app/locale/Makefile +54 -0
- data/test/foreman_app/locale/README +26 -0
- data/test/foreman_app/locale/de/foreman.po +4477 -0
- data/test/foreman_app/locale/en/foreman.po +4198 -0
- data/test/foreman_app/locale/es/foreman.po +4494 -0
- data/test/foreman_app/locale/foreman.pot +4198 -0
- data/test/foreman_app/locale/ja/foreman.po +4215 -0
- data/test/foreman_app/locale/model_attributes.rb +442 -0
- data/test/foreman_app/log/test.log +36021 -0
- data/test/foreman_app/public/404.html +26 -0
- data/test/foreman_app/public/422.html +26 -0
- data/test/foreman_app/public/500.html +26 -0
- data/test/foreman_app/public/blank.html +33 -0
- data/test/foreman_app/public/favicon.ico +0 -0
- data/test/foreman_app/public/robots.txt +5 -0
- data/test/foreman_app/script/foreman-config +147 -0
- data/test/foreman_app/script/performance/benchmarker +3 -0
- data/test/foreman_app/script/performance/profiler +3 -0
- data/test/foreman_app/script/rails +6 -0
- data/test/foreman_app/script/show-missing-rails-locales.sh +25 -0
- data/test/foreman_app/script/update-rails-locales.sh +16 -0
- data/test/foreman_app/test/fixtures/architectures.yml +10 -0
- data/test/foreman_app/test/fixtures/audits.yml +18 -0
- data/test/foreman_app/test/fixtures/auth_sources.yml +20 -0
- data/test/foreman_app/test/fixtures/bookmarks.yml +13 -0
- data/test/foreman_app/test/fixtures/brslc022.facts.yaml +68 -0
- data/test/foreman_app/test/fixtures/compute_resources.yml +28 -0
- data/test/foreman_app/test/fixtures/config_templates.yml +47 -0
- data/test/foreman_app/test/fixtures/domains.yml +18 -0
- data/test/foreman_app/test/fixtures/environment_classes.yml +15 -0
- data/test/foreman_app/test/fixtures/environments.yml +10 -0
- data/test/foreman_app/test/fixtures/fact_names.yml +5 -0
- data/test/foreman_app/test/fixtures/fact_values.yml +11 -0
- data/test/foreman_app/test/fixtures/features.yml +23 -0
- data/test/foreman_app/test/fixtures/host_classes.yml +9 -0
- data/test/foreman_app/test/fixtures/hostgroup_classes.yml +9 -0
- data/test/foreman_app/test/fixtures/hostgroups.yml +24 -0
- data/test/foreman_app/test/fixtures/hosts.yml +198 -0
- data/test/foreman_app/test/fixtures/images.yml +16 -0
- data/test/foreman_app/test/fixtures/key_pairs.yml +7 -0
- data/test/foreman_app/test/fixtures/logs.yml +11 -0
- data/test/foreman_app/test/fixtures/lookup_keys.yml +32 -0
- data/test/foreman_app/test/fixtures/media.yml +25 -0
- data/test/foreman_app/test/fixtures/messages.yml +7 -0
- data/test/foreman_app/test/fixtures/models.yml +10 -0
- data/test/foreman_app/test/fixtures/notices.yml +7 -0
- data/test/foreman_app/test/fixtures/operatingsystems.yml +49 -0
- data/test/foreman_app/test/fixtures/os_default_templates.yml +21 -0
- data/test/foreman_app/test/fixtures/parameters.yml +30 -0
- data/test/foreman_app/test/fixtures/ptables.yml +17 -0
- data/test/foreman_app/test/fixtures/puppetclasses.yml +13 -0
- data/test/foreman_app/test/fixtures/report-2.6.12-noops.yaml +627 -0
- data/test/foreman_app/test/fixtures/report-2.6.5-errors.yaml +60 -0
- data/test/foreman_app/test/fixtures/report-2.6.5.yaml +413 -0
- data/test/foreman_app/test/fixtures/report-3.0.1.yaml +283 -0
- data/test/foreman_app/test/fixtures/report-applied.yaml +86 -0
- data/test/foreman_app/test/fixtures/report-empty.yaml +31 -0
- data/test/foreman_app/test/fixtures/report-errors.yaml +66 -0
- data/test/foreman_app/test/fixtures/report-skipped.yaml +86 -0
- data/test/foreman_app/test/fixtures/reports.yml +13 -0
- data/test/foreman_app/test/fixtures/roles.yml +198 -0
- data/test/foreman_app/test/fixtures/sample_http_preseed_template +66 -0
- data/test/foreman_app/test/fixtures/sample_tokenised_template +66 -0
- data/test/foreman_app/test/fixtures/settings.yml +176 -0
- data/test/foreman_app/test/fixtures/smart_proxies.yml +23 -0
- data/test/foreman_app/test/fixtures/sources.yml +7 -0
- data/test/foreman_app/test/fixtures/subnet_domains.yml +9 -0
- data/test/foreman_app/test/fixtures/subnets.yml +26 -0
- data/test/foreman_app/test/fixtures/taxable_taxonomies.yml +15 -0
- data/test/foreman_app/test/fixtures/taxonomies.yml +15 -0
- data/test/foreman_app/test/fixtures/template_combinations.yml +19 -0
- data/test/foreman_app/test/fixtures/template_kinds.yml +14 -0
- data/test/foreman_app/test/fixtures/trend_counters.yml +9 -0
- data/test/foreman_app/test/fixtures/trends.yml +9 -0
- data/test/foreman_app/test/fixtures/trends_controller_test.rb +8 -0
- data/test/foreman_app/test/fixtures/user_facts.yml +7 -0
- data/test/foreman_app/test/fixtures/usergroups.yml +7 -0
- data/test/foreman_app/test/fixtures/users.yml +52 -0
- data/test/foreman_app/test/functional/api/v1/architectures_controller_test.rb +79 -0
- data/test/foreman_app/test/functional/api/v1/audits_controller_test.rb +20 -0
- data/test/foreman_app/test/functional/api/v1/auth_source_ldaps_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/bookmarks_controller_test.rb +60 -0
- data/test/foreman_app/test/functional/api/v1/common_parameters_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/compute_resources_controller_test.rb +50 -0
- data/test/foreman_app/test/functional/api/v1/config_templates_controller_test.rb +82 -0
- data/test/foreman_app/test/functional/api/v1/dashboard_controller_test.rb +12 -0
- data/test/foreman_app/test/functional/api/v1/domains_controller_test.rb +50 -0
- data/test/foreman_app/test/functional/api/v1/environments_controller_test.rb +40 -0
- data/test/foreman_app/test/functional/api/v1/fact_values_controller_test.rb +19 -0
- data/test/foreman_app/test/functional/api/v1/home_controller_test.rb +11 -0
- data/test/foreman_app/test/functional/api/v1/hostgroups_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/hosts_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/api/v1/images_controller_test.rb +47 -0
- data/test/foreman_app/test/functional/api/v1/lookup_keys_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/media_controller_test.rb +48 -0
- data/test/foreman_app/test/functional/api/v1/models_controller_test.rb +43 -0
- data/test/foreman_app/test/functional/api/v1/operatingsystems_controller_test.rb +55 -0
- data/test/foreman_app/test/functional/api/v1/ptables_controller_test.rb +48 -0
- data/test/foreman_app/test/functional/api/v1/puppetclasses_controller_test.rb +40 -0
- data/test/foreman_app/test/functional/api/v1/reports_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/api/v1/roles_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/settings_controller_test.rb +25 -0
- data/test/foreman_app/test/functional/api/v1/smart_proxies_controller_test.rb +72 -0
- data/test/foreman_app/test/functional/api/v1/subnets_controller_test.rb +58 -0
- data/test/foreman_app/test/functional/api/v1/template_kinds_controller_test.rb +11 -0
- data/test/foreman_app/test/functional/api/v1/usergroups_controller_test.rb +41 -0
- data/test/foreman_app/test/functional/api/v1/users_controller_test.rb +137 -0
- data/test/foreman_app/test/functional/api/v2/config_templates_controller_test.rb +80 -0
- data/test/foreman_app/test/functional/api/v2/domains_controller_test.rb +32 -0
- data/test/foreman_app/test/functional/api/v2/host_classes_controller_test.rb +29 -0
- data/test/foreman_app/test/functional/api/v2/hostgroup_class_controller_test.rb +29 -0
- data/test/foreman_app/test/functional/api/v2/locations_controller_test.rb +85 -0
- data/test/foreman_app/test/functional/api/v2/parameters_controller_test.rb +180 -0
- data/test/foreman_app/test/functional/api/v2/puppetclasses_controller_test.rb +103 -0
- data/test/foreman_app/test/functional/api/v2/template_combinations_controller_test.rb +38 -0
- data/test/foreman_app/test/functional/architectures_controller_test.rb +97 -0
- data/test/foreman_app/test/functional/audits_controller_test.rb +29 -0
- data/test/foreman_app/test/functional/auth_source_ldaps_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/bookmarks_controller_test.rb +51 -0
- data/test/foreman_app/test/functional/common_parameters_controller_test.rb +69 -0
- data/test/foreman_app/test/functional/compute_resources_controller_test.rb +157 -0
- data/test/foreman_app/test/functional/compute_resources_vms_controller_test.rb +160 -0
- data/test/foreman_app/test/functional/config_templates_controller_test.rb +132 -0
- data/test/foreman_app/test/functional/dashboard_controller_test.rb +38 -0
- data/test/foreman_app/test/functional/domains_controller_test.rb +101 -0
- data/test/foreman_app/test/functional/environments_controller_test.rb +234 -0
- data/test/foreman_app/test/functional/fact_values_controller_test.rb +138 -0
- data/test/foreman_app/test/functional/facts_controller_test.rb +12 -0
- data/test/foreman_app/test/functional/home_controller_test.rb +9 -0
- data/test/foreman_app/test/functional/hostgroups_controller_test.rb +125 -0
- data/test/foreman_app/test/functional/hosts_controller_test.rb +830 -0
- data/test/foreman_app/test/functional/images_controller_test.rb +55 -0
- data/test/foreman_app/test/functional/locations_controller_test.rb +149 -0
- data/test/foreman_app/test/functional/lookup_keys_controller_test.rb +43 -0
- data/test/foreman_app/test/functional/lookup_values_controller_test.rb +8 -0
- data/test/foreman_app/test/functional/media_controller_test.rb +95 -0
- data/test/foreman_app/test/functional/models_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/notices_controller_test.rb +36 -0
- data/test/foreman_app/test/functional/operatingsystems_controller_test.rb +104 -0
- data/test/foreman_app/test/functional/organizations_controller_test.rb +148 -0
- data/test/foreman_app/test/functional/ptables_controller_test.rb +142 -0
- data/test/foreman_app/test/functional/puppetclasses_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/reports_controller_test.rb +191 -0
- data/test/foreman_app/test/functional/roles_controller_test.rb +124 -0
- data/test/foreman_app/test/functional/settings_controller_test.rb +34 -0
- data/test/foreman_app/test/functional/smart_proxies/autosign_controller_test.rb +8 -0
- data/test/foreman_app/test/functional/smart_proxies/puppetca_controller_test.rb +8 -0
- data/test/foreman_app/test/functional/smart_proxies_controller_test.rb +85 -0
- data/test/foreman_app/test/functional/statistics_controller_test.rb +21 -0
- data/test/foreman_app/test/functional/subnets_controller_test.rb +89 -0
- data/test/foreman_app/test/functional/tasks_controller_test.rb +8 -0
- data/test/foreman_app/test/functional/unattended_controller_test.rb +141 -0
- data/test/foreman_app/test/functional/usergroups_controller_test.rb +66 -0
- data/test/foreman_app/test/functional/users_controller_test.rb +147 -0
- data/test/foreman_app/test/lib/foreman/access_permissions_test.rb +50 -0
- data/test/foreman_app/test/lib/foreman/default_settings/loader_test.rb +39 -0
- data/test/foreman_app/test/lib/foreman/model/ovirt_test.rb +72 -0
- data/test/foreman_app/test/lib/foreman/renderer_test.rb +32 -0
- data/test/foreman_app/test/lib/foreman/util_test.rb +40 -0
- data/test/foreman_app/test/lib/net/dhcp_test.rb +39 -0
- data/test/foreman_app/test/lib/net/net_test.rb +21 -0
- data/test/foreman_app/test/lib/net/validations_test.rb +19 -0
- data/test/foreman_app/test/lib/proxy_api/bmc_test.rb +256 -0
- data/test/foreman_app/test/lib/proxy_api/dhcp_test.rb +60 -0
- data/test/foreman_app/test/lib/puppet_setting_test.rb +92 -0
- data/test/foreman_app/test/performance/browsing_test.rb +9 -0
- data/test/foreman_app/test/test_helper.rb +164 -0
- data/test/foreman_app/test/unit/architecture_test.rb +106 -0
- data/test/foreman_app/test/unit/auth_source_ldap_test.rb +205 -0
- data/test/foreman_app/test/unit/auth_source_test.rb +34 -0
- data/test/foreman_app/test/unit/bookmark_test.rb +32 -0
- data/test/foreman_app/test/unit/classification_test.rb +46 -0
- data/test/foreman_app/test/unit/common_parameter_test.rb +100 -0
- data/test/foreman_app/test/unit/compute_resource_test.rb +88 -0
- data/test/foreman_app/test/unit/config_template_test.rb +67 -0
- data/test/foreman_app/test/unit/domain_parameter_test.rb +106 -0
- data/test/foreman_app/test/unit/domain_test.rb +161 -0
- data/test/foreman_app/test/unit/environment_class_test.rb +9 -0
- data/test/foreman_app/test/unit/environment_test.rb +35 -0
- data/test/foreman_app/test/unit/fact_value_test.rb +25 -0
- data/test/foreman_app/test/unit/facts.yml +91 -0
- data/test/foreman_app/test/unit/facts_importer_test.rb +50 -0
- data/test/foreman_app/test/unit/facts_with_caps.yml +91 -0
- data/test/foreman_app/test/unit/feature_test.rb +8 -0
- data/test/foreman_app/test/unit/group_parameter_test.rb +108 -0
- data/test/foreman_app/test/unit/helpers/architecture_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/audit_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/auth_sources_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/bookmarks_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/compute_resources_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/dashboard_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/domain_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/environments_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/fact_values_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/home_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/host_groups_helper_test.rb +14 -0
- data/test/foreman_app/test/unit/helpers/hosts_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/images_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/lookup_keys_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/medium_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/model_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/operatingsystem_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/parameters_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/ptables_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/puppetclasses_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/reports_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/smart_proxies/autosign_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/smart_proxies/puppetca_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/statistics_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/tasks_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/trends_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/unattended_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/usergroups_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/helpers/users_helper_test.rb +4 -0
- data/test/foreman_app/test/unit/host_class_test.rb +8 -0
- data/test/foreman_app/test/unit/host_mailer_test.rb +70 -0
- data/test/foreman_app/test/unit/host_observer_test.rb +35 -0
- data/test/foreman_app/test/unit/host_parameter_test.rb +119 -0
- data/test/foreman_app/test/unit/host_test.rb +606 -0
- data/test/foreman_app/test/unit/hostgroup_class_test.rb +11 -0
- data/test/foreman_app/test/unit/hostgroup_test.rb +178 -0
- data/test/foreman_app/test/unit/image_test.rb +5 -0
- data/test/foreman_app/test/unit/key_pair_test.rb +4 -0
- data/test/foreman_app/test/unit/location_test.rb +162 -0
- data/test/foreman_app/test/unit/log_test.rb +8 -0
- data/test/foreman_app/test/unit/lookup_key_test.rb +88 -0
- data/test/foreman_app/test/unit/medium_test.rb +120 -0
- data/test/foreman_app/test/unit/message_test.rb +8 -0
- data/test/foreman_app/test/unit/model_test.rb +90 -0
- data/test/foreman_app/test/unit/nic_test.rb +49 -0
- data/test/foreman_app/test/unit/notice_test.rb +19 -0
- data/test/foreman_app/test/unit/operatingsystem_test.rb +139 -0
- data/test/foreman_app/test/unit/orchestration/dhcp_test.rb +161 -0
- data/test/foreman_app/test/unit/orchestration/dns_test.rb +54 -0
- data/test/foreman_app/test/unit/orchestration/pxe_local_template +11 -0
- data/test/foreman_app/test/unit/orchestration/pxe_template +4 -0
- data/test/foreman_app/test/unit/orchestration/tftp_test.rb +49 -0
- data/test/foreman_app/test/unit/orchestration_test.rb +25 -0
- data/test/foreman_app/test/unit/organization_test.rb +163 -0
- data/test/foreman_app/test/unit/os_default_template_test.rb +8 -0
- data/test/foreman_app/test/unit/parameter_test.rb +44 -0
- data/test/foreman_app/test/unit/ptable_test.rb +119 -0
- data/test/foreman_app/test/unit/puppet_class_importer_test.rb +67 -0
- data/test/foreman_app/test/unit/puppetclass_test.rb +90 -0
- data/test/foreman_app/test/unit/report_test.rb +196 -0
- data/test/foreman_app/test/unit/role_test.rb +104 -0
- data/test/foreman_app/test/unit/setting_test.rb +158 -0
- data/test/foreman_app/test/unit/smart_proxy_test.rb +27 -0
- data/test/foreman_app/test/unit/source_test.rb +8 -0
- data/test/foreman_app/test/unit/sso.rb +26 -0
- data/test/foreman_app/test/unit/sso/apache_test.rb +38 -0
- data/test/foreman_app/test/unit/sso/base_test.rb +14 -0
- data/test/foreman_app/test/unit/sso/signo_test.rb +81 -0
- data/test/foreman_app/test/unit/subnet_domain_test.rb +8 -0
- data/test/foreman_app/test/unit/subnet_test.rb +182 -0
- data/test/foreman_app/test/unit/suse_test.rb +46 -0
- data/test/foreman_app/test/unit/taxable_taxonomy_test.rb +8 -0
- data/test/foreman_app/test/unit/template_combination_test.rb +8 -0
- data/test/foreman_app/test/unit/template_kind_test.rb +8 -0
- data/test/foreman_app/test/unit/token_test.rb +67 -0
- data/test/foreman_app/test/unit/trend_counter_test.rb +8 -0
- data/test/foreman_app/test/unit/trend_test.rb +8 -0
- data/test/foreman_app/test/unit/user_fact_test.rb +8 -0
- data/test/foreman_app/test/unit/user_test.rb +196 -0
- data/test/foreman_app/test/unit/usergroup_test.rb +161 -0
- data/test/foreman_app/tmp/cache/505/030/idle_timeout +1 -0
- data/test/foreman_app/tmp/cache/505/C00/use_gravatar +1 -0
- data/test/foreman_app/tmp/cache/7D9/CD0/email_reply_address +1 -0
- data/test/foreman_app/tmp/cache/94D/A30/discovery_organization +1 -0
- data/test/foreman_app/tmp/cache/ACF/DB0/authorize_login_delegation +1 -0
- data/test/foreman_app/tmp/secret_token +1 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.eot +0 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.svg +470 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.ttf +0 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.woff +0 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.eot +0 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.svg +470 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.ttf +0 -0
- data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.woff +0 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/ace.js +10 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/cockpit.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/ext-static_highlight.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/ext-textarea.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/keybinding-emacs.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/keybinding-vim.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/mode-diff.js +165 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/mode-ruby.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/mode-sh.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/theme-clouds.js +137 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/theme-dawn.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/theme-textmate.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/theme-twilight.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/worker-coffee.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/worker-css.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/worker-javascript.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/worker-json.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/ace/worker-xquery.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/background-size.htc +7 -0
- data/test/foreman_app/vendor/assets/javascripts/diff.js +296 -0
- data/test/foreman_app/vendor/assets/javascripts/flot.js +5 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.cookie.js +91 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.dataTables.bootstrap-paging.js +101 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.dataTables.min.js +155 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.jeditable.js +556 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.jnotify.js +209 -0
- data/test/foreman_app/vendor/assets/javascripts/jquery.multi-select.js +503 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/base64.js +147 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/des.js +273 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/display.js +700 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/input.js +1911 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/jsunzip.js +668 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/logo.js +1 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/playback.js +90 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/rfb.js +1846 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/ui.js +649 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/util.js +303 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/README.txt +109 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/swfobject.js +4 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/web_socket.js +341 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/websock.js +356 -0
- data/test/foreman_app/vendor/assets/javascripts/noVNC/webutil.js +148 -0
- data/test/foreman_app/vendor/assets/javascripts/vendor.js +7 -0
- data/test/foreman_app/vendor/assets/stylesheets/jquery.jnotify.css +97 -0
- data/test/foreman_app/vendor/assets/stylesheets/multi-select.scss +126 -0
- data/test/foreman_app/vendor/assets/stylesheets/vendor.css +3 -0
- data/test/functional/discovers_controller_test.rb +40 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/facts.yml +91 -0
- data/test/unit/host_discovered_test.rb +23 -0
- data/test/unit/setting_discovered_test.rb +9 -0
- metadata +2816 -0
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
COPYRIGHT AND PERMISSION NOTICE
|
2
|
+
|
3
|
+
Copyright (c) 1996 - 2011, Daniel Stenberg, <daniel@haxx.se>.
|
4
|
+
|
5
|
+
All rights reserved.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and distribute this software for any purpose
|
8
|
+
with or without fee is hereby granted, provided that the above copyright
|
9
|
+
notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
12
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
13
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
14
|
+
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
15
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
16
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
17
|
+
OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
Except as contained in this notice, the name of a copyright holder shall not
|
20
|
+
be used in advertising or otherwise to promote the sale, use or other dealings
|
21
|
+
in this Software without prior written authorization of the copyright holder.
|
22
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
cd $SI_CONFIG_DIR
|
3
|
+
arch=`uname -p`
|
4
|
+
foreman=foreman
|
5
|
+
# We load the finish script into the logs directory so as to leave a record
|
6
|
+
./curl.$arch -s http://$foreman/unattended/finish > /a/var/sadm/system/logs/puppet.postinstall
|
7
|
+
# Copy the working nsswitch and resolv.conf into the new server's etc directory
|
8
|
+
cp /etc/nsswitch.conf /a/etc
|
9
|
+
cp /etc/resolv.conf /a/etc
|
10
|
+
# Copy the mnttab into the new server's etc directory so we can use pkgadd to install OpenCSW
|
11
|
+
cp /etc/mnttab /a/etc/mnttab
|
12
|
+
# Copy the admin file into the new servers tmp directory
|
13
|
+
cp -p ./admin /a/tmp
|
14
|
+
# Make a working curl available
|
15
|
+
echo "Copying ./curl.$arch /a/tmp/curl"
|
16
|
+
cp -p ./curl.$arch /a/tmp/curl
|
17
|
+
# Now execute the downloaded finish script in the new root context
|
18
|
+
chroot /a /bin/sh /var/sadm/system/logs/puppet.postinstall
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
cd $SI_CONFIG_DIR
|
3
|
+
# Lets setup the DNS with values retrieved from DHCP
|
4
|
+
hostname=`hostname`
|
5
|
+
dnsdomain=`/sbin/dhcpinfo 15`
|
6
|
+
dnsservers=`/sbin/dhcpinfo 6`
|
7
|
+
arch=`uname -p`
|
8
|
+
echo "domain $dnsdomain" >> /etc/resolv.conf
|
9
|
+
for i in $dnsservers
|
10
|
+
do
|
11
|
+
echo "nameserver $i" >> /etc/resolv.conf
|
12
|
+
done
|
13
|
+
perl -p -i -e "s/hosts:.*/hosts: files dns/" /tmp/root/etc/nsswitch.conf
|
14
|
+
# and then download our configuration from foreman
|
15
|
+
foreman="foreman"
|
16
|
+
./curl.$arch -s http://$foreman/unattended/provision > ${SI_PROFILE}
|
17
|
+
exit 0
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# /etc/nsswitch.conf
|
3
|
+
#
|
4
|
+
# "hosts: files dns
|
5
|
+
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.
|
6
|
+
|
7
|
+
# the following two lines obviate the "+" entry in /etc/passwd and /etc/group.
|
8
|
+
passwd: files ldap
|
9
|
+
group: files ldap
|
10
|
+
|
11
|
+
hosts: files dns
|
12
|
+
networks: ldap [NOTFOUND=return] files
|
13
|
+
protocols: ldap [NOTFOUND=return] files
|
14
|
+
rpc: ldap [NOTFOUND=return] files
|
15
|
+
ethers: ldap [NOTFOUND=return] files
|
16
|
+
netmasks: ldap [NOTFOUND=return] files
|
17
|
+
bootparams: files [NOTFOUND=return] ldap
|
18
|
+
publickey: ldap [NOTFOUND=return] files
|
19
|
+
#ipnodes: files
|
20
|
+
|
21
|
+
netgroup: ldap
|
22
|
+
automount: ldap files
|
23
|
+
aliases: files ldap
|
24
|
+
|
25
|
+
# for efficient getservbyname() avoid ldap
|
26
|
+
services: files ldap
|
27
|
+
sendmailvars: files
|
28
|
+
|
29
|
+
printers: ldap user files
|
30
|
+
#auth_attr: files
|
31
|
+
#prof_attr: files
|
32
|
+
#project: files
|
33
|
+
|
34
|
+
# EOF
|
@@ -0,0 +1 @@
|
|
1
|
+
any - dynamic_profile = dynamic_finish
|
@@ -0,0 +1,12 @@
|
|
1
|
+
system_locale=C
|
2
|
+
network_interface=primary{ dhcp protocol_ipv6=no }
|
3
|
+
security_policy=none
|
4
|
+
timezone=GMT
|
5
|
+
terminal=vt100
|
6
|
+
timeserver=localhost
|
7
|
+
name_service=none
|
8
|
+
nfs4_domain=default
|
9
|
+
#root_password=test1234
|
10
|
+
root_password=eAMxlivHbTMtQ
|
11
|
+
auto_reg=disable
|
12
|
+
keyboard=US-English
|
@@ -0,0 +1,982 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
'''
|
4
|
+
Python WebSocket library with support for "wss://" encryption.
|
5
|
+
Copyright 2011 Joel Martin
|
6
|
+
Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3)
|
7
|
+
|
8
|
+
Supports following protocol versions:
|
9
|
+
- http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75
|
10
|
+
- http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
|
11
|
+
- http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10
|
12
|
+
|
13
|
+
You can make a cert/key with openssl using:
|
14
|
+
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
|
15
|
+
as taken from http://docs.python.org/dev/library/ssl.html#certificates
|
16
|
+
|
17
|
+
'''
|
18
|
+
|
19
|
+
import os, sys, time, errno, signal, socket, traceback, select
|
20
|
+
import array, struct
|
21
|
+
from base64 import b64encode, b64decode
|
22
|
+
|
23
|
+
# Imports that vary by python version
|
24
|
+
|
25
|
+
# python 3.0 differences
|
26
|
+
if sys.hexversion > 0x3000000:
|
27
|
+
b2s = lambda buf: buf.decode('latin_1')
|
28
|
+
s2b = lambda s: s.encode('latin_1')
|
29
|
+
s2a = lambda s: s
|
30
|
+
else:
|
31
|
+
b2s = lambda buf: buf # No-op
|
32
|
+
s2b = lambda s: s # No-op
|
33
|
+
s2a = lambda s: [ord(c) for c in s]
|
34
|
+
try: from io import StringIO
|
35
|
+
except: from cStringIO import StringIO
|
36
|
+
try: from http.server import SimpleHTTPRequestHandler
|
37
|
+
except: from SimpleHTTPServer import SimpleHTTPRequestHandler
|
38
|
+
|
39
|
+
# python 2.6 differences
|
40
|
+
try: from hashlib import md5, sha1
|
41
|
+
except: from md5 import md5; from sha import sha as sha1
|
42
|
+
|
43
|
+
# python 2.5 differences
|
44
|
+
try:
|
45
|
+
from struct import pack, unpack_from
|
46
|
+
except:
|
47
|
+
from struct import pack
|
48
|
+
def unpack_from(fmt, buf, offset=0):
|
49
|
+
slice = buffer(buf, offset, struct.calcsize(fmt))
|
50
|
+
return struct.unpack(fmt, slice)
|
51
|
+
|
52
|
+
# Degraded functionality if these imports are missing
|
53
|
+
for mod, sup in [('numpy', 'HyBi protocol'), ('ssl', 'TLS/SSL/wss'),
|
54
|
+
('multiprocessing', 'Multi-Processing'),
|
55
|
+
('resource', 'daemonizing')]:
|
56
|
+
try:
|
57
|
+
globals()[mod] = __import__(mod)
|
58
|
+
except ImportError:
|
59
|
+
globals()[mod] = None
|
60
|
+
print("WARNING: no '%s' module, %s is slower or disabled" % (
|
61
|
+
mod, sup))
|
62
|
+
if multiprocessing and sys.platform == 'win32':
|
63
|
+
# make sockets pickle-able/inheritable
|
64
|
+
import multiprocessing.reduction
|
65
|
+
|
66
|
+
|
67
|
+
class WebSocketServer(object):
|
68
|
+
"""
|
69
|
+
WebSockets server class.
|
70
|
+
Must be sub-classed with new_client method definition.
|
71
|
+
"""
|
72
|
+
|
73
|
+
buffer_size = 65536
|
74
|
+
|
75
|
+
|
76
|
+
server_handshake_hixie = """HTTP/1.1 101 Web Socket Protocol Handshake\r
|
77
|
+
Upgrade: WebSocket\r
|
78
|
+
Connection: Upgrade\r
|
79
|
+
%sWebSocket-Origin: %s\r
|
80
|
+
%sWebSocket-Location: %s://%s%s\r
|
81
|
+
"""
|
82
|
+
|
83
|
+
server_handshake_hybi = """HTTP/1.1 101 Switching Protocols\r
|
84
|
+
Upgrade: websocket\r
|
85
|
+
Connection: Upgrade\r
|
86
|
+
Sec-WebSocket-Accept: %s\r
|
87
|
+
"""
|
88
|
+
|
89
|
+
GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
|
90
|
+
|
91
|
+
policy_response = """<cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>\n"""
|
92
|
+
|
93
|
+
# An exception before the WebSocket connection was established
|
94
|
+
class EClose(Exception):
|
95
|
+
pass
|
96
|
+
|
97
|
+
# An exception while the WebSocket client was connected
|
98
|
+
class CClose(Exception):
|
99
|
+
pass
|
100
|
+
|
101
|
+
def __init__(self, listen_host='', listen_port=None, source_is_ipv6=False,
|
102
|
+
verbose=False, cert='', key='', ssl_only=None,
|
103
|
+
daemon=False, record='', web='',
|
104
|
+
run_once=False, timeout=0, idle_timeout=0):
|
105
|
+
|
106
|
+
# settings
|
107
|
+
self.verbose = verbose
|
108
|
+
self.listen_host = listen_host
|
109
|
+
self.listen_port = listen_port
|
110
|
+
self.prefer_ipv6 = source_is_ipv6
|
111
|
+
self.ssl_only = ssl_only
|
112
|
+
self.daemon = daemon
|
113
|
+
self.run_once = run_once
|
114
|
+
self.timeout = timeout
|
115
|
+
self.idle_timeout = idle_timeout
|
116
|
+
|
117
|
+
self.launch_time = time.time()
|
118
|
+
self.ws_connection = False
|
119
|
+
self.handler_id = 1
|
120
|
+
|
121
|
+
# Make paths settings absolute
|
122
|
+
self.cert = os.path.abspath(cert)
|
123
|
+
self.key = self.web = self.record = ''
|
124
|
+
if key:
|
125
|
+
self.key = os.path.abspath(key)
|
126
|
+
if web:
|
127
|
+
self.web = os.path.abspath(web)
|
128
|
+
if record:
|
129
|
+
self.record = os.path.abspath(record)
|
130
|
+
|
131
|
+
if self.web:
|
132
|
+
os.chdir(self.web)
|
133
|
+
|
134
|
+
# Sanity checks
|
135
|
+
if not ssl and self.ssl_only:
|
136
|
+
raise Exception("No 'ssl' module and SSL-only specified")
|
137
|
+
if self.daemon and not resource:
|
138
|
+
raise Exception("Module 'resource' required to daemonize")
|
139
|
+
|
140
|
+
# Show configuration
|
141
|
+
print("WebSocket server settings:")
|
142
|
+
print(" - Listen on %s:%s" % (
|
143
|
+
self.listen_host, self.listen_port))
|
144
|
+
print(" - Flash security policy server")
|
145
|
+
if self.web:
|
146
|
+
print(" - Web server. Web root: %s" % self.web)
|
147
|
+
if ssl:
|
148
|
+
if os.path.exists(self.cert):
|
149
|
+
print(" - SSL/TLS support")
|
150
|
+
if self.ssl_only:
|
151
|
+
print(" - Deny non-SSL/TLS connections")
|
152
|
+
else:
|
153
|
+
print(" - No SSL/TLS support (no cert file)")
|
154
|
+
else:
|
155
|
+
print(" - No SSL/TLS support (no 'ssl' module)")
|
156
|
+
if self.daemon:
|
157
|
+
print(" - Backgrounding (daemon)")
|
158
|
+
if self.record:
|
159
|
+
print(" - Recording to '%s.*'" % self.record)
|
160
|
+
|
161
|
+
#
|
162
|
+
# WebSocketServer static methods
|
163
|
+
#
|
164
|
+
|
165
|
+
@staticmethod
|
166
|
+
def socket(host, port=None, connect=False, prefer_ipv6=False, unix_socket=None, use_ssl=False):
|
167
|
+
""" Resolve a host (and optional port) to an IPv4 or IPv6
|
168
|
+
address. Create a socket. Bind to it if listen is set,
|
169
|
+
otherwise connect to it. Return the socket.
|
170
|
+
"""
|
171
|
+
flags = 0
|
172
|
+
if host == '':
|
173
|
+
host = None
|
174
|
+
if connect and not (port or unix_socket):
|
175
|
+
raise Exception("Connect mode requires a port")
|
176
|
+
if use_ssl and not ssl:
|
177
|
+
raise Exception("SSL socket requested but Python SSL module not loaded.");
|
178
|
+
if not connect and use_ssl:
|
179
|
+
raise Exception("SSL only supported in connect mode (for now)")
|
180
|
+
if not connect:
|
181
|
+
flags = flags | socket.AI_PASSIVE
|
182
|
+
|
183
|
+
if not unix_socket:
|
184
|
+
addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM,
|
185
|
+
socket.IPPROTO_TCP, flags)
|
186
|
+
if not addrs:
|
187
|
+
raise Exception("Could not resolve host '%s'" % host)
|
188
|
+
addrs.sort(key=lambda x: x[0])
|
189
|
+
if prefer_ipv6:
|
190
|
+
addrs.reverse()
|
191
|
+
sock = socket.socket(addrs[0][0], addrs[0][1])
|
192
|
+
if connect:
|
193
|
+
sock.connect(addrs[0][4])
|
194
|
+
if use_ssl:
|
195
|
+
sock = ssl.wrap_socket(sock)
|
196
|
+
else:
|
197
|
+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
198
|
+
sock.bind(addrs[0][4])
|
199
|
+
sock.listen(100)
|
200
|
+
else:
|
201
|
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
202
|
+
sock.connect(unix_socket)
|
203
|
+
|
204
|
+
return sock
|
205
|
+
|
206
|
+
@staticmethod
|
207
|
+
def daemonize(keepfd=None, chdir='/'):
|
208
|
+
os.umask(0)
|
209
|
+
if chdir:
|
210
|
+
os.chdir(chdir)
|
211
|
+
else:
|
212
|
+
os.chdir('/')
|
213
|
+
os.setgid(os.getgid()) # relinquish elevations
|
214
|
+
os.setuid(os.getuid()) # relinquish elevations
|
215
|
+
|
216
|
+
# Double fork to daemonize
|
217
|
+
if os.fork() > 0: os._exit(0) # Parent exits
|
218
|
+
os.setsid() # Obtain new process group
|
219
|
+
if os.fork() > 0: os._exit(0) # Parent exits
|
220
|
+
|
221
|
+
# Signal handling
|
222
|
+
def terminate(a,b): os._exit(0)
|
223
|
+
signal.signal(signal.SIGTERM, terminate)
|
224
|
+
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
225
|
+
|
226
|
+
# Close open files
|
227
|
+
maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
|
228
|
+
if maxfd == resource.RLIM_INFINITY: maxfd = 256
|
229
|
+
for fd in reversed(range(maxfd)):
|
230
|
+
try:
|
231
|
+
if fd != keepfd:
|
232
|
+
os.close(fd)
|
233
|
+
except OSError:
|
234
|
+
_, exc, _ = sys.exc_info()
|
235
|
+
if exc.errno != errno.EBADF: raise
|
236
|
+
|
237
|
+
# Redirect I/O to /dev/null
|
238
|
+
os.dup2(os.open(os.devnull, os.O_RDWR), sys.stdin.fileno())
|
239
|
+
os.dup2(os.open(os.devnull, os.O_RDWR), sys.stdout.fileno())
|
240
|
+
os.dup2(os.open(os.devnull, os.O_RDWR), sys.stderr.fileno())
|
241
|
+
|
242
|
+
@staticmethod
|
243
|
+
def unmask(buf, hlen, plen):
|
244
|
+
pstart = hlen + 4
|
245
|
+
pend = pstart + plen
|
246
|
+
if numpy:
|
247
|
+
b = c = s2b('')
|
248
|
+
if plen >= 4:
|
249
|
+
mask = numpy.frombuffer(buf, dtype=numpy.dtype('<u4'),
|
250
|
+
offset=hlen, count=1)
|
251
|
+
data = numpy.frombuffer(buf, dtype=numpy.dtype('<u4'),
|
252
|
+
offset=pstart, count=int(plen / 4))
|
253
|
+
#b = numpy.bitwise_xor(data, mask).data
|
254
|
+
b = numpy.bitwise_xor(data, mask).tostring()
|
255
|
+
|
256
|
+
if plen % 4:
|
257
|
+
#print("Partial unmask")
|
258
|
+
mask = numpy.frombuffer(buf, dtype=numpy.dtype('B'),
|
259
|
+
offset=hlen, count=(plen % 4))
|
260
|
+
data = numpy.frombuffer(buf, dtype=numpy.dtype('B'),
|
261
|
+
offset=pend - (plen % 4),
|
262
|
+
count=(plen % 4))
|
263
|
+
c = numpy.bitwise_xor(data, mask).tostring()
|
264
|
+
return b + c
|
265
|
+
else:
|
266
|
+
# Slower fallback
|
267
|
+
mask = buf[hlen:hlen+4]
|
268
|
+
data = array.array('B')
|
269
|
+
mask = s2a(mask)
|
270
|
+
data.fromstring(buf[pstart:pend])
|
271
|
+
for i in range(len(data)):
|
272
|
+
data[i] ^= mask[i % 4]
|
273
|
+
return data.tostring()
|
274
|
+
|
275
|
+
@staticmethod
|
276
|
+
def encode_hybi(buf, opcode, base64=False):
|
277
|
+
""" Encode a HyBi style WebSocket frame.
|
278
|
+
Optional opcode:
|
279
|
+
0x0 - continuation
|
280
|
+
0x1 - text frame (base64 encode buf)
|
281
|
+
0x2 - binary frame (use raw buf)
|
282
|
+
0x8 - connection close
|
283
|
+
0x9 - ping
|
284
|
+
0xA - pong
|
285
|
+
"""
|
286
|
+
if base64:
|
287
|
+
buf = b64encode(buf)
|
288
|
+
|
289
|
+
b1 = 0x80 | (opcode & 0x0f) # FIN + opcode
|
290
|
+
payload_len = len(buf)
|
291
|
+
if payload_len <= 125:
|
292
|
+
header = pack('>BB', b1, payload_len)
|
293
|
+
elif payload_len > 125 and payload_len < 65536:
|
294
|
+
header = pack('>BBH', b1, 126, payload_len)
|
295
|
+
elif payload_len >= 65536:
|
296
|
+
header = pack('>BBQ', b1, 127, payload_len)
|
297
|
+
|
298
|
+
#print("Encoded: %s" % repr(header + buf))
|
299
|
+
|
300
|
+
return header + buf, len(header), 0
|
301
|
+
|
302
|
+
@staticmethod
|
303
|
+
def decode_hybi(buf, base64=False):
|
304
|
+
""" Decode HyBi style WebSocket packets.
|
305
|
+
Returns:
|
306
|
+
{'fin' : 0_or_1,
|
307
|
+
'opcode' : number,
|
308
|
+
'masked' : boolean,
|
309
|
+
'hlen' : header_bytes_number,
|
310
|
+
'length' : payload_bytes_number,
|
311
|
+
'payload' : decoded_buffer,
|
312
|
+
'left' : bytes_left_number,
|
313
|
+
'close_code' : number,
|
314
|
+
'close_reason' : string}
|
315
|
+
"""
|
316
|
+
|
317
|
+
f = {'fin' : 0,
|
318
|
+
'opcode' : 0,
|
319
|
+
'masked' : False,
|
320
|
+
'hlen' : 2,
|
321
|
+
'length' : 0,
|
322
|
+
'payload' : None,
|
323
|
+
'left' : 0,
|
324
|
+
'close_code' : 1000,
|
325
|
+
'close_reason' : ''}
|
326
|
+
|
327
|
+
blen = len(buf)
|
328
|
+
f['left'] = blen
|
329
|
+
|
330
|
+
if blen < f['hlen']:
|
331
|
+
return f # Incomplete frame header
|
332
|
+
|
333
|
+
b1, b2 = unpack_from(">BB", buf)
|
334
|
+
f['opcode'] = b1 & 0x0f
|
335
|
+
f['fin'] = (b1 & 0x80) >> 7
|
336
|
+
f['masked'] = (b2 & 0x80) >> 7
|
337
|
+
|
338
|
+
f['length'] = b2 & 0x7f
|
339
|
+
|
340
|
+
if f['length'] == 126:
|
341
|
+
f['hlen'] = 4
|
342
|
+
if blen < f['hlen']:
|
343
|
+
return f # Incomplete frame header
|
344
|
+
(f['length'],) = unpack_from('>xxH', buf)
|
345
|
+
elif f['length'] == 127:
|
346
|
+
f['hlen'] = 10
|
347
|
+
if blen < f['hlen']:
|
348
|
+
return f # Incomplete frame header
|
349
|
+
(f['length'],) = unpack_from('>xxQ', buf)
|
350
|
+
|
351
|
+
full_len = f['hlen'] + f['masked'] * 4 + f['length']
|
352
|
+
|
353
|
+
if blen < full_len: # Incomplete frame
|
354
|
+
return f # Incomplete frame header
|
355
|
+
|
356
|
+
# Number of bytes that are part of the next frame(s)
|
357
|
+
f['left'] = blen - full_len
|
358
|
+
|
359
|
+
# Process 1 frame
|
360
|
+
if f['masked']:
|
361
|
+
# unmask payload
|
362
|
+
f['payload'] = WebSocketServer.unmask(buf, f['hlen'],
|
363
|
+
f['length'])
|
364
|
+
else:
|
365
|
+
print("Unmasked frame: %s" % repr(buf))
|
366
|
+
f['payload'] = buf[(f['hlen'] + f['masked'] * 4):full_len]
|
367
|
+
|
368
|
+
if base64 and f['opcode'] in [1, 2]:
|
369
|
+
try:
|
370
|
+
f['payload'] = b64decode(f['payload'])
|
371
|
+
except:
|
372
|
+
print("Exception while b64decoding buffer: %s" %
|
373
|
+
repr(buf))
|
374
|
+
raise
|
375
|
+
|
376
|
+
if f['opcode'] == 0x08:
|
377
|
+
if f['length'] >= 2:
|
378
|
+
f['close_code'] = unpack_from(">H", f['payload'])[0]
|
379
|
+
if f['length'] > 3:
|
380
|
+
f['close_reason'] = f['payload'][2:]
|
381
|
+
|
382
|
+
return f
|
383
|
+
|
384
|
+
@staticmethod
|
385
|
+
def encode_hixie(buf):
|
386
|
+
return s2b("\x00" + b2s(b64encode(buf)) + "\xff"), 1, 1
|
387
|
+
|
388
|
+
@staticmethod
|
389
|
+
def decode_hixie(buf):
|
390
|
+
end = buf.find(s2b('\xff'))
|
391
|
+
return {'payload': b64decode(buf[1:end]),
|
392
|
+
'hlen': 1,
|
393
|
+
'masked': False,
|
394
|
+
'length': end - 1,
|
395
|
+
'left': len(buf) - (end + 1)}
|
396
|
+
|
397
|
+
|
398
|
+
@staticmethod
|
399
|
+
def gen_md5(keys):
|
400
|
+
""" Generate hash value for WebSockets hixie-76. """
|
401
|
+
key1 = keys['Sec-WebSocket-Key1']
|
402
|
+
key2 = keys['Sec-WebSocket-Key2']
|
403
|
+
key3 = keys['key3']
|
404
|
+
spaces1 = key1.count(" ")
|
405
|
+
spaces2 = key2.count(" ")
|
406
|
+
num1 = int("".join([c for c in key1 if c.isdigit()])) / spaces1
|
407
|
+
num2 = int("".join([c for c in key2 if c.isdigit()])) / spaces2
|
408
|
+
|
409
|
+
return b2s(md5(pack('>II8s',
|
410
|
+
int(num1), int(num2), key3)).digest())
|
411
|
+
|
412
|
+
#
|
413
|
+
# WebSocketServer logging/output functions
|
414
|
+
#
|
415
|
+
|
416
|
+
def traffic(self, token="."):
|
417
|
+
""" Show traffic flow in verbose mode. """
|
418
|
+
if self.verbose and not self.daemon:
|
419
|
+
sys.stdout.write(token)
|
420
|
+
sys.stdout.flush()
|
421
|
+
|
422
|
+
def msg(self, msg):
|
423
|
+
""" Output message with handler_id prefix. """
|
424
|
+
if not self.daemon:
|
425
|
+
print("% 3d: %s" % (self.handler_id, msg))
|
426
|
+
|
427
|
+
def vmsg(self, msg):
|
428
|
+
""" Same as msg() but only if verbose. """
|
429
|
+
if self.verbose:
|
430
|
+
self.msg(msg)
|
431
|
+
|
432
|
+
#
|
433
|
+
# Main WebSocketServer methods
|
434
|
+
#
|
435
|
+
def send_frames(self, bufs=None):
|
436
|
+
""" Encode and send WebSocket frames. Any frames already
|
437
|
+
queued will be sent first. If buf is not set then only queued
|
438
|
+
frames will be sent. Returns the number of pending frames that
|
439
|
+
could not be fully sent. If returned pending frames is greater
|
440
|
+
than 0, then the caller should call again when the socket is
|
441
|
+
ready. """
|
442
|
+
|
443
|
+
tdelta = int(time.time()*1000) - self.start_time
|
444
|
+
|
445
|
+
if bufs:
|
446
|
+
for buf in bufs:
|
447
|
+
if self.version.startswith("hybi"):
|
448
|
+
if self.base64:
|
449
|
+
encbuf, lenhead, lentail = self.encode_hybi(
|
450
|
+
buf, opcode=1, base64=True)
|
451
|
+
else:
|
452
|
+
encbuf, lenhead, lentail = self.encode_hybi(
|
453
|
+
buf, opcode=2, base64=False)
|
454
|
+
|
455
|
+
else:
|
456
|
+
encbuf, lenhead, lentail = self.encode_hixie(buf)
|
457
|
+
|
458
|
+
if self.rec:
|
459
|
+
self.rec.write("%s,\n" %
|
460
|
+
repr("{%s{" % tdelta
|
461
|
+
+ encbuf[lenhead:len(encbuf)-lentail]))
|
462
|
+
|
463
|
+
self.send_parts.append(encbuf)
|
464
|
+
|
465
|
+
while self.send_parts:
|
466
|
+
# Send pending frames
|
467
|
+
buf = self.send_parts.pop(0)
|
468
|
+
sent = self.client.send(buf)
|
469
|
+
|
470
|
+
if sent == len(buf):
|
471
|
+
self.traffic("<")
|
472
|
+
else:
|
473
|
+
self.traffic("<.")
|
474
|
+
self.send_parts.insert(0, buf[sent:])
|
475
|
+
break
|
476
|
+
|
477
|
+
return len(self.send_parts)
|
478
|
+
|
479
|
+
def recv_frames(self):
|
480
|
+
""" Receive and decode WebSocket frames.
|
481
|
+
|
482
|
+
Returns:
|
483
|
+
(bufs_list, closed_string)
|
484
|
+
"""
|
485
|
+
|
486
|
+
closed = False
|
487
|
+
bufs = []
|
488
|
+
tdelta = int(time.time()*1000) - self.start_time
|
489
|
+
|
490
|
+
buf = self.client.recv(self.buffer_size)
|
491
|
+
if len(buf) == 0:
|
492
|
+
closed = {'code': 1000, 'reason': "Client closed abruptly"}
|
493
|
+
return bufs, closed
|
494
|
+
|
495
|
+
if self.recv_part:
|
496
|
+
# Add partially received frames to current read buffer
|
497
|
+
buf = self.recv_part + buf
|
498
|
+
self.recv_part = None
|
499
|
+
|
500
|
+
while buf:
|
501
|
+
if self.version.startswith("hybi"):
|
502
|
+
|
503
|
+
frame = self.decode_hybi(buf, base64=self.base64)
|
504
|
+
#print("Received buf: %s, frame: %s" % (repr(buf), frame))
|
505
|
+
|
506
|
+
if frame['payload'] == None:
|
507
|
+
# Incomplete/partial frame
|
508
|
+
self.traffic("}.")
|
509
|
+
if frame['left'] > 0:
|
510
|
+
self.recv_part = buf[-frame['left']:]
|
511
|
+
break
|
512
|
+
else:
|
513
|
+
if frame['opcode'] == 0x8: # connection close
|
514
|
+
closed = {'code': frame['close_code'],
|
515
|
+
'reason': frame['close_reason']}
|
516
|
+
break
|
517
|
+
|
518
|
+
else:
|
519
|
+
if buf[0:2] == s2b('\xff\x00'):
|
520
|
+
closed = {'code': 1000,
|
521
|
+
'reason': "Client sent orderly close frame"}
|
522
|
+
break
|
523
|
+
|
524
|
+
elif buf[0:2] == s2b('\x00\xff'):
|
525
|
+
buf = buf[2:]
|
526
|
+
continue # No-op
|
527
|
+
|
528
|
+
elif buf.count(s2b('\xff')) == 0:
|
529
|
+
# Partial frame
|
530
|
+
self.traffic("}.")
|
531
|
+
self.recv_part = buf
|
532
|
+
break
|
533
|
+
|
534
|
+
frame = self.decode_hixie(buf)
|
535
|
+
|
536
|
+
self.traffic("}")
|
537
|
+
|
538
|
+
if self.rec:
|
539
|
+
start = frame['hlen']
|
540
|
+
end = frame['hlen'] + frame['length']
|
541
|
+
if frame['masked']:
|
542
|
+
recbuf = WebSocketServer.unmask(buf, frame['hlen'],
|
543
|
+
frame['length'])
|
544
|
+
else:
|
545
|
+
recbuf = buf[frame['hlen']:frame['hlen'] +
|
546
|
+
frame['length']]
|
547
|
+
self.rec.write("%s,\n" %
|
548
|
+
repr("}%s}" % tdelta + recbuf))
|
549
|
+
|
550
|
+
|
551
|
+
bufs.append(frame['payload'])
|
552
|
+
|
553
|
+
if frame['left']:
|
554
|
+
buf = buf[-frame['left']:]
|
555
|
+
else:
|
556
|
+
buf = ''
|
557
|
+
|
558
|
+
return bufs, closed
|
559
|
+
|
560
|
+
def send_close(self, code=1000, reason=''):
|
561
|
+
""" Send a WebSocket orderly close frame. """
|
562
|
+
|
563
|
+
if self.version.startswith("hybi"):
|
564
|
+
msg = pack(">H%ds" % len(reason), code, reason)
|
565
|
+
|
566
|
+
buf, h, t = self.encode_hybi(msg, opcode=0x08, base64=False)
|
567
|
+
self.client.send(buf)
|
568
|
+
|
569
|
+
elif self.version == "hixie-76":
|
570
|
+
buf = s2b('\xff\x00')
|
571
|
+
self.client.send(buf)
|
572
|
+
|
573
|
+
# No orderly close for 75
|
574
|
+
|
575
|
+
def do_websocket_handshake(self, headers, path):
|
576
|
+
h = self.headers = headers
|
577
|
+
self.path = path
|
578
|
+
|
579
|
+
prot = 'WebSocket-Protocol'
|
580
|
+
protocols = h.get('Sec-'+prot, h.get(prot, '')).split(',')
|
581
|
+
|
582
|
+
ver = h.get('Sec-WebSocket-Version')
|
583
|
+
if ver:
|
584
|
+
# HyBi/IETF version of the protocol
|
585
|
+
|
586
|
+
# HyBi-07 report version 7
|
587
|
+
# HyBi-08 - HyBi-12 report version 8
|
588
|
+
# HyBi-13 reports version 13
|
589
|
+
if ver in ['7', '8', '13']:
|
590
|
+
self.version = "hybi-%02d" % int(ver)
|
591
|
+
else:
|
592
|
+
raise self.EClose('Unsupported protocol version %s' % ver)
|
593
|
+
|
594
|
+
key = h['Sec-WebSocket-Key']
|
595
|
+
|
596
|
+
# Choose binary if client supports it
|
597
|
+
if 'binary' in protocols:
|
598
|
+
self.base64 = False
|
599
|
+
elif 'base64' in protocols:
|
600
|
+
self.base64 = True
|
601
|
+
else:
|
602
|
+
raise self.EClose("Client must support 'binary' or 'base64' protocol")
|
603
|
+
|
604
|
+
# Generate the hash value for the accept header
|
605
|
+
accept = b64encode(sha1(s2b(key + self.GUID)).digest())
|
606
|
+
|
607
|
+
response = self.server_handshake_hybi % b2s(accept)
|
608
|
+
if self.base64:
|
609
|
+
response += "Sec-WebSocket-Protocol: base64\r\n"
|
610
|
+
else:
|
611
|
+
response += "Sec-WebSocket-Protocol: binary\r\n"
|
612
|
+
response += "\r\n"
|
613
|
+
|
614
|
+
else:
|
615
|
+
# Hixie version of the protocol (75 or 76)
|
616
|
+
|
617
|
+
if h.get('key3'):
|
618
|
+
trailer = self.gen_md5(h)
|
619
|
+
pre = "Sec-"
|
620
|
+
self.version = "hixie-76"
|
621
|
+
else:
|
622
|
+
trailer = ""
|
623
|
+
pre = ""
|
624
|
+
self.version = "hixie-75"
|
625
|
+
|
626
|
+
# We only support base64 in Hixie era
|
627
|
+
self.base64 = True
|
628
|
+
|
629
|
+
response = self.server_handshake_hixie % (pre,
|
630
|
+
h['Origin'], pre, self.scheme, h['Host'], path)
|
631
|
+
|
632
|
+
if 'base64' in protocols:
|
633
|
+
response += "%sWebSocket-Protocol: base64\r\n" % pre
|
634
|
+
else:
|
635
|
+
self.msg("Warning: client does not report 'base64' protocol support")
|
636
|
+
response += "\r\n" + trailer
|
637
|
+
|
638
|
+
return response
|
639
|
+
|
640
|
+
|
641
|
+
def do_handshake(self, sock, address):
|
642
|
+
"""
|
643
|
+
do_handshake does the following:
|
644
|
+
- Peek at the first few bytes from the socket.
|
645
|
+
- If the connection is Flash policy request then answer it,
|
646
|
+
close the socket and return.
|
647
|
+
- If the connection is an HTTPS/SSL/TLS connection then SSL
|
648
|
+
wrap the socket.
|
649
|
+
- Read from the (possibly wrapped) socket.
|
650
|
+
- If we have received a HTTP GET request and the webserver
|
651
|
+
functionality is enabled, answer it, close the socket and
|
652
|
+
return.
|
653
|
+
- Assume we have a WebSockets connection, parse the client
|
654
|
+
handshake data.
|
655
|
+
- Send a WebSockets handshake server response.
|
656
|
+
- Return the socket for this WebSocket client.
|
657
|
+
"""
|
658
|
+
stype = ""
|
659
|
+
ready = select.select([sock], [], [], 3)[0]
|
660
|
+
|
661
|
+
|
662
|
+
if not ready:
|
663
|
+
raise self.EClose("ignoring socket not ready")
|
664
|
+
# Peek, but do not read the data so that we have a opportunity
|
665
|
+
# to SSL wrap the socket first
|
666
|
+
handshake = sock.recv(1024, socket.MSG_PEEK)
|
667
|
+
#self.msg("Handshake [%s]" % handshake)
|
668
|
+
|
669
|
+
if handshake == "":
|
670
|
+
raise self.EClose("ignoring empty handshake")
|
671
|
+
|
672
|
+
elif handshake.startswith(s2b("<policy-file-request/>")):
|
673
|
+
# Answer Flash policy request
|
674
|
+
handshake = sock.recv(1024)
|
675
|
+
sock.send(s2b(self.policy_response))
|
676
|
+
raise self.EClose("Sending flash policy response")
|
677
|
+
|
678
|
+
elif handshake[0] in ("\x16", "\x80", 22, 128):
|
679
|
+
# SSL wrap the connection
|
680
|
+
if not ssl:
|
681
|
+
raise self.EClose("SSL connection but no 'ssl' module")
|
682
|
+
if not os.path.exists(self.cert):
|
683
|
+
raise self.EClose("SSL connection but '%s' not found"
|
684
|
+
% self.cert)
|
685
|
+
retsock = None
|
686
|
+
try:
|
687
|
+
retsock = ssl.wrap_socket(
|
688
|
+
sock,
|
689
|
+
server_side=True,
|
690
|
+
certfile=self.cert,
|
691
|
+
keyfile=self.key)
|
692
|
+
except ssl.SSLError:
|
693
|
+
_, x, _ = sys.exc_info()
|
694
|
+
if x.args[0] == ssl.SSL_ERROR_EOF:
|
695
|
+
if len(x.args) > 1:
|
696
|
+
raise self.EClose(x.args[1])
|
697
|
+
else:
|
698
|
+
raise self.EClose("Got SSL_ERROR_EOF")
|
699
|
+
else:
|
700
|
+
raise
|
701
|
+
|
702
|
+
self.scheme = "wss"
|
703
|
+
stype = "SSL/TLS (wss://)"
|
704
|
+
|
705
|
+
elif self.ssl_only:
|
706
|
+
raise self.EClose("non-SSL connection received but disallowed")
|
707
|
+
|
708
|
+
else:
|
709
|
+
retsock = sock
|
710
|
+
self.scheme = "ws"
|
711
|
+
stype = "Plain non-SSL (ws://)"
|
712
|
+
|
713
|
+
wsh = WSRequestHandler(retsock, address, not self.web)
|
714
|
+
if wsh.last_code == 101:
|
715
|
+
# Continue on to handle WebSocket upgrade
|
716
|
+
pass
|
717
|
+
elif wsh.last_code == 405:
|
718
|
+
raise self.EClose("Normal web request received but disallowed")
|
719
|
+
elif wsh.last_code < 200 or wsh.last_code >= 300:
|
720
|
+
raise self.EClose(wsh.last_message)
|
721
|
+
elif self.verbose:
|
722
|
+
raise self.EClose(wsh.last_message)
|
723
|
+
else:
|
724
|
+
raise self.EClose("")
|
725
|
+
|
726
|
+
response = self.do_websocket_handshake(wsh.headers, wsh.path)
|
727
|
+
|
728
|
+
self.msg("%s: %s WebSocket connection" % (address[0], stype))
|
729
|
+
self.msg("%s: Version %s, base64: '%s'" % (address[0],
|
730
|
+
self.version, self.base64))
|
731
|
+
if self.path != '/':
|
732
|
+
self.msg("%s: Path: '%s'" % (address[0], self.path))
|
733
|
+
|
734
|
+
|
735
|
+
# Send server WebSockets handshake response
|
736
|
+
#self.msg("sending response [%s]" % response)
|
737
|
+
retsock.send(s2b(response))
|
738
|
+
|
739
|
+
# Return the WebSockets socket which may be SSL wrapped
|
740
|
+
return retsock
|
741
|
+
|
742
|
+
|
743
|
+
#
|
744
|
+
# Events that can/should be overridden in sub-classes
|
745
|
+
#
|
746
|
+
def started(self):
|
747
|
+
""" Called after WebSockets startup """
|
748
|
+
self.vmsg("WebSockets server started")
|
749
|
+
|
750
|
+
def poll(self):
|
751
|
+
""" Run periodically while waiting for connections. """
|
752
|
+
#self.vmsg("Running poll()")
|
753
|
+
pass
|
754
|
+
|
755
|
+
def fallback_SIGCHLD(self, sig, stack):
|
756
|
+
# Reap zombies when using os.fork() (python 2.4)
|
757
|
+
self.vmsg("Got SIGCHLD, reaping zombies")
|
758
|
+
try:
|
759
|
+
result = os.waitpid(-1, os.WNOHANG)
|
760
|
+
while result[0]:
|
761
|
+
self.vmsg("Reaped child process %s" % result[0])
|
762
|
+
result = os.waitpid(-1, os.WNOHANG)
|
763
|
+
except (OSError):
|
764
|
+
pass
|
765
|
+
|
766
|
+
def do_SIGINT(self, sig, stack):
|
767
|
+
self.msg("Got SIGINT, exiting")
|
768
|
+
sys.exit(0)
|
769
|
+
|
770
|
+
def top_new_client(self, startsock, address):
|
771
|
+
""" Do something with a WebSockets client connection. """
|
772
|
+
# Initialize per client settings
|
773
|
+
self.send_parts = []
|
774
|
+
self.recv_part = None
|
775
|
+
self.base64 = False
|
776
|
+
self.rec = None
|
777
|
+
self.start_time = int(time.time()*1000)
|
778
|
+
|
779
|
+
# handler process
|
780
|
+
try:
|
781
|
+
try:
|
782
|
+
self.client = self.do_handshake(startsock, address)
|
783
|
+
|
784
|
+
if self.record:
|
785
|
+
# Record raw frame data as JavaScript array
|
786
|
+
fname = "%s.%s" % (self.record,
|
787
|
+
self.handler_id)
|
788
|
+
self.msg("opening record file: %s" % fname)
|
789
|
+
self.rec = open(fname, 'w+')
|
790
|
+
encoding = "binary"
|
791
|
+
if self.base64: encoding = "base64"
|
792
|
+
self.rec.write("var VNC_frame_encoding = '%s';\n"
|
793
|
+
% encoding)
|
794
|
+
self.rec.write("var VNC_frame_data = [\n")
|
795
|
+
|
796
|
+
self.ws_connection = True
|
797
|
+
self.new_client()
|
798
|
+
except self.CClose:
|
799
|
+
# Close the client
|
800
|
+
_, exc, _ = sys.exc_info()
|
801
|
+
if self.client:
|
802
|
+
self.send_close(exc.args[0], exc.args[1])
|
803
|
+
except self.EClose:
|
804
|
+
_, exc, _ = sys.exc_info()
|
805
|
+
# Connection was not a WebSockets connection
|
806
|
+
if exc.args[0]:
|
807
|
+
self.msg("%s: %s" % (address[0], exc.args[0]))
|
808
|
+
except Exception:
|
809
|
+
_, exc, _ = sys.exc_info()
|
810
|
+
self.msg("handler exception: %s" % str(exc))
|
811
|
+
if self.verbose:
|
812
|
+
self.msg(traceback.format_exc())
|
813
|
+
finally:
|
814
|
+
if self.rec:
|
815
|
+
self.rec.write("'EOF'];\n")
|
816
|
+
self.rec.close()
|
817
|
+
|
818
|
+
if self.client and self.client != startsock:
|
819
|
+
# Close the SSL wrapped socket
|
820
|
+
# Original socket closed by caller
|
821
|
+
self.client.close()
|
822
|
+
|
823
|
+
def new_client(self):
|
824
|
+
""" Do something with a WebSockets client connection. """
|
825
|
+
raise("WebSocketServer.new_client() must be overloaded")
|
826
|
+
|
827
|
+
def start_server(self):
|
828
|
+
"""
|
829
|
+
Daemonize if requested. Listen for for connections. Run
|
830
|
+
do_handshake() method for each connection. If the connection
|
831
|
+
is a WebSockets client then call new_client() method (which must
|
832
|
+
be overridden) for each new client connection.
|
833
|
+
"""
|
834
|
+
lsock = self.socket(self.listen_host, self.listen_port, False, self.prefer_ipv6)
|
835
|
+
|
836
|
+
if self.daemon:
|
837
|
+
self.daemonize(keepfd=lsock.fileno(), chdir=self.web)
|
838
|
+
|
839
|
+
self.started() # Some things need to happen after daemonizing
|
840
|
+
|
841
|
+
# Allow override of SIGINT
|
842
|
+
signal.signal(signal.SIGINT, self.do_SIGINT)
|
843
|
+
if not multiprocessing:
|
844
|
+
# os.fork() (python 2.4) child reaper
|
845
|
+
signal.signal(signal.SIGCHLD, self.fallback_SIGCHLD)
|
846
|
+
|
847
|
+
last_active_time = self.launch_time
|
848
|
+
while True:
|
849
|
+
try:
|
850
|
+
try:
|
851
|
+
self.client = None
|
852
|
+
startsock = None
|
853
|
+
pid = err = 0
|
854
|
+
child_count = 0
|
855
|
+
|
856
|
+
if multiprocessing and self.idle_timeout:
|
857
|
+
child_count = len(multiprocessing.active_children())
|
858
|
+
|
859
|
+
time_elapsed = time.time() - self.launch_time
|
860
|
+
if self.timeout and time_elapsed > self.timeout:
|
861
|
+
self.msg('listener exit due to --timeout %s'
|
862
|
+
% self.timeout)
|
863
|
+
break
|
864
|
+
|
865
|
+
if self.idle_timeout:
|
866
|
+
idle_time = 0
|
867
|
+
if child_count == 0:
|
868
|
+
idle_time = time.time() - last_active_time
|
869
|
+
else:
|
870
|
+
idle_time = 0
|
871
|
+
last_active_time = time.time()
|
872
|
+
|
873
|
+
if idle_time > self.idle_timeout and child_count == 0:
|
874
|
+
self.msg('listener exit due to --idle-timeout %s'
|
875
|
+
% self.idle_timeout)
|
876
|
+
break
|
877
|
+
|
878
|
+
try:
|
879
|
+
self.poll()
|
880
|
+
|
881
|
+
ready = select.select([lsock], [], [], 1)[0]
|
882
|
+
if lsock in ready:
|
883
|
+
startsock, address = lsock.accept()
|
884
|
+
else:
|
885
|
+
continue
|
886
|
+
except Exception:
|
887
|
+
_, exc, _ = sys.exc_info()
|
888
|
+
if hasattr(exc, 'errno'):
|
889
|
+
err = exc.errno
|
890
|
+
elif hasattr(exc, 'args'):
|
891
|
+
err = exc.args[0]
|
892
|
+
else:
|
893
|
+
err = exc[0]
|
894
|
+
if err == errno.EINTR:
|
895
|
+
self.vmsg("Ignoring interrupted syscall")
|
896
|
+
continue
|
897
|
+
else:
|
898
|
+
raise
|
899
|
+
|
900
|
+
if self.run_once:
|
901
|
+
# Run in same process if run_once
|
902
|
+
self.top_new_client(startsock, address)
|
903
|
+
if self.ws_connection :
|
904
|
+
self.msg('%s: exiting due to --run-once'
|
905
|
+
% address[0])
|
906
|
+
break
|
907
|
+
elif multiprocessing:
|
908
|
+
self.vmsg('%s: new handler Process' % address[0])
|
909
|
+
p = multiprocessing.Process(
|
910
|
+
target=self.top_new_client,
|
911
|
+
args=(startsock, address))
|
912
|
+
p.start()
|
913
|
+
# child will not return
|
914
|
+
else:
|
915
|
+
# python 2.4
|
916
|
+
self.vmsg('%s: forking handler' % address[0])
|
917
|
+
pid = os.fork()
|
918
|
+
if pid == 0:
|
919
|
+
# child handler process
|
920
|
+
self.top_new_client(startsock, address)
|
921
|
+
break # child process exits
|
922
|
+
|
923
|
+
# parent process
|
924
|
+
self.handler_id += 1
|
925
|
+
|
926
|
+
except KeyboardInterrupt:
|
927
|
+
_, exc, _ = sys.exc_info()
|
928
|
+
print("In KeyboardInterrupt")
|
929
|
+
pass
|
930
|
+
except SystemExit:
|
931
|
+
_, exc, _ = sys.exc_info()
|
932
|
+
print("In SystemExit")
|
933
|
+
break
|
934
|
+
except Exception:
|
935
|
+
_, exc, _ = sys.exc_info()
|
936
|
+
self.msg("handler exception: %s" % str(exc))
|
937
|
+
if self.verbose:
|
938
|
+
self.msg(traceback.format_exc())
|
939
|
+
|
940
|
+
finally:
|
941
|
+
if startsock:
|
942
|
+
startsock.close()
|
943
|
+
|
944
|
+
# Close listen port
|
945
|
+
self.vmsg("Closing socket listening at %s:%s"
|
946
|
+
% (self.listen_host, self.listen_port))
|
947
|
+
lsock.close()
|
948
|
+
|
949
|
+
|
950
|
+
# HTTP handler with WebSocket upgrade support
|
951
|
+
class WSRequestHandler(SimpleHTTPRequestHandler):
|
952
|
+
def __init__(self, req, addr, only_upgrade=False):
|
953
|
+
self.only_upgrade = only_upgrade # only allow upgrades
|
954
|
+
SimpleHTTPRequestHandler.__init__(self, req, addr, object())
|
955
|
+
|
956
|
+
def do_GET(self):
|
957
|
+
if (self.headers.get('upgrade') and
|
958
|
+
self.headers.get('upgrade').lower() == 'websocket'):
|
959
|
+
|
960
|
+
if (self.headers.get('sec-websocket-key1') or
|
961
|
+
self.headers.get('websocket-key1')):
|
962
|
+
# For Hixie-76 read out the key hash
|
963
|
+
self.headers.__setitem__('key3', self.rfile.read(8))
|
964
|
+
|
965
|
+
# Just indicate that an WebSocket upgrade is needed
|
966
|
+
self.last_code = 101
|
967
|
+
self.last_message = "101 Switching Protocols"
|
968
|
+
elif self.only_upgrade:
|
969
|
+
# Normal web request responses are disabled
|
970
|
+
self.last_code = 405
|
971
|
+
self.last_message = "405 Method Not Allowed"
|
972
|
+
else:
|
973
|
+
SimpleHTTPRequestHandler.do_GET(self)
|
974
|
+
|
975
|
+
def send_response(self, code, message=None):
|
976
|
+
# Save the status code
|
977
|
+
self.last_code = code
|
978
|
+
SimpleHTTPRequestHandler.send_response(self, code, message)
|
979
|
+
|
980
|
+
def log_message(self, f, *args):
|
981
|
+
# Save instead of printing
|
982
|
+
self.last_message = f % args
|