49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "mail"
 | |
| 
 | |
| module Admin
 | |
|   module Commands
 | |
|     module Sessions
 | |
|       class Create
 | |
|         include Deps[
 | |
|           "repos.login_tokens_repo",
 | |
|           "repos.user_repo"
 | |
|                 ]
 | |
| 
 | |
|         def call(email:)
 | |
|           app_settings = Admin::Container["settings"]
 | |
|           user = user_repo.by_email(email: email)
 | |
| 
 | |
|           return unless user
 | |
| 
 | |
|           login_tokens_repo.delete_all
 | |
| 
 | |
|           token = login_tokens_repo.create(user_id: user.id, token: SecureRandom.uuid)
 | |
| 
 | |
|           Mail.defaults do
 | |
|             delivery_method :smtp, {
 | |
|               address: app_settings.smtp_server,
 | |
|               port: 587,
 | |
|               authentication: "plain",
 | |
|               openssl_verify_mode: "peer",
 | |
|               enable_starttls_auto: true
 | |
|             }
 | |
|           end
 | |
| 
 | |
|           Mail.delivery_method.settings[:user_name] = app_settings.smtp_username
 | |
|           Mail.delivery_method.settings[:password] = app_settings.smtp_password
 | |
| 
 | |
|           mail = Mail.new do
 | |
|             subject "Login to #{app_settings.site_name}"
 | |
|             body "#{app_settings.micropub_site_url}/admin/login/#{token.token}"
 | |
|           end
 | |
| 
 | |
|           mail[:to] = user.email
 | |
|           mail[:from] = app_settings.from_email
 | |
| 
 | |
|           mail.deliver
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |