Class: User

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/user.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#passwordObject

Returns the value of attribute password.



8
9
10
# File 'app/models/user.rb', line 8

def password
  @password
end

Class Method Details

.dump_allObject



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/user.rb', line 20

def self.dump_all
  {
    'bare_users' => self.all.map { |user|
      user.attributes.delete_if { |attrb| attrb == 'id' }.map { |attrb, value|
        if attrb != 'user_role_id'
          {attrb => value}
        else
          {'user_role_id' => UserRole.find(value).role}
        end
      }.reduce({}, :merge)
    }
  }
end

Instance Method Details

#firstname_lastnameObject



40
41
42
# File 'app/models/user.rb', line 40

def firstname_lastname
  [firstname, lastname].reject(&:blank?).join(' ')
end

#fix_ipumsi_registrationObject



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'app/models/user.rb', line 170

def fix_ipumsi_registration
  return if microdata_access_requested.nil?
  if !has_microdata_access? && microdata_access_requested && microdata_access_allowed
    ipumsi_user = get_ipumsi_user
    registration_data = {
      id: ipumsi_user.id,
      address_line_1: address_line_1,
      address_line_2: address_line_2,
      address_line_3: address_line_3,
      city: city,
      state: state,
      zip_code: postal_code,
      country: registration_country,
      country_of_origin: country_of_origin,
      phone: personal_phone,
      department_id: fix_ipumsi_department_id(),
      academic_status_id: fix_ipumsi_academic_status_id(),
      anticipated_result_id: fix_ipumsi_anticipated_result_id(),
      institutional_affiliation: institutional_affiliation,
      why_no_institution: explain_no_affiliation,
      institution_name: institution,
      user_email_at_institution: inst_email,
      institution_url: inst_web,
      institution_email: inst_boss,
      institution_phone: inst_phone,
      has_safety_board: has_ethics,
      safety_board_name: ethical_board,
      research_description: research_description,
      health_research: health_research,
      research_funding_source: funder
    }
    ipums_registration = IpumsRegistration.new(registration_data)
    ipums_registration.set_default_creation_attributes
    ipums_registration.save(validate: false)
  end
  reset_microdata_access_info
end

#get_ipumsi_userObject



79
80
81
# File 'app/models/user.rb', line 79

def get_ipumsi_user
  IpumsUser.find_by(email: self.email)
end

#has_invalid_agreement?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'app/models/user.rb', line 123

def has_invalid_agreement?
  !has_valid_agreement?
end

#has_microdata_access?Boolean

Returns:

  • (Boolean)


128
129
130
131
# File 'app/models/user.rb', line 128

def has_microdata_access?
  ipumsi_user = get_ipumsi_user
  !ipumsi_user.nil? && !ipumsi_user.get_ipumsi_registration.nil?
end

#has_valid_agreement?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'app/models/user.rb', line 118

def has_valid_agreement?
  !!(self.opt_in && self.no_fees && self.cite && self.send_copy && self.data_only && self.good_not_evil)
end

#ipumsi_authentication_valid?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'app/models/user.rb', line 91

def ipumsi_authentication_valid?
  !(self.ipumsi_salt.blank? || self.ipumsi_crypted_password.blank?)
end

#is_admin?Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
# File 'app/models/user.rb', line 54

def is_admin?
  admin_role = UserRole.find_by(role: :ADMIN)
  if admin_role.nil?
    false
  else
    user_role.id == admin_role.id
  end
end

#microdata_access_expiration_dateObject



162
163
164
165
166
167
# File 'app/models/user.rb', line 162

def microdata_access_expiration_date
  ipumsi_user = get_ipumsi_user
  ipumsi_user.nil? and return nil
  ipums_registration = ipumsi_user.get_ipumsi_registration
  ipums_registration.nil? ? nil : ipums_registration.expires_at
end

#microdata_access_is_approved?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'app/models/user.rb', line 149

def microdata_access_is_approved?
  !microdata_access_is_expired? && microdata_access_status == IpumsRegistration::STATUS[:approved]
end

#microdata_access_is_denied?Boolean

Returns:

  • (Boolean)


134
135
136
# File 'app/models/user.rb', line 134

def microdata_access_is_denied?
  microdata_access_status == IpumsRegistration::STATUS[:denied]
end

#microdata_access_is_expired?Boolean

Returns:

  • (Boolean)


154
155
156
157
158
159
# File 'app/models/user.rb', line 154

def microdata_access_is_expired?
  ipumsi_user = get_ipumsi_user
  ipumsi_user.nil? and return true
  ipums_registration = ipumsi_user.get_ipumsi_registration
  ipums_registration.nil? ? true : ipums_registration.is_expired?
end

#microdata_access_is_incomplete?Boolean

Returns:

  • (Boolean)


144
145
146
# File 'app/models/user.rb', line 144

def microdata_access_is_incomplete?
  microdata_access_status == IpumsRegistration::STATUS[:incomplete]
end

#microdata_access_is_pending?Boolean

Returns:

  • (Boolean)


139
140
141
# File 'app/models/user.rb', line 139

def microdata_access_is_pending?
  microdata_access_status == IpumsRegistration::STATUS[:pending]
end

#normalize_attributesObject



96
97
98
99
100
101
102
103
# File 'app/models/user.rb', line 96

def normalize_attributes
  self.firstname.strip!
  self.lastname.strip!
  self.email.strip!
  self.email.downcase!
  set_user_role(:USER) if self.user_role.nil?
  set_api_key if self.api_key.nil?
end

#ongoing_extract_requestsObject



74
75
76
# File 'app/models/user.rb', line 74

def ongoing_extract_requests
  extract_requests.joins(:extract_statuses).where(extract_statuses: {status: %w[completed enqueued processing email_sent]}).distinct
end

#owner_info(without_id = false) ⇒ Object



45
46
47
48
49
50
51
# File 'app/models/user.rb', line 45

def owner_info(without_id = false)
  if without_id
    "#{firstname} #{lastname} <#{email}>"
  else
    "User[#{id}]: #{firstname} #{lastname} <#{email}>"
  end
end

#set_api_keyObject



111
112
113
114
115
# File 'app/models/user.rb', line 111

def set_api_key
  hash = OpenSSL::Digest::SHA256.new
  salt = SecureRandom.random_bytes(hash.new.block_length)
  self.api_key = OpenSSL::HMAC.new(salt, hash).to_s
end

#set_ipumsi_authenticationObject



84
85
86
87
88
# File 'app/models/user.rb', line 84

def set_ipumsi_authentication
  srand
  self.ipumsi_salt = Digest::SHA1.hexdigest(rand.to_s)
  self.ipumsi_crypted_password = Digest::SHA1.hexdigest("#{self.password}:mpc-50wiley:#{self.ipumsi_salt}")
end

#set_user_role(role) ⇒ Object



106
107
108
# File 'app/models/user.rb', line 106

def set_user_role(role)
  self.user_role = UserRole.find_by(role: role)
end

#to_sObject



35
36
37
# File 'app/models/user.rb', line 35

def to_s
  "id: #{id.nil? ? '<not set>' : id}, email: #{email.nil? ? '<not set>' : email}, microdata_access_allowed: #{microdata_access_is_approved?}"
end

#toggle_admin!Object



64
65
66
67
68
69
70
71
# File 'app/models/user.rb', line 64

def toggle_admin!
  if is_admin?
    set_user_role(:USER)
  else
    set_user_role(:ADMIN)
  end
  save
end