-
Notifications
You must be signed in to change notification settings - Fork 16
Description
When I create a new account (using devise), I am greeted with a broken webpage and the following error.
Account Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('Account') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 6], ["LIMIT", 1]]
FinePrint::Contract Load (1.4ms) SELECT "fine_print_contracts".* FROM "fine_print_contracts" INNER JOIN "fine_print_contracts" "same_names_fine_print_contracts" ON "same_names_fine_print_contracts"."name" = "fine_print_contracts"."name" WHERE ("fine_print_contracts"."version" IS NOT NULL) AND "fine_print_contracts"."name" IN ('privacy', 'terms') GROUP BY "fine_print_contracts"."id" HAVING "fine_print_contracts"."version" = max("same_names_fine_print_contracts"."version") ORDER BY "fine_print_contracts"."name" ASC, "fine_print_contracts"."version" DESC
FinePrint::Contract Load (1.0ms) SELECT "fine_print_contracts".* FROM "fine_print_contracts" INNER JOIN "fine_print_contracts" "same_names_fine_print_contracts" ON "same_names_fine_print_contracts"."name" = "fine_print_contracts"."name" INNER JOIN "fine_print_signatures" ON "fine_print_signatures"."contract_id" = "fine_print_contracts"."id" WHERE ("fine_print_contracts"."version" IS NOT NULL) AND "fine_print_contracts"."name" IN ('privacy', 'terms') AND "fine_print_signatures"."user_id" = $1 AND "fine_print_signatures"."user_type" = $2 GROUP BY "fine_print_contracts"."id" HAVING "fine_print_contracts"."version" = max("same_names_fine_print_contracts"."version") ORDER BY "fine_print_contracts"."name" ASC, "fine_print_contracts"."version" DESC [["user_id", 6], ["user_type", "User"]]
method=GET path=/ format=html controller=DashboardController action=index status=302 duration=10.24 view=0.00 db=2.59 location=http://localhost:3000/fine_print/contracts/1/signatures/new
method=GET path=/fine_print/contracts/1/signatures/new format=html controller=FinePrint::SignaturesController action=new status=401 duration=0.76 view=0.00 db=0.00
If I attempt to login in another account, I am able to see my contracts, however, when I accept them, it reminds me that I have already agreed and won't let me proceed. The only thing that gets me through is clearing my cache.
FinePrint is being used for my Privacy Policy and Terms. I require users to have "signed" these prior to entering into the dashboard:
dashboard_controller.rb
class DashboardController < ApplicationController
before_action :load_resource
before_action :authenticate_user!
fine_print_require :all
end
fine_print.rb
FinePrint.configure do |config|
# Engine Configuration: Must be set in an initializer
# Layout to be used for FinePrint's controllers
# Default: 'application'
config.layout = 'fine_print'
# Array of custom helpers for FinePrint's controllers
# Default: [] (no custom helpers)
config.helpers = []
# Proc called with a controller as self. Returns the current user.
# Default: lambda { current_user }
config.current_user_proc = lambda { current_user }
# Proc called with a user as argument and a controller as self.
# This proc is called when a user tries to access FinePrint's controllers.
# Should raise and exception, render or redirect unless the user is a manager
# or admin. Contract managers can create and edit agreements and terminate
# accepted agreements. The default renders 403 Forbidden for all users.
# Note: Proc must account for nil users, if current_user_proc returns nil.
# Default: lambda { |user| head(:forbidden) }
config.authenticate_manager_proc = lambda { |user| user&.is_admin? ? true : head(:forbidden) }
# Proc called with a user as argument and a controller as self.
# This proc is called before FinePrint determines if contracts need to be
# signed. If it returns true, FinePrint will proceed with its checks and
# potentially call the redirect_to_contracts_proc with the user as argument.
# If it returns false, renders or redirects, FinePrint will stop its checks.
# Note that returning false will allow the user to proceed without signing
# contracts, unless another before_filter renders or redirects (to a login
# page, for example). The default renders 401 Unauthorized for nil users and
# checks all others for contracts to be signed.
# Default: lambda { |user| !user.nil? || head(:unauthorized) }
config.authenticate_user_proc = lambda { |user| !user.nil? || \
head(:unauthorized) }
# Controller Configuration
# Can be set in this initializer or passed as options to `fine_print_require`
# Proc called with a user and an array of contracts as arguments and a
# controller as self. This proc is called when a user tries to access a
# resource protected by FinePrint, but has not signed all the required
# contracts. Should redirect the user, render or raise an exception.
# The `contracts` argument contains the contracts that need to be signed.
# The default redirects users to FinePrint's contract signing views.
# The `fine_print_return` method can be used to return from this redirect.
# Default: lambda { |user, contracts|
# redirect_to(fine_print.new_contract_signature_path(
# contract_id: contracts.first.id
# ))
# }
config.redirect_to_contracts_proc = lambda { |user, contracts|
redirect_to(
fine_print.new_contract_signature_path(contract_id: contracts.first.id)
)
}
# Proc called whenever a contract is published, useful if the application
# needs to hook into this event and take some action
config.contract_published_proc = lambda { |contract| }
end
Here are my two contracts on my local:
#<FinePrint::Contract id: 1, name: "privacy", version: 1, title: "Privacy Policy", content: "privacy", created_at: "2018-12-29 22:12:40", updated_at: "2018-12-29 22:12:45">
#<FinePrint::Contract id: 2, name: "terms", version: 1, title: "Terms & Conditions", content: "terns", created_at: "2018-12-29 22:12:55", updated_at: "2018-12-29 22:12:59">
Is anyone else getting this issue or have a work-around?