Module: DoorMat::Controller

Included in:
ApplicationController
Defined in:
lib/door_mat/controller.rb

Instance Method Summary collapse

Instance Method Details

#config_url_redirect(url_token) ⇒ Object



101
102
103
104
# File 'lib/door_mat/controller.rb', line 101

def config_url_redirect(url_token)
  config_url = DoorMat.configuration.send(url_token)
  config_url.inject(self) { |lhs, rhs| lhs.send(rhs) } || main_app_root_url
end

#handle_unverified_requestObject



28
29
30
31
32
33
34
# File 'lib/door_mat/controller.rb', line 28

def handle_unverified_request
  super
rescue ActionController::InvalidAuthenticityToken => e
  raise e
ensure
  lockdown(log_level: :warn, log_message: 'WARN: handle_unverified_request')
end

#lockdown(**options) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/door_mat/controller.rb', line 13

def lockdown(**options)
  o = {
      log_level: :error,
      log_message: "LOCKDOWN: No log message specified",
      redirect_to: nil
  }
  options = o.merge(options.to_h)

  DoorMat.configuration.logger.send(options[:log_level] , options[:log_message])

  sign_out

  redirect_to options[:redirect_to] || config_url_redirect(:lockdown_default_redirect_url)
end

#main_app_root_urlObject



97
98
99
# File 'lib/door_mat/controller.rb', line 97

def main_app_root_url
  [:main_app, :root_url].inject(self) { |lhs, rhs| lhs.send(rhs) }
end

#protected_by_password_less_session(pls_symbols) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/door_mat/controller.rb', line 67

def protected_by_password_less_session(pls_symbols)
  pls_symbols = Array(pls_symbols)
  redirect_url = send("#{pls_symbols.first}_url".to_sym)

  if DoorMat::AccessToken.is_cookie_present? cookies
    DoorMat::AccessToken.validate_from_cookie(cookies, request)
    if DoorMat::AccessToken.current_access_token.valid? && pls_symbols.include?(DoorMat::AccessToken.current_access_token.token_for.to_sym)
      return if DoorMat::AccessToken.current_access_token.used? || DoorMat::AccessToken.current_access_token.multiple_use?
    end
    DoorMat::AccessToken.destroy_if_linked_to(cookies)
  end

  set_session_redirect_to
  redirect_to redirect_url
end

#require_confirmed_emailObject



49
50
51
52
53
# File 'lib/door_mat/controller.rb', line 49

def require_confirmed_email
  unless DoorMat::Session.current_session.valid? && (DoorMat::Session.current_session.email.confirmed? || DoorMat::Session.current_session.email.primary?)
    redirect_to door_mat.email_confirmation_required_url
  end
end

#require_password_reconfirm(minutes_old = nil) ⇒ Object

To assign a custom amount of delay for a specific filter, use as follow for a delay of 1 minute: before_filter -> require_password_reconfirm(1)



58
59
60
61
62
63
64
65
# File 'lib/door_mat/controller.rb', line 58

def require_password_reconfirm(minutes_old=nil)
  minutes_old ||= DoorMat.configuration.password_reconfirm_delay

  if DoorMat::Session.current_session.invalid? || DoorMat::Session.current_session.is_older_than(minutes_old)
    set_session_redirect_to
    redirect_to door_mat.reconfirm_password_url
  end
end

#require_valid_sessionObject



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/door_mat/controller.rb', line 36

def require_valid_session
  unless DoorMat::Session.current_session.valid?
    DoorMat::Session.from(cookies, request)
  else
    DoorMat.configuration.logger.error "ERROR: are you calling require_valid_session more than once?"
  end
  unless DoorMat::Session.current_session.valid?
    set_session_redirect_to

    redirect_to door_mat.
  end
end

#sign_outObject



5
6
7
8
9
10
11
# File 'lib/door_mat/controller.rb', line 5

def sign_out
  DoorMat::Session.clear_current_session
  DoorMat::Session.destroy_if_linked_to(cookies)

  DoorMat::AccessToken.clear_current_access_token
  DoorMat::AccessToken.destroy_if_linked_to(cookies)
end

#update_session_last_activity_timeObject



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/door_mat/controller.rb', line 83

def update_session_last_activity_time

  if DoorMat::Session.current_session.valid?
    DoorMat::Session.current_session.updated_at = DateTime.current
    DoorMat::Session.current_session.save
  end

  if DoorMat::AccessToken.current_access_token.valid?
    DoorMat::AccessToken.current_access_token.updated_at = DateTime.current
    DoorMat::AccessToken.current_access_token.save
  end

end