58 lines
1.5 KiB
Ruby
58 lines
1.5 KiB
Ruby
class CreateAccount < ApplicationService
|
|
def initialize(args)
|
|
@username = args[:username]
|
|
@domain = args[:ou] || "kosmos.org"
|
|
@email = args[:email]
|
|
@password = args[:password]
|
|
@invitation = args[:invitation]
|
|
@confirmed = args[:confirmed]
|
|
end
|
|
|
|
def call
|
|
user = create_user_in_database
|
|
add_ldap_document
|
|
create_lndhub_account(user)
|
|
|
|
if @invitation.present?
|
|
update_invitation(user.id)
|
|
exchange_xmpp_contacts
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_user_in_database
|
|
User.create!(
|
|
cn: @username,
|
|
ou: @domain,
|
|
email: @email,
|
|
password: @password,
|
|
password_confirmation: @password,
|
|
confirmed_at: @confirmed ? DateTime.now : nil
|
|
)
|
|
end
|
|
|
|
def update_invitation(user_id)
|
|
@invitation.update! invited_user_id: user_id, used_at: DateTime.now
|
|
end
|
|
|
|
# TODO move to confirmation
|
|
# (and/or add email_confirmed to entry and use in login filter)
|
|
def add_ldap_document
|
|
hashed_pw = Devise.ldap_auth_password_builder.call(@password)
|
|
CreateLdapUserJob.perform_later(@username, @domain, @email, hashed_pw)
|
|
end
|
|
|
|
def exchange_xmpp_contacts
|
|
#TODO enable in development when we have easy setup of ejabberd etc.
|
|
return if Rails.env.development?
|
|
ExchangeXmppContactsJob.perform_later(@invitation.user, @username, @domain)
|
|
end
|
|
|
|
def create_lndhub_account(user)
|
|
#TODO enable in development when we have a local lndhub (mock?) API
|
|
return if Rails.env.development?
|
|
CreateLndhubAccountJob.perform_later(user)
|
|
end
|
|
end
|