From 12c99e1b69fe62ca4f7964e1633a69dac1e204e2 Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Thu, 31 May 2018 11:21:34 -0500 Subject: [PATCH] Add initial terms and conditions support --- .../boot/google-webfonts.css.scss.erb | 69 ++++++++++--------- .../stylesheets/common/minimal.css.scss | 10 ++- app/controllers/static_controller.rb | 24 +++++++ app/views/layouts/_apified_footer.html.erb | 2 +- app/views/layouts/apified.html.erb | 12 ++-- app/views/layouts/page.html.erb | 2 +- app/views/layouts/static.html.erb | 21 ++++++ app/views/static/terms_and_privacy.html.erb | 25 +++++++ config/environment.rb | 15 ++++ config/locales/en.yml | 7 +- config/routes.rb | 3 + spec/controllers/static_controller_spec.rb | 45 ++++++++++++ 12 files changed, 187 insertions(+), 48 deletions(-) create mode 100644 app/controllers/static_controller.rb create mode 100644 app/views/layouts/static.html.erb create mode 100644 app/views/static/terms_and_privacy.html.erb create mode 100644 spec/controllers/static_controller_spec.rb diff --git a/app/assets/stylesheets/boot/google-webfonts.css.scss.erb b/app/assets/stylesheets/boot/google-webfonts.css.scss.erb index b5a5b6a6..5c01e8fb 100644 --- a/app/assets/stylesheets/boot/google-webfonts.css.scss.erb +++ b/app/assets/stylesheets/boot/google-webfonts.css.scss.erb @@ -1,5 +1,41 @@ <% # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later %> +/* Open Sans */ + +@font-face { + font-family: 'Open Sans'; + src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot') %>'); + src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot?#iefix') %>') format('embedded-opentype'), + url('<%= asset_path('Open_Sans/opensans-regular-webfont.woff') %>') format('woff'), + url('<%= asset_path('Open_Sans/opensans-regular-webfont.ttf') %>') format('truetype'), + url('<%= asset_path('Open_Sans/opensans-regular-webfont.svg#open_sansregular') %>') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Open Sans'; + src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot') %>'); + src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot?#iefix') %>') format('embedded-opentype'), + url('<%= asset_path('Open_Sans/opensans-light-webfont.woff') %>') format('woff'), + url('<%= asset_path('Open_Sans/opensans-light-webfont.ttf') %>') format('truetype'), + url('<%= asset_path('Open_Sans/opensans-light-webfont.svg#open_sanslight') %>') format('svg'); + font-weight: 200; + font-style: normal; +} + +@font-face { + font-family: 'Open Sans'; + src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot') %>'); + src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot?#iefix') %>') format('embedded-opentype'), + url('<%= asset_path('Open_Sans/opensans-bold-webfont.woff') %>') format('woff'), + url('<%= asset_path('Open_Sans/opensans-bold-webfont.ttf') %>') format('truetype'), + url('<%= asset_path('Open_Sans/opensans-bold-webfont.svg#open_sansbold') %>') format('svg'); + font-weight: bold; + font-style: normal; +} + + /* Bitter */ $condensed: '<%= asset_path('Open_Sans_Condensed') %>'; @@ -38,37 +74,4 @@ $condensed: '<%= asset_path('Open_Sans_Condensed') %>'; font-style: normal; } -/* Open Sans */ -@font-face { - font-family: 'Open Sans'; - src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot') %>'); - src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot?#iefix') %>') format('embedded-opentype'), - url('<%= asset_path('Open_Sans/opensans-regular-webfont.woff') %>') format('woff'), - url('<%= asset_path('Open_Sans/opensans-regular-webfont.ttf') %>') format('truetype'), - url('<%= asset_path('Open_Sans/opensans-regular-webfont.svg#open_sansregular') %>') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans'; - src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot') %>'); - src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot?#iefix') %>') format('embedded-opentype'), - url('<%= asset_path('Open_Sans/opensans-light-webfont.woff') %>') format('woff'), - url('<%= asset_path('Open_Sans/opensans-light-webfont.ttf') %>') format('truetype'), - url('<%= asset_path('Open_Sans/opensans-light-webfont.svg#open_sanslight') %>') format('svg'); - font-weight: 200; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans'; - src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot') %>'); - src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot?#iefix') %>') format('embedded-opentype'), - url('<%= asset_path('Open_Sans/opensans-bold-webfont.woff') %>') format('woff'), - url('<%= asset_path('Open_Sans/opensans-bold-webfont.ttf') %>') format('truetype'), - url('<%= asset_path('Open_Sans/opensans-bold-webfont.svg#open_sansbold') %>') format('svg'); - font-weight: bold; - font-style: normal; -} diff --git a/app/assets/stylesheets/common/minimal.css.scss b/app/assets/stylesheets/common/minimal.css.scss index 0e6c551b..1f4ee9bc 100644 --- a/app/assets/stylesheets/common/minimal.css.scss +++ b/app/assets/stylesheets/common/minimal.css.scss @@ -21,12 +21,16 @@ display: flex; height: 100%; - * { + > * { opacity: 0.5; - margin: auto 0; - margin-right:10px; + margin: auto 10px auto 0; } } + + a { + color:$charcoal + } + } .site-content { diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb new file mode 100644 index 00000000..5d2dd7ff --- /dev/null +++ b/app/controllers/static_controller.rb @@ -0,0 +1,24 @@ +class StaticController < ApplicationController + layout 'layouts/static' + + def terms_and_privacy + @theme = 'minimal' + end + + def ccs + ccs_method = !Settings.ccs ? 'local_tar_gz' : Settings.ccs.ccs_method + if (ccs_method == 'local_tar_gz') + temp_file = "#{$RAILS_ROOT}/tmp/#{Time.current.to_i}.tar.gz" + result = Kernel.system("git archive --format=tar.gz -o #{temp_file} HEAD") + if result + send_file(temp_file, :type => "application/gzip") + else + render :nothing => true, :status => 500 + end + elsif (ccs_method == 'github') + git_hash = File.read("#{$RAILS_ROOT}/CCS_HASH") + redirect_to "https://github.com/#{Settings.ccs.options.account}/#{Settings.ccs.options.repo}/tree/#{git_hash}" + end + + end +end diff --git a/app/views/layouts/_apified_footer.html.erb b/app/views/layouts/_apified_footer.html.erb index e2fd9bcd..af4d7afa 100644 --- a/app/views/layouts/_apified_footer.html.erb +++ b/app/views/layouts/_apified_footer.html.erb @@ -5,7 +5,7 @@
© 2018 <%= Settings.general.name %> About - Terms & Privacy + <%= link_to "Terms & Privacy", controller: :static, action: :terms_and_privacy %>
diff --git a/app/views/layouts/apified.html.erb b/app/views/layouts/apified.html.erb index c9a82e57..3a16b398 100644 --- a/app/views/layouts/apified.html.erb +++ b/app/views/layouts/apified.html.erb @@ -14,18 +14,18 @@ <%= render 'layouts/stylesheets' %> - <%= IncludeAsset.css 'client/css/global/page.css' %> - <%= IncludeAsset.css 'client/css/bootstrap.css' %> + <%= IncludeAsset.css '/client/css/global/page.css' %> + <%= IncludeAsset.css '/client/css/bootstrap.css' %> <%= render 'layouts/apified_header' %> -<%= IncludeAsset.js 'app/loading_indicator.js' %> -<%= IncludeAsset.js 'app/react.js' %> -<%= IncludeAsset.js 'app/react-dom.js' %> -<%= IncludeAsset.js 'app/vendor.js' %> +<%= IncludeAsset.js '/app/loading_indicator.js' %> +<%= IncludeAsset.js '/app/react.js' %> +<%= IncludeAsset.js '/app/react-dom.js' %> +<%= IncludeAsset.js '/app/vendor.js' %> <%= yield :javascripts %>
<%= yield %> diff --git a/app/views/layouts/page.html.erb b/app/views/layouts/page.html.erb index d1348c9c..9f31c083 100644 --- a/app/views/layouts/page.html.erb +++ b/app/views/layouts/page.html.erb @@ -12,7 +12,7 @@ <%= yield %> <%= render 'components/global_loading' %> - <%= render 'layouts/page_modals' %gi + <%= render 'layouts/page_modals' %> <%= render 'layouts/javascripts' %> diff --git a/app/views/layouts/static.html.erb b/app/views/layouts/static.html.erb new file mode 100644 index 00000000..93b6e90a --- /dev/null +++ b/app/views/layouts/static.html.erb @@ -0,0 +1,21 @@ +<%- # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later -%> + + + + + <%= render 'layouts/stylesheets' %> + <%= IncludeAsset.css '/client/css/global/page.css' %> + <%= IncludeAsset.css '/client/css/bootstrap.css' %> + + + +<%= render 'layouts/apified_header' %> +
+ <%= yield %> +
+<%= render 'layouts/apified_footer' %> + + + \ No newline at end of file diff --git a/app/views/static/terms_and_privacy.html.erb b/app/views/static/terms_and_privacy.html.erb new file mode 100644 index 00000000..3265b177 --- /dev/null +++ b/app/views/static/terms_and_privacy.html.erb @@ -0,0 +1,25 @@ +

