Skip to content

Commit

Permalink
Merge pull request #2521 from luisramos0/cookies_in_engine
Browse files Browse the repository at this point in the history
[OFN Domains] Breaking OFN into domains - POC cookies inside an engine
  • Loading branch information
sauloperez authored Oct 15, 2018
2 parents 8a0a33d + 574f031 commit fe14996
Show file tree
Hide file tree
Showing 41 changed files with 253 additions and 153 deletions.
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ AllCops:
- 'node_modules/**/*'
# The parser gem fails to parse this file with out current Ruby version.
- 'spec/factories.rb'
# Excluding: inadequate Naming/FileName rule rejects GemFile name with camelcase
- 'engines/web/Gemfile'

# OFN SETTINGS
# Cop settings that have been agreed upon by the OFN community
Expand Down
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ gem 'i18n-js', '~> 3.0.0'
# Patched version. See http://rubysec.com/advisories/CVE-2015-5312/.
gem 'nokogiri', '>= 1.6.7.1'

gem 'web', path: './engines/web'

gem 'pg'
gem 'spree', github: 'openfoodfoundation/spree', branch: 'step-6a', ref: '69db1c090f3711088d84b524f1b94d25e6d21616'
gem 'spree_i18n', github: 'spree/spree_i18n', branch: '1-3-stable'
Expand Down
6 changes: 6 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,11 @@ GIT
activemodel (>= 3.0)
railties (>= 3.0)

PATH
remote: engines/web
specs:
web (0.0.1)

GEM
remote: https://rubygems.org/
specs:
Expand Down Expand Up @@ -764,6 +769,7 @@ DEPENDENCIES
capybara (>= 2.15.4)
coffee-rails (~> 3.2.1)
compass-rails
web!
custom_error_message!
daemons
dalli
Expand Down
1 change: 1 addition & 0 deletions app/assets/stylesheets/darkswarm/all.scss
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
@import 'base/*';
@import '*';
@import 'pages/*';
@import '../web/all';

