egov_utils 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/egov_utils/current_users_controller.rb +26 -0
  3. data/app/controllers/egov_utils/groups_controller.rb +33 -7
  4. data/app/controllers/egov_utils/passwords_controller.rb +4 -1
  5. data/app/controllers/egov_utils/registration_requests_controller.rb +59 -0
  6. data/app/controllers/egov_utils/users_controller.rb +56 -33
  7. data/app/jobs/egov_utils/registration_requests/check_auto_accept_job.rb +12 -0
  8. data/app/mailers/egov_utils/registration_request_mailer.rb +31 -0
  9. data/app/models/egov_utils/group.rb +1 -3
  10. data/app/models/egov_utils/registration_request.rb +21 -0
  11. data/app/models/egov_utils/user.rb +12 -0
  12. data/app/services/egov_utils/archive_users.rb +12 -0
  13. data/app/services/egov_utils/refresh_groups.rb +28 -0
  14. data/app/services/egov_utils/refresh_user_groups.rb +3 -4
  15. data/app/services/egov_utils/registration_requests/check_auto_accept.rb +31 -0
  16. data/app/services/egov_utils/registration_requests/create.rb +25 -0
  17. data/app/services/egov_utils/registration_requests/handle_request.rb +57 -0
  18. data/app/views/egov_utils/current_users/edit.html.haml +12 -0
  19. data/app/views/egov_utils/groups/_form.html.haml +5 -0
  20. data/app/views/egov_utils/groups/_groups_tab.html.haml +0 -5
  21. data/app/views/egov_utils/groups/edit.html.haml +4 -0
  22. data/app/views/egov_utils/groups/index.html.haml +28 -19
  23. data/app/views/egov_utils/groups/new.html.haml +4 -0
  24. data/app/views/egov_utils/registration_request_mailer/accepted.html.erb +12 -0
  25. data/app/views/egov_utils/registration_request_mailer/auto_accepted.html.erb +8 -0
  26. data/app/views/egov_utils/registration_request_mailer/created.html.erb +12 -0
  27. data/app/views/egov_utils/registration_request_mailer/rejected.html.erb +6 -0
  28. data/app/views/egov_utils/registration_requests/index.html.haml +29 -0
  29. data/app/views/egov_utils/registration_requests/new.html.haml +9 -0
  30. data/app/views/egov_utils/registration_requests/show.html.haml +51 -0
  31. data/app/views/egov_utils/sessions/new.html.haml +3 -0
  32. data/app/views/egov_utils/users/edit.html.haml +9 -0
  33. data/app/views/egov_utils/users/index.html.haml +42 -25
  34. data/config/locales/cs.yml +81 -3
  35. data/config/routes.rb +6 -1
  36. data/db/migrate/20230407114921_add_deleted_at_to_egov_utils_users.rb +6 -0
  37. data/db/migrate/20230408123813_create_egov_utils_registration_requests.rb +16 -0
  38. data/db/migrate/20230412063325_add_days_before_archive_to_egov_utils_users.rb +5 -0
  39. data/lib/egov_utils/version.rb +1 -1
  40. metadata +39 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39d1cac9552de528bbd6fb76ab0f766289d3b0cbe795e2b5de0b0ac48558619a
4
- data.tar.gz: ae2f54428922bd3a8ff814e243ceacad6fc65e06dee028351dcb64baf771a64b
3
+ metadata.gz: a0d959fdb236578d9d04f1828e69794d06ef9b7e03696f4459a714da45528180
4
+ data.tar.gz: c74d6584c3ca4ba356a236d81decd35e9d5a45b09f0b84048f2f32f2d95597ce
5
5
  SHA512:
6
- metadata.gz: 13f02bb9e196af53330637d00e8127de164b19284f99988edcbfed14f0722449f04a70bb24dfcf7f93d08780b3eef8ad746e9923a51cc9bcc4b1e7558b4ac436
7
- data.tar.gz: 9f3036d67042d62b3ec567e01da3fdbc60dc8a904026f883c60608d923e124a673a76d63f12dd9c81d149a3347389337aeafbad68ad529cbd3eef2703eae0b13
6
+ metadata.gz: d208c342267f541e57835573f28bb10f173592f87b2c0a7a96427c7398cfcd11b2984a1ba4770d67f1ef6be0b04e32edd0586b3f887d0e5b3b56711961afad94
7
+ data.tar.gz: 7e06bb6d70942d28fa90266e3b9aa5e4bc0c8bf3790989c934b385e5cafc9e95559af1beae42e189b9210b4a49360d6d28435d58f7a71e88a18259482ad7348b
@@ -0,0 +1,26 @@
1
+ module EgovUtils
2
+ class CurrentUsersController < ApplicationController
3
+ before_action :require_login
4
+
5
+ def edit; end
6
+
7
+ def update
8
+ current_user.update(update_params)
9
+
10
+ if current_user.valid?
11
+ redirect_to edit_current_user_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
12
+ else
13
+ render :edit
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def update_params
20
+ params
21
+ .require(:user)
22
+ .permit(:email, :password, :password_confirmation, :firstname,
23
+ :lastname)
24
+ end
25
+ end
26
+ end
@@ -2,20 +2,36 @@ require_dependency "egov_utils/application_controller"
2
2
 
3
3
  module EgovUtils
4
4
  class GroupsController < ApplicationController
5
+ def index
6
+ @groups = EgovUtils::Group.
7
+ accessible_by(current_ability).
8
+ order(:provider).
9
+ page(params[:page] || 1)
10
+ end
5
11
 
6
- load_and_authorize_resource
12
+ def new
13
+ @group = Group.new
14
+ end
7
15
 
8
- def index
9
- @groups = EgovUtils::Group.accessible_by(current_ability)
16
+ def edit
17
+ @group = Group.find(params[:id])
10
18
  end
11
19
 
12
- def show
20
+ def update
21
+ @group = Group.find(params[:id])
22
+
23
+ if @group.update(update_params)
24
+ redirect_to egov_utils.groups_path, notice: t('success_updated')
25
+ else
26
+ render :edit
27
+ end
13
28
  end
14
29
 
15
30
  def create
31
+ @group = Group.new(create_params)
16
32
  respond_to do |format|
17
33
  if @group.save
18
- format.html{ redirect_to egov_utils.users_path, notice: t('success_created') }
34
+ format.html{ redirect_to egov_utils.groups_path, notice: t('success_created') }
19
35
  format.json{ render json: @group, status: :created }
20
36
  else
21
37
  format.html{ render 'new' }
@@ -44,9 +60,19 @@ module EgovUtils
44
60
 