Terms and Privacy

+ +<% if Settings.terms_and_privacy&.terms_url %> +

Terms of Use

+<% end %> + +<% if Settings.terms_and_privacy&.privacy_url %> +

Privacy Policy

+<% end %> + +

Software Licensing

+This site uses software from the Houdini Project. In compliance with the requirements of the Houdini Project's licenses, you may access the source code corresponding to the current +version of this site <%= link_to "here", action: :ccs %>. + +
+ +

The Houdini Project is released under a set of free and open source software licenses. The full details of + what code is released under which license can be reviewed in source code in the Houdini Project repository and + in its LICENSE file.

+ +

Please look above for any additional permissions or restrictions for this instance of the Houdini Project.

+ + + +
\ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb index 07b96ad6..4c10d070 100755 --- a/config/environment.rb +++ b/config/environment.rb @@ -220,6 +220,21 @@ Config.schema do # whether nonprofits must be vetted before they can use the service. optional(:nonprofits_must_be_vetted).filled(:bool?) + + optional(:terms_and_privacy).schema do + # the url to the terms of use of this Houdini Project instance + optional(:terms_url).filled(:str?) + + # the url to the privacy policy of this Houdini Project instance + optional(:privacy_url).filled(:str?) + end + + # complete, corresponding source + optional(:ccs).schema do + optional(:ccs_method).value(included_in?: %w(local_tar_gz github)) + optional(:options) + end + end Settings.reload! diff --git a/config/locales/en.yml b/config/locales/en.yml index 96021235..92a70a7c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -163,7 +163,6 @@ en: phone: "Your Phone (for account recovery)" save_and_finish: "Save & Finish" next: "Next" - - - - + footer: + terms_and_privacy: "Terms & Privacy" + about: "About" \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 0fc7236b..26214066 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -255,6 +255,9 @@ Commitchange::Application.routes.draw do post '/webhooks/stripe_subscription_payment' => 'webhooks#subscription_payment' post '/webhooks/stripe' => 'webhooks#stripe' + get '/static/terms_and_privacy' => 'static#terms_and_privacy' + get '/static/ccs' => 'static#ccs' + root :to => 'front#index' diff --git a/spec/controllers/static_controller_spec.rb b/spec/controllers/static_controller_spec.rb new file mode 100644 index 00000000..b4b9107a --- /dev/null +++ b/spec/controllers/static_controller_spec.rb @@ -0,0 +1,45 @@ +require 'rails_helper' + +RSpec.describe StaticController, :type => :controller do + describe ".ccs" do + around(:each) do |example| + example.run + Settings.reload! + end + + describe 'local_tar_gz' do + before (:each) do + Settings.merge!( + { + ccs: { + ccs_method: 'local_tar_gz', + } + }) + end + + + it 'fails on git archive' do + expect(Kernel).to receive(:system).and_return(false) + get('ccs') + expect(response.status).to eq 500 + end + + end + + it 'setup github' do + Settings.merge!( + { + ccs: { + ccs_method: 'github', + options: { + account: 'account', + repo: 'repo' + } + } + }) + expect(File).to receive(:read).with("#{$RAILS_ROOT}/CCS_HASH").and_return("hash") + get('ccs') + expect(response).to redirect_to "https://github.com/account/repo/tree/hash" + end + end +end