1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
# frozen_string_literal: true
# Copyright (c) 2010-2012, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
class ApplicationController < ActionController::Base
before_action :force_tablet_html
has_mobile_fu
protect_from_forgery except: :receive, with: :exception, prepend: true
rescue_from ActionController::InvalidAuthenticityToken do
if user_signed_in?
logger.warn "#{current_user.diaspora_handle} CSRF token fail. referer: #{request.referer || 'empty'}"
Workers::Mail::CsrfTokenFail.perform_async(current_user.id)
sign_out current_user
end
flash[:error] = I18n.t("error_messages.csrf_token_fail")
redirect_to new_user_session_path format: request[:format]
end
before_action :ensure_http_referer_is_set
before_action :set_locale
before_action :set_diaspora_header
before_action :set_grammatical_gender
before_action :mobile_switch
before_action :gon_set_current_user
before_action :gon_set_appconfig
before_action :gon_set_preloads
inflection_method grammatical_gender: :gender
helper_method :all_aspects,
:all_contacts_count,
:my_contacts_count,
:only_sharing_count,
:tag_followings,
:tags,
:open_publisher
layout proc { request.format == :mobile ? "application" : "with_header_with_footer" }
private
def default_serializer_options
{root: false}
end
def ensure_http_referer_is_set
request.env["HTTP_REFERER"] ||= "/"
end
# Overwriting the sign_out redirect path method
def after_sign_out_path_for(resource_or_scope)
is_mobile_device? ? root_path : new_user_session_path
end
def all_aspects
@all_aspects ||= current_user.aspects
end
def all_contacts_count
@all_contacts_count ||= current_user.contacts.count
end
def my_contacts_count
@my_contacts_count ||= current_user.contacts.receiving.count
end
def only_sharing_count
@only_sharing_count ||= current_user.contacts.only_sharing.count
end
def tags
@tags ||= current_user.followed_tags
end
def ensure_page
params[:page] = params[:page] ? params[:page].to_i : 1
end
def set_diaspora_header
headers["X-Diaspora-Version"] = AppConfig.version_string
if AppConfig.git_available?
headers["X-Git-Update"] = AppConfig.git_update if AppConfig.git_update.present?
headers["X-Git-Revision"] = AppConfig.git_revision if AppConfig.git_revision.present?
end
end
def set_locale
if user_signed_in?
I18n.locale = current_user.language
else
locale = http_accept_language.language_region_compatible_from AVAILABLE_LANGUAGE_CODES
locale ||= DEFAULT_LANGUAGE
I18n.locale = locale
end
end
def redirect_unless_admin
return if current_user.admin?
redirect_to stream_url, notice: "you need to be an admin to do that"
end
def redirect_unless_moderator
return if current_user.moderator?
redirect_to stream_url, notice: "you need to be an admin or moderator to do that"
end
def set_grammatical_gender
if (user_signed_in? && I18n.inflector.inflected_locale?)
gender = current_user.gender.to_s.tr('!()[]"\'`*=|/\#.,-:', '').downcase
unless gender.empty?
i_langs = I18n.inflector.inflected_locales(:gender)
i_langs.delete I18n.locale
i_langs.unshift I18n.locale
i_langs.each do |lang|
token = I18n.inflector.true_token(gender, :gender, lang)
unless token.nil?
@grammatical_gender = token
break
end
end
end
end
end
def grammatical_gender
@grammatical_gender || nil
end
# use :mobile view for mobile and :html for everything else
# (except if explicitly specified, e.g. :json, :xml)
def mobile_switch
if session[:mobile_view] == true && request.format.html?
request.format = :mobile
end
end
def force_tablet_html
session[:tablet_view] = false
end
def after_sign_in_path_for(resource)
stored_location_for(:user) || current_user_redirect_path
end
def max_time
params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now + 1
end
def current_user_redirect_path
# If getting started is active AND the user has not completed the getting_started page
if current_user.getting_started? && !current_user.basic_profile_present?
getting_started_path
else
stream_path
end
end
def gon_set_appconfig
gon.push(appConfig: {
chat: {enabled: AppConfig.chat.enabled?},
settings: {podname: AppConfig.settings.pod_name},
map: {mapbox: {
enabled: AppConfig.map.mapbox.enabled?,
access_token: AppConfig.map.mapbox.access_token,
style: AppConfig.map.mapbox.style
}}
})
end
def gon_set_current_user
return unless user_signed_in?
a_ids = session[:a_ids] || []
user = UserPresenter.new(current_user, a_ids)
gon.push(user: user)
end
def gon_set_preloads
return unless gon.preloads.nil?
gon.preloads = {}
end
end
|