45
61
  private
46
62
 
47
- def create_params
48
- params.require(:group).permit(:name, :provider, :ldap_uid, :external_uid)
63
+ def create_params
64
+ params
65
+ .require(:group)
66
+ .permit(:name, :provider, :ldap_uid, :external_uid, roles: []) do |p|
67
+ p[:roles] = p[:roles].compact_blank
68
+ end
69
+ end
70
+
71
+ def update_params
72
+ params.require(:group).permit(:name, roles: []).tap do |p|
73
+ p[:roles] = p[:roles].compact_blank
49
74
  end
75
+ end
50
76
 
51
77
  end
52
78
  end
@@ -18,8 +18,11 @@ module EgovUtils
18
18
  if @user && @user.password_change_possible?
19
19
  @token = @user.generate_reset_password_token
20
20
  EgovUtils::UserMailer.with(host: mailer_host).password_reset(@user, @token).deliver_later if @user.save
21
+ flash[:notice] = t('notice_reset_email_sent')
22
+ elsif !@user.password_change_possible?
23
+ flash[:error] = t('notice_pw_reset_not_possible')
21
24
  end
22
- redirect_to egov_utils.reset_passwords_path, notice: t('notice_reset_email_sent')
25
+ redirect_to egov_utils.reset_passwords_path
23
26
  end
24
27
 
25
28
  # New password for existing user - password reset
@@ -0,0 +1,59 @@
1
+ module EgovUtils
2
+ class RegistrationRequestsController < ApplicationController
3
+ before_action :find_registration_request, only: %i[show update]
4
+ before_action :require_login, except: %i[new create]
5
+
6
+ def index
7
+ @registration_requests =
8
+ RegistrationRequest.order(created_at: :desc).page(params[:page] || 1)
9
+ end
10
+
11
+ def show; end
12
+
13
+ def new
14
+ @registration_request = RegistrationRequest.new
15
+ end
16
+
17
+ def create
18
+ @registration_request = RegistrationRequests::Create.run!(create_params)
19
+ if @registration_request.valid?
20
+ redirect_to egov_utils.new_session_path,
21
+ notice: I18n.t('registration_request.create.success')
22
+ else
23
+ render :new
24
+ end
25
+ end
26
+
27
+ def update
28
+ RegistrationRequests::HandleRequest.run!(
29
+ update_params.merge(registration_request: @registration_request)
30
+ )
31
+
32
+ if @registration_request.valid?
33
+ redirect_to @registration_request,
34
+ notice: I18n.t('registration_request.update.success')
35
+ else
36
+ render :show
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def find_registration_request
43
+ @registration_request = EgovUtils::RegistrationRequest.find(params[:id])
44
+ end
45
+
46
+ def create_params
47
+ params
48
+ .require(:registration_request)
49
+ .permit(:mail, :firstname, :lastname, :organization, :note)
50
+ end
51
+
52
+ def update_params
53
+ params
54
+ .require(:registration_request)
55
+ .permit(:status, :reason, :internal_reason, roles: [])
56
+ end
57
+ end
58
+ end
59
+
@@ -1,24 +1,28 @@
1
- require_dependency "egov_utils/application_controller"
2
- require_dependency "egov_utils/auth_source"
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency 'egov_utils/application_controller'
4
+ require_dependency 'egov_utils/auth_source'
3
5
 
4
6
  module EgovUtils
5
7
  class UsersController < ApplicationController
8
+ skip_before_action :require_login, only: %i[new create confirm edit update]
9
+ before_action :set_providers, only: %i[index search]
6
10
 
7
- skip_before_action :require_login, only: [:new, :create, :confirm, :edit, :update]
8
-
9
- load_and_authorize_resource only: [:index, :new, :create, :show, :destroy, :edit, :update]
11
+ load_and_authorize_resource only: %i[index new create show destroy edit update]
10
12
 
11
13
  def index
12
- providers
13
- @groups = EgovUtils::Group.accessible_by(current_ability).order(:provider)
14
- @new_user = EgovUtils::User.new(generate_password: true)
14
+ params[:default_scope] ||= :without_deleted
15
15
  azahara_schema_index do |users|
16
16
  users.add_sort('provider')
17
17
  end
18
+ @entities =
19
+ @users.entities.includes(:groups).page(params[:page] || 1).per(50)
20
+ if params[:search]
21
+ @entities = @entities.search(params[:search])
22
+ end
18
23
  end
19
24
 
20
- def new
21
- end
25
+ def new; end
22
26
 
23
27
  def create
24
28
  @user.mail ||= @user.login
@@ -34,25 +38,27 @@ module EgovUtils
34
38
  end
35
39
  flash[:notice] = t('activerecord.successful.messages.created', model: User.model_name.human)
36
40
  end
37
- format.html{ redirect_to main_app.root_path }
38
- format.json{ render json: @user, status: :created }
41
+ format.html { redirect_to main_app.root_path }
42
+ format.json { render json: @user, status: :created }
39
43
  else
40
- format.html{ render 'new' }
41
- format.json{ render json: @user.errors.full_messages, status: :unprocessable_entity }
44
+ format.html { render 'new' }
45
+ format.json { render json: @user.errors.full_messages, status: :unprocessable_entity }
42
46
  end
43
47
  end
44
48
  end
45
49
 
46
- def show
47
- end
50
+ def show; end
48
51
 
49
- def edit
50
- end
52
+ def edit; end
51
53
 
52
54
  def update
53
55
  @user.update(update_params)
54
56
 
55
- redirect_to users_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
57
+ if @user.valid?
58
+ redirect_to users_path, notice: t('activerecord.successful.messages.updated', model: User.model_name.human)
59
+ else
60
+ render :edit
61
+ end
56
62
  end
57
63
 
58
64
  def destroy
@@ -81,29 +87,46 @@ module EgovUtils
81
87
  authorize!(:read, User)
82
88
  authorize!(:read, Group)
83
89
  user_results = []; group_results = []
84
- providers.each do |provider|
85
- user_results.concat( provider.search_user(params[:q]) )
86
- group_results.concat( provider.search_group(params[:q]) )
90
+ @providers.each do |provider|
91
+ user_results.concat(provider.search_user(params[:q]))
92
+ group_results.concat(provider.search_group(params[:q]))
87
93
  end if params[:q].present?
88
94
  respond_to do |format|
89
- format.json{ render json: {users: user_results, groups: group_results} }
95
+ format.json do
96
+ render json: { users: user_results, groups: group_results }
97
+ end
90
98
  end
91
99
  end
92
100
 
