#!/usr/bin/env ruby environment = ENV.fetch("RACK_ENV", "development") require "dotenv/load" if environment == "development" abort "Ce script est réservé au développement." unless ENV.fetch("RACK_ENV", "development") == "development" require "io/console" require "rodauth" require_relative "../lib/database" console = IO.console or abort "Terminal interactif requis." console.print "Adresse électronique : " email = console.gets&.strip&.downcase abort "Adresse électronique obligatoire." if email.to_s.empty? existing_account = DB[:accounts] .where(Sequel.function(:lower, :email) => email) .count .positive? abort "Ce compte existe déjà." if existing_account console.print "Prénom : " first_name = console.gets&.strip console.print "Nom : " last_name = console.gets&.strip abort "Prénom et nom obligatoires." if first_name.to_s.empty? || last_name.to_s.empty? password = console.getpass("Mot de passe : ") confirmation = console.getpass("Confirmer le mot de passe : ") abort "Mot de passe obligatoire." if password.to_s.empty? abort "Les mots de passe ne correspondent pas." unless password == confirmation verified_status_id = DB[:account_statuses] .where(name: "Verified") .get(:id) abort "Statut Verified introuvable." unless verified_status_id console.puts console.puts "Compte : #{first_name} #{last_name} (#{email})" console.puts console.print "Confirmer la création ? [o/N] " abort "Opération annulée." unless %w[o oui].include?( console.gets&.strip&.downcase ) auth = Rodauth.lib do db DB enable :create_account already_logged_in { super() } end DB.transaction do auth.create_account( login: email, password: password ) account_id = auth.account_id_for_login(login: email) DB[:accounts] .where(id: account_id) .update(status_id: verified_status_id) DB[:members].insert( account_id: account_id, kind: "individual", first_name: first_name, last_name: last_name, organization_name: nil, core_member: false ) end puts "Compte de développement créé."