class CreateAccount < ApplicationService def initialize(account:) @username = account[:username] @domain = account[:ou] || Setting.primary_domain @email = account[:email] @password = account[:password] @invitation = account[:invitation] @confirmed = account[:confirmed] end def call user = create_user_in_database add_ldap_document create_lndhub_account(user) if Setting.lndhub_enabled if @invitation.present? update_invitation(user.id) 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 def add_ldap_document hashed_pw = Devise.ldap_auth_password_builder.call(@password) CreateLdapUserJob.perform_later( username: @username, domain: @domain, email: @email, hashed_pw: hashed_pw, confirmed: @confirmed ) 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