101
+ def unarchive
102
+ user = User.with_deleted.find(params[:id])
103
+ user.restore
104
+ redirect_to users_path, notice: t('activerecord.successful.messages.unarchived', model: User.model_name.human)
105
+ end
106
+
93
107
  private
94
108
 
95
- def providers
96
- @providers = EgovUtils::AuthSource.providers.collect{|p| EgovUtils::AuthSource.new(p)}
109
+ def set_providers
110
+ @providers = EgovUtils::AuthSource.providers.map do |p|
111
+ EgovUtils::AuthSource.new(p)
97
112
  end
113
+ end
98
114
 
99
- def create_params
100
- params_to_permit = [:login, :mail, :password, :password_confirmation, :provider, :firstname, :lastname]
101
- params_to_permit << :generate_password if current_user.logged?
102
- params.require(:user).permit(*params_to_permit)
103
- end
115
+ def create_params
116
+ params_to_permit = %i[login mail password password_confirmation provider firstname lastname]
117
+ params_to_permit << :generate_password if current_user.logged?
118
+ params.require(:user).permit(*params_to_permit)
119
+ end
104
120
 
105
- def update_params
106
- params.require(:user).permit(:days_before_inactive)
107
- end
121
+ def update_params
122
+ params
123
+ .require(:user)
124
+ .permit(
125
+ :days_before_inactive, :days_before_archive, :password,
126
+ :password_confirmation, roles: []
127
+ ).tap do |p|
128
+ p[:roles] = p[:roles].compact_blank
129
+ end
130
+ end
108
131
  end
109
132
  end
@@ -0,0 +1,12 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class CheckAutoAcceptJob
4
+ include Sidekiq::Worker
5
+
6
+ def perform(request_id)
7
+ CheckAutoAccept.run!(registration_request: request_id)
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,31 @@
1
+ module EgovUtils
2
+ class RegistrationRequestMailer < ApplicationMailer
3
+ before_action { @host = params && params[:host] || Rails.application.config.action_mailer.default_url_options[:host] }
4
+
5
+ def created(request_id)
6
+ @request = EgovUtils::RegistrationRequest.find(request_id)
7
+
8
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.created.subject'))
9
+ end
10
+
11
+ def accepted(request_id, user_id, password)
12
+ @request = EgovUtils::RegistrationRequest.find(request_id)
13
+ @user = User.find(user_id)
14
+ @password = password
15
+
16
+ mail(to: @user.mail, subject: I18n.t('mailers.registration_requests.accepted.subject'))
17
+ end
18
+
19
+ def auto_accepted(request_id)
20
+ @request = EgovUtils::RegistrationRequest.find(request_id)
21
+
22
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.auto_accepted.subject'))
23
+ end
24
+
25
+ def rejected(request_id)
26
+ @request = EgovUtils::RegistrationRequest.find(request_id)
27
+
28
+ mail(to: @request.mail, subject: I18n.t('mailers.registration_requests.rejected.subject'))
29
+ end
30
+ end
31
+ end
@@ -25,9 +25,7 @@ module EgovUtils
25
25
 
26
26
  def ldap_members
27
27
  if provider.present?
28
- Rails.cache.fetch("#{cache_key}/ldap_members", expires_in: 2.hours) do
29
- auth_source.group_members(ldap_dn)
30
- end
28
+ auth_source.group_members(ldap_dn)
31
29
  else
32
30
  []
33
31
  end
@@ -0,0 +1,21 @@
1
+ module EgovUtils
2
+ class RegistrationRequest < ApplicationRecord
3
+ validates :mail, :firstname, :lastname, :organization, presence: true
4
+ validate :check_user_already_exists!
5
+
6
+ attr_accessor :roles
7
+
8
+ def fullname
9
+ "#{firstname} #{lastname}"
10
+ end
11
+
12
+ private
13
+
14
+ def check_user_already_exists!
15
+ return unless User.find_by(mail: mail)
16
+
17
+ errors.add(:mail, :taken)
18
+ end
19
+ end
20
+ end
21
+
@@ -3,7 +3,13 @@ require 'request_store_rails'
3
3
 
4
4
  module EgovUtils
5
5
  class User < Principal
6
+ acts_as_paranoid without_default_scope: true
7
+
6
8
  DEFAULT_ROLE = nil
9
+ SEARCH_FIELDS = [
10
+ 'login', 'firstname', 'lastname', 'mail',
11
+ "CONCAT(firstname, ' ', lastname)", "CONCAT(lastname, ' ', firstname)"
12
+ ].freeze
7
13
 
8
14
  has_and_belongs_to_many :groups
9
15
 
@@ -36,6 +42,12 @@ module EgovUtils
36
42
  not_in_group(group).where(provider: nil)
37
43
  }
38
44
 
45
+ scope :search, lambda { |search_term|
46
+ search_term = search_term.to_s
47
+ term = SEARCH_FIELDS.map { |field| "#{field} ILIKE :search" }.join(' OR ')
48
+ where(term, search: "%#{sanitize_sql_like(search_term)}%")
49
+ }
50
+
39
51
  attribute :generate_password, :boolean, default: false
40
52
 
41
53
  def self.authenticate(login, password, active_only=true)
@@ -0,0 +1,12 @@
1
+ module EgovUtils
2
+ class ArchiveUsers
3
+ def call
4
+ EgovUtils::User
5
+ .where.not(days_before_archive: nil, active: true).each do |user|
6
+ next if user.last_login_at > Time.now - user.days_before_archive.days
7
+
8
+ user.destroy
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ module EgovUtils
2
+ class RefreshGroups
3
+
4
+ def call
5
+ hsh = groups.each_with_object({}) do |group, memo|
6
+ infos = group.ldap_members
7
+ infos.each do |info|
8
+ memo[info] ||= []
9
+ memo[info] << group
10
+ end
11
+ end
12
+
13
+ hsh.each do |info, groups|
14
+ user = EgovUtils::User.find_by(login: info[:login])
15
+ next unless user
16
+
17
+ all_groups = user.groups.where(ldap_uid: nil) + groups
18
+ user.update(info.merge(groups: all_groups))
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def groups
25
+ EgovUtils::Group.where.not(ldap_uid: nil)
26
+ end
27
+ end
28
+ end
@@ -6,7 +6,7 @@ module EgovUtils
6
6
  end
7
7
 
8
8
  def call
9
- group_ids = (current_non_ldap_group + ldap_groups).compact.map(&:id)
9
+ group_ids = (current_non_ldap_groups + ldap_groups).compact.map(&:id)
10
10
  user.group_ids = group_ids
11
11
  user
12
12
  end
