Add initial terms and conditions support

This commit is contained in:
Eric Schultz 2018-05-31 11:21:34 -05:00
parent 6c7451209f
commit 12c99e1b69
12 changed files with 187 additions and 48 deletions

View file

@ -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;
}

View file

@ -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 {

View file

@ -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

View file

@ -5,7 +5,7 @@
<div class="container">
<span>&copy; 2018 <%= Settings.general.name %></span>
<span>About</span>
<span>Terms &amp; Privacy</span>
<span><%= link_to "Terms & Privacy", controller: :static, action: :terms_and_privacy %></span>
</div>
</div>

View file

@ -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' %>
<style>
body {padding-left: 0}
</style>
</head>
<body>
<%= 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 %>
<div class="site-content">
<%= yield %>

View file

@ -12,7 +12,7 @@
<body>
<%= yield %>
<%= render 'components/global_loading' %>
<%= render 'layouts/page_modals' %gi
<%= render 'layouts/page_modals' %>
<%= render 'layouts/javascripts' %>
</body>

View file

@ -0,0 +1,21 @@
<%- # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later -%>
<!doctype html>
<html>
<head>
<%= render 'layouts/stylesheets' %>
<%= IncludeAsset.css '/client/css/global/page.css' %>
<%= IncludeAsset.css '/client/css/bootstrap.css' %>
<style>
body {padding-left: 0}
</style>
</head>
<body>
<%= render 'layouts/apified_header' %>
<div class="site-content">
<%= yield %>
</div>
<%= render 'layouts/apified_footer' %>
</body>
</html>

View file

@ -0,0 +1,25 @@
<div class="container"><h1>Terms and Privacy</h1>
<% if Settings.terms_and_privacy&.terms_url %>
<h2><a href="<%= Settings.terms_and_privacy.terms_url %>">Terms of Use</a></h2>
<% end %>
<% if Settings.terms_and_privacy&.privacy_url %>
<h2><a href="<%= Settings.terms_and_privacy.terms_url %>">Privacy Policy</a></h2>
<% end %>
<h2>Software Licensing</h2>
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 %>.
<hr/>
<p>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 <a href="https://github.com/houdiniproject/houdini">the Houdini Project repository</a> and
in its <a href="https://github.com/houdiniproject/houdini/blob/master/LICENSE">LICENSE</a> file.</p>
<p>Please look above for any additional permissions or restrictions for this instance of the Houdini Project.</p>
</div>

View file

@ -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!

View file

@ -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"

View file

@ -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'

View file

@ -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