ofn-modal {
display: block;
Expand Down
5 changes: 0 additions & 5 deletions app/controllers/angular_templates_controller.rb

This file was deleted.

26 changes: 0 additions & 26 deletions app/controllers/api/cookies_consent_controller.rb

This file was deleted.

21 changes: 0 additions & 21 deletions app/helpers/cookies_policy_helper.rb

This file was deleted.

11 changes: 11 additions & 0 deletions app/helpers/footer_links_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'web/cookies_consent'

module FooterLinksHelper
def cookies_policy_link
link_to( t( '.footer_data_cookies_policy' ), '', 'cookies-policy-modal' => true, 'cookies-banner' => !Web::CookiesConsent.new(cookies, request.host).exists? && Spree::Config.cookies_consent_banner_toggle)
end

def privacy_policy_link
link_to( t( '.footer_data_privacy_policy' ), Spree::Config.privacy_policy_url, target: '_blank' )
end
end
29 changes: 0 additions & 29 deletions app/services/cookies_consent.rb

This file was deleted.

1 change: 1 addition & 0 deletions app/views/layouts/darkswarm.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places,geometry#{ ENV['GOOGLE_MAPS_API_KEY'] ? '&key=' + ENV['GOOGLE_MAPS_API_KEY'] : ''} "}
= stylesheet_link_tag "darkswarm/all"
= javascript_include_tag "darkswarm/all"
= javascript_include_tag "web/all"

= render "layouts/i18n_script"
= render "layouts/bugherd_script"
Expand Down
2 changes: 0 additions & 2 deletions app/views/shared/_footer.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,6 @@
= t '.footer_legal_text_html', {content_license: link_to('CC BY-SA 3.0', 'https://creativecommons.org/licenses/by-sa/3.0/'), code_license: link_to('AGPL 3', 'https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)' )}
%p.text-small
%div
- cookies_policy_link = link_to( t( '.footer_data_cookies_policy' ), '', 'cookies-policy-modal' => true, 'cookies-banner' => !CookiesConsent.new(cookies, request.host).exists? && Spree::Config.cookies_consent_banner_toggle)
- privacy_policy_link = link_to( t( '.footer_data_privacy_policy' ), Spree::Config.privacy_policy_url, :target => '_blank' )
- if Spree::Config.privacy_policy_url.present?
= t '.footer_data_text_with_privacy_policy_html', {cookies_policy: cookies_policy_link.html_safe, privacy_policy: privacy_policy_link.html_safe }
- else
Expand Down
1 change: 1 addition & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ class Application < Rails::Application
config.assets.initialize_on_precompile = true
config.assets.precompile += ['iehack.js']
config.assets.precompile += ['admin/all.css', 'admin/*.js', 'admin/**/*.js']
config.assets.precompile += ['web/all.css', 'web/all.js']
config.assets.precompile += ['darkswarm/all.css', 'darkswarm/all.js']
config.assets.precompile += ['mail/all.css']
config.assets.precompile += ['shared/*']
Expand Down
9 changes: 3 additions & 6 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,6 @@
get '/:id/shop', to: 'enterprises#shop', as: 'enterprise_shop'
get "/enterprises/:permalink", to: redirect("/") # Legacy enterprise URL

get "/angular-templates/:id", to: "angular_templates#show", constraints: { name: %r{[\/\w\.]+} }

namespace :api do
resources :enterprises do
post :update_image, on: :member
Expand All @@ -109,17 +107,16 @@
get :job_queue
end

scope '/cookies' do
resource :consent, only: [:show, :create, :destroy], :controller => "cookies_consent"
end

resources :customers, only: [:index, :update]

post '/product_images/:product_id', to: 'product_images#update_product_image'
end

get 'sitemap.xml', to: 'sitemap#index', defaults: { format: 'xml' }

# Mount Web engine routes
mount Web::Engine, :at => '/'

# Mount Spree's routes
mount Spree::Core::Engine, :at => '/'
end
5 changes: 5 additions & 0 deletions engines/web/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Web

This is the rails engine for the Web domain.

See our wiki for [more info about domains and engines in OFN](https://github.com/openfoodfoundation/openfoodnetwork/wiki/Tech-Doc:-How-OFN-is-organized-in-Domains-using-Rails-Engines).
13 changes: 13 additions & 0 deletions engines/web/app/assets/javascripts/web/all.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require_tree .
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Darkswarm.directive 'cookiesBanner', (CookiesBannerService) ->
Darkswarm.directive 'cookiesBanner', (CookiesBannerService, CookiesPolicyModalService) ->
restrict: 'A'
link: (scope, elm, attr)->
return if not attr.cookiesBanner? || attr.cookiesBanner == 'false'
CookiesBannerService.enable()
return if CookiesPolicyModalService.isEnabled()
CookiesBannerService.open()
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Darkswarm.factory "CookiesBannerService", (Navigation, $modal, $location, Redire
modalMessage: null
isEnabled: false

open: (path, template = 'darkswarm/cookies_banner/cookies_banner.html') =>
open: (path, template = 'angular-templates/cookies_banner.html') =>
return unless @isEnabled
@modalInstance = $modal.open
templateUrl: template
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,24 @@ Darkswarm.factory "CookiesPolicyModalService", (Navigation, $modal, $location, C
modalMessage: null

constructor: ->
if $location.path() is @defaultPath || location.pathname is @defaultPath
if @isEnabled()
@open ''

open: (path = false, template = 'angular-templates/cookies_policy.html') =>
@modalInstance = $modal.open
templateUrl: template
windowClass: "cookies-policy-modal medium"

@closeCookiesBanner()
@onCloseReOpenCookiesBanner()
CookiesBannerService.close()
@onCloseOpenCookiesBanner()

selectedPath = path || @defaultPath
Navigation.navigate selectedPath

closeCookiesBanner: =>
setTimeout ->
CookiesBannerService.close()
, 200

onCloseReOpenCookiesBanner: =>
onCloseOpenCookiesBanner: =>
@modalInstance.result.then(
-> CookiesBannerService.open(),
-> CookiesBannerService.open() )

isEnabled: =>
$location.path() is @defaultPath || location.pathname is @defaultPath
2 changes: 2 additions & 0 deletions engines/web/app/assets/javascripts/web/web.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.
2 changes: 2 additions & 0 deletions engines/web/app/assets/stylesheets/web/all.css.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@import 'web/pages/cookies_banner';
@import 'web/pages/cookies_policy_modal';
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import '../branding';
@import 'darkswarm/branding';

.cookies-banner {
background: $dark-grey;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import '../branding';
@import 'darkswarm/branding';

.cookies-policy-modal {
background: $disabled-light;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module Web
class AngularTemplatesController < ApplicationController
helper Web::Engine.helpers

def show
render params[:id].to_s, layout: nil
end
end
end
30 changes: 30 additions & 0 deletions engines/web/app/controllers/web/api/cookies_consent_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require_dependency 'web/cookies_consent'

module Web
module Api
class CookiesConsentController < BaseController
include ActionController::Cookies
respond_to :json

def show
render json: { cookies_consent: cookies_consent.exists? }
end

def create
cookies_consent.set
show
end

def destroy
cookies_consent.destroy
show
end

private

def cookies_consent
@cookies_consent ||= Web::CookiesConsent.new(cookies, request.host)
end
end
end
end
5 changes: 5 additions & 0 deletions engines/web/app/controllers/web/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Web
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
end
23 changes: 23 additions & 0 deletions engines/web/app/helpers/web/cookies_policy_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module Web
module CookiesPolicyHelper
def render_cookie_entry(cookie_name, cookie_desc, cookie_domain = nil)
render partial: 'cookies_policy_entry',
locals: { cookie_name: cookie_name,
cookie_desc: cookie_desc,
cookie_domain: cookie_domain }
end

def matomo_iframe_src
"#{Spree::Config.matomo_url}"\
"/index.php?module=CoreAdminHome&action=optOut"\
"&language=#{locale_language}"\
"&backgroundColor=&fontColor=222222&fontSize=16px&fontFamily=%22Roboto%22%2C%20Arial%2C%20sans-serif"
end

# removes country from locale if needed
# for example, both locales en and en_GB return language en
def locale_language
I18n.locale[0..1]
end
end
end
9 changes: 9 additions & 0 deletions engines/web/config/routes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Web::Engine.routes.draw do
namespace :api do
scope '/cookies' do
resource :consent, only: [:show, :create, :destroy], controller: "cookies_consent"
end
end

get "/angular-templates/:id", to: "angular_templates#show", constraints: { name: %r{[\/\w\.]+} }
end
4 changes: 4 additions & 0 deletions engines/web/lib/web.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
require "web/engine"

module Web
end
Loading

0 comments on commit fe14996

Please sign in to comment.