@@ -18,14 +18,13 @@ module EgovUtils
18
18
  def ldap_groups
19
19
  return [] if user.provider.blank?
20
20
 
21
- @ldap_groups ||= begin
21
+ @ldap_groups ||=
22
22
  EgovUtils::Group.where(provider: user.provider).to_a.select do |g|
23
23
  user.auth_source.member?(user.ldap_dn, g.external_uid)
24
24
  end
25
- end
26
25
  end
27
26
 
28
- def current_non_ldap_group
27
+ def current_non_ldap_groups
29
28
  @current_non_ldap_groups ||= user.groups.where(ldap_uid: nil)
30
29
  end
31
30
  end
@@ -0,0 +1,31 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class CheckAutoAccept < ActiveInteraction::Base
4
+ record :registration_request, class: 'EgovUtils::RegistrationRequest'
5
+
6
+ def execute
7
+ member = nil
8
+ EgovUtils::Group.where.not(provider: nil).detect do |g|
9
+ member = g.ldap_members.detect do |m|
10
+ m[:login] == registration_request.mail
11
+ end
12
+ end
13
+
14
+ return unless member
15
+
16
+ registration_request.update(
17
+ status: 'accepted',
18
+ internal_note:
19
+ 'Automaticky schválen na základě členství v LDAP skupině'
20
+ )
21
+
22
+ EgovUtils::RegistrationRequestMailer
23
+ .auto_accepted(registration_request.id)
24
+ .deliver_now
25
+
26
+ registration_request
27
+ end
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,25 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class Create < ActiveInteraction::Base
4
+ string :mail
5
+ string :firstname
6
+ string :lastname
7
+ string :organization
8
+ string :note
9
+
10
+ def execute
11
+ request = RegistrationRequest.create(inputs.merge(status: :pending))
12
+
13
+ if request.persisted?
14
+ EgovUtils::RegistrationRequestMailer.created(request.id).deliver_now
15
+ CheckAutoAcceptJob.perform_async(request.id)
16
+ else
17
+ errors.merge!(request.errors)
18
+ end
19
+
20
+ request
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,57 @@
1
+ module EgovUtils
2
+ module RegistrationRequests
3
+ class HandleRequest < ActiveInteraction::Base
4
+ record :registration_request, class: 'EgovUtils::RegistrationRequest'
5
+ string :status
6
+ string :reason, default: nil
7
+ string :internal_reason, default: nil
8
+ array :roles, default: [] do
9
+ string
10
+ end
11
+
12
+ def execute
13
+ registration_request.update(
14
+ status: status,
15
+ reason: reason,
16
+ internal_reason: internal_reason
17
+ )
18
+
19
+ case status
20
+ when 'accepted'
21
+ user = create_user!
22
+ EgovUtils::RegistrationRequestMailer
23
+ .accepted(registration_request.id, user.id, password)
24
+ .deliver_now
25
+ when 'rejected'
26
+ EgovUtils::RegistrationRequestMailer
27
+ .rejected(registration_request.id)
28
+ .deliver_now
29
+ end
30
+
31
+ registration_request
32
+ end
33
+
34
+ private
35
+
36
+ def create_user!
37
+ user = User.create(
38
+ mail: registration_request.mail,
39
+ login: registration_request.mail,
40
+ firstname: registration_request.firstname,
41
+ lastname: registration_request.lastname,
42
+ password: password,
43
+ password_confirmation: password,
44
+ roles: roles.compact_blank,
45
+ must_change_password: true,
46
+ active: true,
47
+ last_login_at: Time.current
48
+ )
49
+ end
50
+
51
+ def password
52
+ @password ||= SecureRandom.hex(8)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
@@ -0,0 +1,12 @@
1
+ %h1= t('.title')
2
+ = bootstrap_form_for(current_user, url: current_user_path) do |form|
3
+ = form.text_field :login
4
+ = form.text_field :firstname
5
+ = form.text_field :lastname
6
+ .passwords
7
+ %h2= t('.password_change')
8
+ %em= t('.password_change_note')
9
+ = form.password_field :password
10
+ = form.password_field :password_confirmation
11
+ = form.submit
12
+
@@ -1 +1,6 @@
1
1
  = form.text_field(:name)
2
+ = bootstrap_form_for(@group) do |f|
3
+ = f.text_field :name
4
+ = f.collection_check_boxes :roles, EgovUtils::UserUtils::Role.roles, :first, ->(role) { I18n.t("roles.#{role.first}") }
5
+ .form-actions
6
+ = f.submit
@@ -18,8 +18,3 @@
18
18
  %td.roles{data: {roles: group.roles, id: group.id}}= group.roles.join(', ')
19
19
  - else
20
20
  %td
21
-
22
- :javascript
23
- $(function(){
24
- $('#groups tbody').roles({ url: '#{roles_path(entity_class: 'EgovUtils::Group')}' });
25
- });
@@ -0,0 +1,4 @@
1
+ %h1= t('.title')
2
+
3
+ = render 'form'
4
+
@@ -1,21 +1,30 @@
1
- %ul.nav.nav-tabs{role: 'tablist'}
2
- %li.nav-item
3
- = link_to(EgovUtils::User.model_name.human(count: :other), users_path, id: 'users_tab', class: 'nav-link', 'data-toggle'=>'tab', 'aria-controls'=>'users_container')
4
- %li.nav-item
5
- = link_to(EgovUtils::Group.model_name.human(count: :other), groups_path, id: 'groups_tab', class: 'nav-link active', 'data-toggle'=>'tab', 'aria-controls'=>'groups_container')
1
+ %h1= EgovUtils::Group.model_name.human(count: 2)
6
2
 
7
- .tab-content
8
- #users_container.tab-pane.fade{role: 'tabpanel', 'aria-labelledby'=>'users_tab'}
9
- = render 'egov_utils/users/users_tab', users: @users
10
- #groups_container.tab-pane.fade.show.active{role: 'tabpanel', 'aria-labelledby'=>'groups_tab'}
11
- = render 'egov_utils/groups/groups_tab', groups: @groups
12
- #create_container.tab-pane.fade{role: 'tabpanel', 'aria-labelledby'=>'create_tab'}
13
- %h3= t('label_ldap')
14
- = render 'egov_utils/users/ldap_search'
15
- %h3= t('label_new')
16
- = bootstrap_form_for(EgovUtils::User.new) do |f|
17
- = render 'egov_utils/users/form', form: f
3
+ = link_to t('helpers.action.egov_utils.group.new'), egov_utils.new_group_path, class: 'btn btn-primary'
18
4
 
