Add account creation service
This commit is contained in:
parent
fd2ebc4ad3
commit
18df8fe449
5
app/services/application_service.rb
Normal file
5
app/services/application_service.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class ApplicationService
|
||||||
|
def self.call(*args, &block)
|
||||||
|
new(*args, &block).call
|
||||||
|
end
|
||||||
|
end
|
43
app/services/create_account.rb
Normal file
43
app/services/create_account.rb
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
class CreateAccount < ApplicationService
|
||||||
|
def initialize(args)
|
||||||
|
@username = args[:username]
|
||||||
|
@email = args[:email]
|
||||||
|
@password = args[:password]
|
||||||
|
@invited_by_id = args[:invited_by_id]
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
add_ldap_document
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def add_ldap_document
|
||||||
|
dn = "cn=#{@username},ou=kosmos.org,cn=users,dc=kosmos,dc=org"
|
||||||
|
attr = {
|
||||||
|
objectclass: ["top", "account", "person", "extensibleObject"],
|
||||||
|
cn: @username,
|
||||||
|
sn: @username,
|
||||||
|
uid: @username,
|
||||||
|
mail: @email,
|
||||||
|
userPassword: Devise.ldap_auth_password_builder.call(@password)
|
||||||
|
}
|
||||||
|
|
||||||
|
ldap_client.add(dn: dn, attributes: attr)
|
||||||
|
end
|
||||||
|
|
||||||
|
def ldap_client
|
||||||
|
ldap_client ||= Net::LDAP.new host: ldap_config['host'],
|
||||||
|
port: ldap_config['port'],
|
||||||
|
encryption: ldap_config['ssl'],
|
||||||
|
auth: {
|
||||||
|
method: :simple,
|
||||||
|
username: ldap_config['admin_user'],
|
||||||
|
password: ldap_config['admin_password']
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def ldap_config
|
||||||
|
ldap_config ||= YAML.load(ERB.new(File.read("#{Rails.root}/config/ldap.yml")).result)[Rails.env]
|
||||||
|
end
|
||||||
|
end
|
33
spec/services/create_account_spec.rb
Normal file
33
spec/services/create_account_spec.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe CreateAccount, type: :model do
|
||||||
|
let(:ldap_client_mock) { instance_double(Net::LDAP) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(service).to receive(:ldap_client).and_return(ldap_client_mock)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#add_ldap_document" do
|
||||||
|
let(:service) { CreateAccount.new(
|
||||||
|
username: 'halfinney',
|
||||||
|
email: 'halfinney@example.com',
|
||||||
|
password: 'remember-remember-the-5th-of-november'
|
||||||
|
)}
|
||||||
|
|
||||||
|
it "creates a new document with the correct attributes" do
|
||||||
|
expect(ldap_client_mock).to receive(:add).with(
|
||||||
|
dn: "cn=halfinney,ou=kosmos.org,cn=users,dc=kosmos,dc=org",
|
||||||
|
attributes: {
|
||||||
|
objectclass: ["top", "account", "person", "extensibleObject"],
|
||||||
|
cn: "halfinney",
|
||||||
|
sn: "halfinney",
|
||||||
|
uid: "halfinney",
|
||||||
|
mail: "halfinney@example.com",
|
||||||
|
userPassword: /^{SSHA512}.{171}=/
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
service.send(:add_ldap_document)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user