#!/usr/bin/env ruby # frozen_string_literal: true require 'pwn' require 'optparse' opts = {} OptionParser.new do |options| options.banner = "USAGE: #{File.basename($PROGRAM_NAME)} [opts] " options.on('-sIP', '--ip=IP', '') { |s| opts[:ip] = s } options.on('-dPORT', '--dest-port=PORT', '') do |port| opts[:port] = port end options.on('-UAUSER', '--admin-username=AUSER', '') do |auser| opts[:admin_username] = auser end options.on('-PKEY', '--admin-password=KEY', '') do |akey| opts[:admin_api_key] = akey end options.on('-uNUSER', '--new-username=NUSER', '') do |nuser| opts[:new_username] = nuser end options.on('-pNPASS', '--new-password=NPASS', '') do |npass| opts[:new_password] = npass end options.on('-nNAME', '--new-fullname=NAME', '') do |fullname| opts[:new_fullname] = fullname end options.on('-eEMAIL', '--new-email=EMAIL', '') do |email| opts[:new_email] = email end end.parse! if opts.empty? puts `#{File.basename($PROGRAM_NAME)} --help` exit 1 end ip = opts[:ip].to_s.scrub port = opts[:port].to_i admin_username = opts[:admin_username] admin_api_key = opts[:admin_api_key] new_username = opts[:new_username] new_password = opts[:new_password] new_fullname = opts[:new_fullname] new_email = opts[:new_email] if port.positive? jenkins_obj = PWN::Plugins::Jenkins.connect( ip: ip, port: port, username: admin_username, api_key: admin_api_key ) else jenkins_obj = PWN::Plugins::Jenkins.connect( ip: ip, username: admin_username, api_key: admin_api_key ) end sleep 3 PWN::Plugins::Jenkins.create_user( jenkins_obj: jenkins_obj, username: new_username, password: new_password, fullname: new_fullname, email: new_email ) PWN::Plugins::Jenkins.disconnect(jenkins_obj: jenkins_obj) puts 'complete.'