19
- $.ajax('url').done(function(response){
20
- $('#cast-2-rizeni-pred-soudem-prvniho-stupne').html(response);
21
- });
5
+ %table.table.table-striped
6
+ %thead
7
+ %tr
8
+ %th= EgovUtils::Group.human_attribute_name('name')
9
+ %th= EgovUtils::Group.human_attribute_name('provider')
10
+ %th= EgovUtils::Group.human_attribute_name('roles')
11
+ %th= t('label_actions')
12
+ %tbody
13
+ - if @groups.empty?
14
+ %tr
15
+ %td{colspan: 4}= t('label_no_entries')
16
+ - @groups.each do |group|
17
+ %tr
18
+ %td= link_to(group.name, group)
19
+ %td= group.provider
20
+ %td= group.roles.map { I18n.t("roles.#{_1}") }.join(', ')
21
+ %td
22
+ - if can?(:manage, group)
23
+ = link_to(t('label_edit'), edit_group_path(group), class: 'btn btn-secondary btn-sm')
24
+
25
+ .row
26
+ .col-md-4
27
+ = page_entries_info @groups
28
+ .col-md-4
29
+ = paginate @groups
30
+ .col-md-4
@@ -0,0 +1,4 @@
1
+ %h1= t('.title')
2
+
3
+ = render 'form'
4
+
@@ -0,0 +1,12 @@
1
+ <p>
2
+ v aplikaci <%= t(:app_name) %> Vám byl vytvořen přístup.
3
+ Vaše přístupové údaje jsou:
4
+ </p>
5
+ <ul>
6
+ <li>login: <%= @user.login %></li>
7
+ <li>heslo: <%= @password %></li>
8
+ </ul>
9
+
10
+ <p>
11
+ Po prvním přihlášení budete vyzváni ke změně hesla.
12
+ </p>
@@ -0,0 +1,8 @@
1
+ <p>
2
+ Vaše žádost o registraci do aplikace <%= t(:app_name) %> byla automaticky schválena.
3
+ </p>
4
+
5
+ <p>
6
+ Do aplikace se můžete přihlásit za pomoci vašeho emailu, který jste zadali při žádosti a hesla, které používáte do jiných systémů MSp.
7
+ </p>
8
+
@@ -0,0 +1,12 @@
1
+ <p>
2
+ Vaše žádost o registraci do aplikace <%= t(:app_name) %> byla přijata.
3
+ </p>
4
+
5
+ <ul>
6
+ <li>E-mail: <%= @request.mail %></li>
7
+ <li>Jméno: <%= @request.firstname %></li>
8
+ <li>Příjmení: <%= @request.lastname %></li>
9
+ <li>Organizace: <%= @request.organization %></li>
10
+ <li>Poznámka: <%= @request.note %></li>
11
+ </ul>
12
+
@@ -0,0 +1,6 @@
1
+ <p>
2
+ vaše žádost o registraci do aplikace <%= t(:app_name) %> byla zamítnuta.
3
+ </p>
4
+
5
+ <p>Odůvodnění: <%= @request.note %></p>
6
+
@@ -0,0 +1,29 @@
1
+ %h1= t('.title')
2
+
3
+ %table.table.table-striped
4
+ %thead
5
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('fullname')
6
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('created_at')
7
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('status')
8
+ %th= t('label_actions')
9
+ %tbody
10
+ - if @registration_requests.empty?
11
+ %tr
12
+ %td{colspan: 4}= t('label_no_entries')
13
+ - @registration_requests.each do |request|
14
+ %tr
15
+ %td
16
+ %div= request.fullname
17
+ %small= request.mail
18
+ %td= l(request.created_at)
19
+ %td= t("registration_request.statuses.#{request.status}")
20
+ %td
21
+ = link_to t('.show'), egov_utils.registration_request_path(request), class: 'btn btn-secondary btn-sm'
22
+
23
+ .row
24
+ .col-md-4
25
+ = page_entries_info @registration_requests
26
+ .col-md-4
27
+ = paginate @registration_requests
28
+ .col-md-4
29
+
@@ -0,0 +1,9 @@
1
+ %h1= t('.title')
2
+
3
+ = bootstrap_form_for(@registration_request) do |f|
4
+ = f.text_field(:mail)
5
+ = f.text_field(:firstname)
6
+ = f.text_field(:lastname)
7
+ = f.text_field(:organization)
8
+ = f.text_field(:note)
9
+ = f.submit t(:label_registration_request)
@@ -0,0 +1,51 @@
1
+ %h1= t('.title', name: @registration_request.fullname)
2
+
3
+ %table.table.table-striped
4
+ %tbody
5
+ %tr
6
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('mail')
7
+ %td= @registration_request.mail
8
+ %tr
9
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('firstname')
10
+ %td= @registration_request.firstname
11
+ %tr
12
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('lastname')
13
+ %td= @registration_request.lastname
14
+ %tr
15
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('organization')
16
+ %td= @registration_request.organization
17
+ %tr
18
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('note')
19
+ %td= @registration_request.note
20
+ %tr
21
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('created_at')
22
+ %td= l(@registration_request.created_at)
23
+ %tr
24
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('status')
25
+ %td= t("registration_request.statuses.#{@registration_request.status}")
26
+ - if @registration_request.status != 'pending'
27
+ %tr
28
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('reason')
29
+ %td= @registration_request.reason
30
+ %tr
31
+ %th= EgovUtils::RegistrationRequest.human_attribute_name('internal_reason')
32
+ %td= @registration_request.internal_reason
33
+
34
+ - if @registration_request.status == 'pending'
35
+ = bootstrap_form_for(@registration_request, url: '#') do |f|
36
+ = f.text_area(:reason)
37
+ = f.text_area(:internal_reason)
38
+ = f.hidden_field(:status, value: nil)
39
+ = f.collection_check_boxes :roles, EgovUtils::UserUtils::Role.roles, :first, ->(role) { I18n.t("roles.#{role.first}") }
40
+
41
+ = f.submit t('.accept'), class: 'btn btn-success', data: { value: 'accepted' }
42
+ = f.submit t('.reject'), class: 'btn btn-danger', data: { value: 'rejected' }
43
+
44
+ :javascript
45
+ $(function() {
46
+ $('input[type=submit]').click(function(e) {
47
+ var status = $(this).data('value');
48
+ $('#registration_request_status').val(status);
49
+ });
50
+ });
51
+
@@ -6,3 +6,6 @@
6
6
  = link_to t('label_signup'), egov_utils.new_user_path, class: 'btn btn-secondary'
7
7
  - if EgovUtils::Settings.allow_password_reset?
