diff --git a/Gemfile b/Gemfile index 4410ab9..8824e1b 100644 --- a/Gemfile +++ b/Gemfile @@ -59,6 +59,7 @@ group :development do gem 'listen', '~> 3.2' gem 'letter_opener' gem 'letter_opener_web' + gem 'faker' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 25dd2da..d80ab81 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -117,6 +117,8 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) + faker (3.0.0) + i18n (>= 1.8.11, < 2) faraday (2.7.1) faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) @@ -313,6 +315,7 @@ DEPENDENCIES devise_ldap_authenticatable dotenv-rails factory_bot_rails + faker faraday importmap-rails jbuilder (~> 2.7) diff --git a/app/services/create_account.rb b/app/services/create_account.rb index 3b733f1..fac6442 100644 --- a/app/services/create_account.rb +++ b/app/services/create_account.rb @@ -37,6 +37,7 @@ class CreateAccount < ApplicationService 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) @@ -49,6 +50,8 @@ class CreateAccount < ApplicationService end def create_lndhub_wallet(user) + #TODO enable in development when we have a local lndhub (mock?) API + return if Rails.env.development? CreateLndhubWalletJob.perform_later(user) end end diff --git a/app/services/ldap_service.rb b/app/services/ldap_service.rb index e6507d7..d68b992 100644 --- a/app/services/ldap_service.rb +++ b/app/services/ldap_service.rb @@ -10,6 +10,10 @@ class LdapService < ApplicationService res end + def add_attribute(dn, attr, value) + ldap_client.add_attribute dn, attr, value + end + def delete_entry(dn, interactive=false) puts "Deleting entry: #{dn}" if interactive res = ldap_client.delete dn: dn diff --git a/db/seeds.rb b/db/seeds.rb index 1beea2a..98ae840 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,7 +1,22 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). -# -# Examples: -# -# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) -# Character.create(name: 'Luke', movie: movies.first) +require 'sidekiq/testing' + +ldap = LdapService.new + +Sidekiq::Testing.inline! do + CreateAccount.call( + username: "admin", domain: "kosmos.org", email: "admin@example.com", + password: "admin is admin", confirmed: true + ) + + ldap.add_attribute "cn=admin,ou=kosmos.org,cn=users,dc=kosmos,dc=org", :admin, "true" + + 5.times do |n| + username = Faker::Name.unique.first_name.downcase + email = Faker::Internet.unique.email + + CreateAccount.call( + username: username, domain: "kosmos.org", email: email, + password: "user is user", confirmed: true + ) + end +end