8
8
  = link_to t('label_forgotten_password'), egov_utils.reset_passwords_path
9
+
10
+ %br
11
+ = link_to t('.registration_request'), new_registration_request_path
@@ -1,4 +1,13 @@
1
+ %h1= t('.title')
2
+
1
3
  = bootstrap_form_for(@user) do |f|
2
4
  = f.text_field :days_before_inactive
5
+ = f.text_field :days_before_archive
6
+ = f.collection_check_boxes :roles, EgovUtils::UserUtils::Role.roles, :first, ->(role) { I18n.t("roles.#{role.first}") }
7
+ - if @user.password_change_possible?
8
+ %h2= t('.password_change')
9
+ %em= t('.password_change_note')
10
+ = f.password_field :password
11
+ = f.password_field :password_confirmation
3
12
  .form-actions
4
13
  = f.submit
@@ -1,26 +1,43 @@
1
- %ul.nav.nav-tabs{role: 'tablist'}
2
- %li.nav-item
3
- = link_to(EgovUtils::User.model_name.human(count: :other), '#users_container', id: 'users_tab', class: 'nav-link active', 'data-toggle'=>'tab', 'aria-controls'=>'users_container')
4
- %li.nav-item
5
- = link_to(EgovUtils::Group.model_name.human(count: :other), '#groups_container', id: 'groups_tab', class: 'nav-link', 'data-toggle'=>'tab', 'aria-controls'=>'groups_container')
6
- %li.nav-item.dropdown
7
- %a.nav-link.dropdown-toggle{'data-toggle'=>'dropdown', 'href'=>'#', 'role'=>'button'}
8
- = t('label_new')
9
- .dropdown-menu
10
- = link_to(t('label_new'), '#create', id: 'create_tab', class: 'dropdown-item', 'data-toggle'=>'tab', 'aria-controls'=>'create')
11
- = link_to(t('label_ldap'), '#create_ldap', id: 'create_tab', class: 'dropdown-item', 'data-toggle'=>'tab', 'aria-controls'=>'create_ldap')
1
+ %h1= EgovUtils::User.model_name.human(count: 2)
12
2
 
13
- .tab-content
14
- #users_container.tab-pane.fade.show.active{role: 'tabpanel', 'aria-labelledby'=>'users_tab'}
15
- = render 'egov_utils/users/users_tab', users: @users
16
- #groups_container.tab-pane.fade{role: 'tabpanel', 'aria-labelledby'=>'groups_tab'}
17
- = render 'egov_utils/groups/groups_tab', groups: @groups
18
- #create_ldap.tab-pane.fade{role: 'tabpanel', 'aria-labelledby'=>'create_tab'}
19
- %h3= t('label_ldap')
20
- = render 'egov_utils/users/ldap_search'
21
- #create.tab-pane.fade{role: 'tabpanel', 'aria-labelledby'=>'create_tab'}
22
- %h3= t('label_new')
23
- = bootstrap_form_for(@new_user) do |f|
24
- = render 'egov_utils/users/form', form: f
25
- .form-actions
26
- = f.submit
3
+ = bootstrap_form_tag(url: egov_utils.users_path, method: :get, layout: :inline) do |f|
4
+ .form-group
5
+ = f.text_field :search, value: params[:search], label: false, placeholder: t('label_search'), skip_label: true
6
+ = f.submit 'Vyhledat', class: 'btn btn-primary btn-sm'
7
+
8
+ %table.table.table-striped
9
+ %thead
10
+ %th= EgovUtils::User.human_attribute_name('fullname')
11
+ %th= EgovUtils::User.human_attribute_name('provider')
12
+ %th= EgovUtils::User.human_attribute_name('roles')
13
+ %th= EgovUtils::User.human_attribute_name('groups')
14
+ %th= t('label_actions')
15
+ %tbody
16
+ - if @entities.empty?
17
+ %tr
18
+ %td{colspan: 4}= t('label_no_entries')
19
+ - @entities.each do |user|
20
+ %tr
21
+ %td
22
+ %div= user.fullname
23
+ %small= user.login
24
+ %td= 'LDAP' if user.provider
25
+ %td= user.all_role_names.map { I18n.t("roles.#{_1}") }.join(', ')
26
+ %td= user.groups.map(&:name).join(', ')
27
+ %td
28
+ - unless user.active?
29
+ = button_to(t('label_approve'), approve_user_path(user), class: 'btn btn-primary btn-sm')
30
+ - if can?(:edit, user)
31
+ = link_to(t('label_edit'), edit_user_path(user), class: 'btn btn-secondary btn-sm')
32
+ - if can?(:delete, user)
33
+ - if user.deleted?
34
+ = button_to(t('label_unarchive'), unarchive_user_path(user), method: :patch, class: 'btn btn-danger btn-sm')
35
+ - else
36
+ = button_to(t('label_archive'), user_path(user), method: :delete, class: 'btn btn-danger btn-sm')
37
+
38
+ .row
39
+ .col-md-4
40
+ = page_entries_info @entities
41
+ .col-md-4
42
+ = paginate @entities
43
+ .col-md-4
@@ -42,6 +42,7 @@ cs:
42
42
  notice_signeup_with_mail: Registrace proběhla úspěšně, byl Vám odeslán potvrzovací e-mail, prosím zkontrolujte svou poštu.
43
43
  notice_password_changed: Heslo bylo úspěšně změněno
44
44
  notice_reset_email_sent: E-mail s instrukcemi pro změnu hesla byl odeslán na zadanou e-mailovou adresu.
45
+ notice_pw_reset_not_possible: Není možné resetovat heslo, protože váš účet je spravován mimo databázi aplikace VTS. Vaše přihlašovací heslo je stejné jako do ostatních systémů MSp. V případě nutnosti se, prosím, obraťte na technickou podporu Vaší organizace.
45
46
  success_user_confirm: Váše e-mailová adresa byla potvrzena. Nyní se již můžete přihlásit.
46
47
  error_password_expired: Platnost vašeho hesla vypršela. Prosím změňte ho.
47
48
  warning_password_not_changed: Heslo nebylo změněno, zadali jste všechna hesla správně?
@@ -68,6 +69,9 @@ cs:
68
69
  label_add_group_member: Přidat uživatele
69
70
  label_forgotten_password: Zapomněli jste heslo?
70
71
  label_reset_password: Obnova hesla
72
+ label_archive: Archivovat
73
+ label_unarchive: Obnovit
74
+ label_registration_request: Zažádat o přístup
71
75
 
72
76
  text_born_on_at: "Narozen %{date} v %{place}"
73
77
 
@@ -80,17 +84,22 @@ cs:
80
84
  models: &my_models
81
85
  egov_utils/user:
82
86
  one: Uživatel
83
- other: Uživatelé
87
+ few: Uživatelé
88
+ other: Uživatelů
84
89
  egov_utils/group:
85
90
  one: Skupina
86
- other: Skupiny
91
+ few: Skupiny
92
+ other: Skupin
87
93
  egov_utils/address:
88
94
  one: Adresa
89
- other: Adresy
95
+ few: Adresy
96
+ other: Adres
90
97
 
91
98
  model_attributes: &my_attributes
92
99
  egov_utils/user:
93
100
  days_before_inactive: Počet dní od posledního přihlášení před deaktivací
101
+ days_before_archive: Počet dní od deaktivace před automatickou archivací
102
+ groups: Skupiny
94
103
  login: Přihlašovací email
95
104
  mail: E-mail
96
105
  password_confirmation: Potvrzení hesla
@@ -98,8 +107,10 @@ cs:
98
107
  lastname: Příjmení
99
108
  fullname: Jméno a příjmení
100
109
  roles: Role
110
+ provider: Typ
101
111
  generate_password: Generovat heslo
102
112
  egov_utils/group:
113
+ name: 'Název'
103
114
  roles: Role
104
115
  egov_utils/address:
105
116
  full_address: Adresa
@@ -131,6 +142,17 @@ cs:
131
142
  name: Název
132
143
  ico: IČO
133
144
  legal_form: Právní forma
145
+ egov_utils/registration_request:
146
+ mail: E-mail
147
+ firstname: Jméno
148
+ lastname: Příjmení
149
+ organization: Organizace
150
+ note: Poznámka
151
+ created_at: Vytvořeno
152
+ status: Status
153
+ fullname: Jméno
154
+ reason: Odůvodnění
155
+ internal_reason: Interní poznámka
134
156
 
135
157
  models_errors: &my_model_errors
136
158
  profile:
@@ -139,6 +161,7 @@ cs:
139
161
  model_help_messages: &my_help_messages
140
162
  egov_utils/user:
141
163
  days_before_inactive: Pokud ponecháte pole prázdné, uživatelský účet nebude expirovat.
164
+ days_before_archive: Pokud ponecháte pole prázdné, uživatelský účet nebude expirovat.
142
165
  generate_password: Heslo bude vygenerováno a posláno uživateli na e-mail, při prvním přihlášení bude heslo muset změnit.
143
166
 
144
167
 
@@ -156,6 +179,8 @@ cs:
156
179
  mail: E-mailová adresa
157
180
 
158
181
  submits: &my_submits
182
+ group:
183
+ update: 'Aktualizovat skupinu'
159
184
  user:
160
185
  update: Aktualizovat uživatele
161
186
  password_change:
@@ -181,8 +206,13 @@ cs:
181
206
  created: "%{model} úspěšně vytvořen"
182
207
  updated: "%{model} úspěšně aktualizován"
183
208
  destroyed: "%{model} úspěšně smazán"
209
+ unarchived: "%{model} úspěšně obnoven"
184
210
 
185
211
  helpers:
212
+ action:
213
+ egov_utils:
214
+ group:
215
+ new: 'Nová skupina'
186
216
  label:
187
217
  <<: *my_labels
188
218
  submit:
@@ -196,3 +226,51 @@ cs:
196
226
  in_past: Musí být v minulosti
197
227
  after_1920: Musí být po roce 1920
198
228
  fileuid_format: Nesprávný tvar spisové značky
229
+
230
+ egov_utils:
231
+ current_users:
232
+ edit:
233
+ title: Úprava profilu
234
+ password_change: Změna hesla
235
+ password_change_note: Pokud necháte pole prázdná, heslo nebude aktualizováno.
236
+ groups:
237
+ edit:
238
+ title: 'Úprava skupiny'
239
+ registration_requests:
240
+ new:
241
+ title: 'Žádost o registraci'
242
+ index:
243
+ show: 'Detail žádosti'
244
+ title: 'Žádosti o přístup do aplikace'
245
+ show:
246
+ title: 'Žádost o registraci - %{name}'
247
+ accept: 'Přijmout žádost'
248
+ reject: 'Odmítnout žádost'
249
+ sessions:
250
+ new:
251
+ registration_request: 'Žádost o registraci'
252
+ users:
253
+ edit:
254
+ title: Úprava uživatele
255
+ password_change: Změna hesla
256
+ password_change_note: Pokud necháte pole prázdná, heslo nebude aktualizováno.
257
+ registration_request:
258
+ statuses:
259
+ pending: K vyřízení
260
+ accepted: Schválen
261
+ rejected: Zamítnut
262
+ create:
263
+ success: 'Žádost o registraci úspěšně vytvořena. Váš požadavek bude vyřízen v nejbližších dnech.'
264
+ update:
265
+ success: 'Žádost úspěšně uložena'
266
+
267
+ mailers:
268
+ registration_requests:
269
+ created:
270
+ subject: 'Žádost o vytvoření účtu v aplikaci VTS přijata'
271
+ accepted:
272
+ subject: 'Žádost o vytvoření účtu v aplikaci VTS schválena'
273
+ auto_accepted:
274
+ subject: 'Žádost o vytvoření účtu v aplikaci VTS přijata'
275
+ rejected:
276
+ subject: 'Žádost o vytvoření účtu v aplikaci VTS odmítnuta'
data/config/routes.rb CHANGED
@@ -10,7 +10,10 @@ EgovUtils::Engine.routes.draw do
10
10
  get :search, on: :collection
11
11
  post :approve, on: :member
12
12
  get :confirm, on: :member
13
+ patch :unarchive, on: :member
13
14
  end
15
+ resource :current_user, only: %i[edit update]
16
+ resources :registration_requests, only: %i[new create show index update]
14
17
 
15
18
  resources :people do
16
19
  get :addresses
@@ -24,7 +27,7 @@ EgovUtils::Engine.routes.draw do
24
27
  end
25
28
  resources :roles
26
29
 
27
- resources :passwords, only: [:index, :edit, :update] do
30
+ resources :passwords, only: %i[index edit update] do
28
31
  collection do
29
32
  get 'reset'
30
33
  post 'send_reset_token'
@@ -38,6 +41,8 @@ EgovUtils::Engine.routes.draw do
38
41
  get '/address/validate_ruian' => 'addresses#validate_ruian', as: :validate_ruian
39
42
  get '/organizations/district_courts' => 'organizations#district_courts', as: :district_courts_organizations
40
43
 
44
+ resource :settings, only: %i[show update]
45
+
41
46
  namespace :redmine do
42
47
  resources :issues, only: :index
43
48
  end
@@ -0,0 +1,6 @@
1
+ class AddDeletedAtToEgovUtilsUsers < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :egov_utils_users, :deleted_at, :datetime
4
+ add_index :egov_utils_users, :deleted_at
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ class CreateEgovUtilsRegistrationRequests < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :egov_utils_registration_requests do |t|
4
+ t.string :mail
5
+ t.string :firstname
6
+ t.string :lastname
7
+ t.string :organization
8
+ t.string :note
9
+ t.string :status
10
+ t.string :reason
11
+ t.string :internal_reason
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ class AddDaysBeforeArchiveToEgovUtilsUsers < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :egov_utils_users, :days_before_archive, :integer, default: 30
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module EgovUtils
2
- VERSION = '1.1.1'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egov_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondřej Ezr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-26 00:00:00.000000000 Z
11
+ date: 2023-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '5.1'
61
+ - !ruby/object:Gem::Dependency
62
+ name: active_interaction
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: haml
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -510,11 +524,13 @@ files:
510
524
  - app/attributes/egov_utils/region.rb
511
525
  - app/controllers/egov_utils/addresses_controller.rb
512
526
  - app/controllers/egov_utils/application_controller.rb
527
+ - app/controllers/egov_utils/current_users_controller.rb
513
528
  - app/controllers/egov_utils/groups_controller.rb
514
529
  - app/controllers/egov_utils/organizations_controller.rb
515
530
  - app/controllers/egov_utils/passwords_controller.rb
516
531
  - app/controllers/egov_utils/people_controller.rb
517
532
  - app/controllers/egov_utils/redmine/issues_controller.rb
533
+ - app/controllers/egov_utils/registration_requests_controller.rb
518
534
  - app/controllers/egov_utils/roles_controller.rb
519
535
  - app/controllers/egov_utils/sessions_controller.rb
520
536
  - app/controllers/egov_utils/users_controller.rb
@@ -525,7 +541,9 @@ files:
525
541
  - app/helpers/egov_utils/roles_helper.rb
526
542
  - app/helpers/egov_utils/users_helper.rb
527
543
  - app/jobs/egov_utils/application_job.rb
544
+ - app/jobs/egov_utils/registration_requests/check_auto_accept_job.rb
528
545
  - app/mailers/egov_utils/application_mailer.rb
546
+ - app/mailers/egov_utils/registration_request_mailer.rb
529
547
  - app/mailers/egov_utils/user_mailer.rb
530
548
  - app/models/ability.rb
531
549
  - app/models/egov_utils/abstract_person.rb
@@ -538,6 +556,7 @@ files:
538
556
  - app/models/egov_utils/natural_person.rb
539
557
  - app/models/egov_utils/person.rb
540
558
  - app/models/egov_utils/principal.rb
559
+ - app/models/egov_utils/registration_request.rb
541
560
  - app/models/egov_utils/user.rb
542
561
  - app/resources/egov_utils/legal_form.rb
543
562
  - app/resources/egov_utils/love.rb
@@ -549,7 +568,12 @@ files:
549
568
  - app/schemas/egov_utils/natural_person_schema.rb
550
569
  - app/schemas/egov_utils/person_schema.rb
551
570
  - app/schemas/egov_utils/user_schema.rb
571
+ - app/services/egov_utils/archive_users.rb
572
+ - app/services/egov_utils/refresh_groups.rb
552
573
  - app/services/egov_utils/refresh_user_groups.rb
574
+ - app/services/egov_utils/registration_requests/check_auto_accept.rb
575
+ - app/services/egov_utils/registration_requests/create.rb
576
+ - app/services/egov_utils/registration_requests/handle_request.rb
553
577
  - app/validators/birthday_validator.rb
554
578
  - app/validators/email_validator.rb
555
579
  - app/validators/fileuid_validator.rb
@@ -559,9 +583,12 @@ files:
559
583
  - app/views/common/_modal.html.haml
560
584
  - app/views/common/modal_action.js.erb
561
585
  - app/views/egov_utils/addresses/_form.html.haml
586
+ - app/views/egov_utils/current_users/edit.html.haml
562
587
  - app/views/egov_utils/groups/_form.html.haml
563
588
  - app/views/egov_utils/groups/_groups_tab.html.haml
589
+ - app/views/egov_utils/groups/edit.html.haml
564
590
  - app/views/egov_utils/groups/index.html.haml
591
+ - app/views/egov_utils/groups/new.html.haml
565
592
  - app/views/egov_utils/groups/new_users.html.haml
566
593
  - app/views/egov_utils/groups/show.html.haml
567
594
  - app/views/egov_utils/passwords/edit.html.haml
@@ -569,6 +596,13 @@ files:
569
596
  - app/views/egov_utils/passwords/reset.html.haml
570
597
  - app/views/egov_utils/people/_form.html.haml
571
598
  - app/views/egov_utils/redmine/issues/index.html.haml
599
+ - app/views/egov_utils/registration_request_mailer/accepted.html.erb
600
+ - app/views/egov_utils/registration_request_mailer/auto_accepted.html.erb
601
+ - app/views/egov_utils/registration_request_mailer/created.html.erb
602
+ - app/views/egov_utils/registration_request_mailer/rejected.html.erb
603
+ - app/views/egov_utils/registration_requests/index.html.haml
604
+ - app/views/egov_utils/registration_requests/new.html.haml
605
+ - app/views/egov_utils/registration_requests/show.html.haml
572
606
  - app/views/egov_utils/roles/index.html.haml
573
607
  - app/views/egov_utils/sessions/new.html.haml
574
608
  - app/views/egov_utils/user_mailer/account_information.html.erb
@@ -617,6 +651,9 @@ files:
617
651
  - db/migrate/20180424143207_add_titles_to_natural_people.rb
618
652
  - db/migrate/20220331113917_add_days_before_inactive_to_egov_utils_users.rb
619
653
  - db/migrate/20220624070709_migrate_person_residence_to_addresses.rb
654
+ - db/migrate/20230407114921_add_deleted_at_to_egov_utils_users.rb
655
+ - db/migrate/20230408123813_create_egov_utils_registration_requests.rb
656
+ - db/migrate/20230412063325_add_days_before_archive_to_egov_utils_users.rb
620
657
  - lib/azahara_schema_currency.rb
621
658
  - lib/azahara_schema_currency/aggregation_attribute_patch.rb
622
659
  - lib/azahara_schema_currency/association_attribute_patch.rb