class OktaTerraformGenerator::CLI::GithubMembership

Public Instance Methods

run(argv = ARGV.dup) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 70
def run(argv = ARGV.dup)
  if argv.size == 1
    print_usage
    exit 1
  end

  setup(argv)
  generate
end

Private Instance Methods

add_login_and_github_handle(login_and_github_handle) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 113
def add_login_and_github_handle(login_and_github_handle)
  login, handle = login_and_github_handle(login_and_github_handle)

  return unless (github_handle = github_handle(handle))
  return if resource_name_exists? login

  add_to_resource_hash(login.to_s => {
                         'username' => github_handle,
                         'role'     => user_or_admin(login)
                       })
end
admins() click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 94
def admins
  @admin_group_id ||= okta_client.group_id(config[:okta_admin_group])
  @admins ||= list_group_github_handles(@admin_group_id).map { |u| u.profile.login.downcase.split('@').shift }.sort
end
generate() click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 138
def generate
  config[:okta_group].each do |okta_group|
    group_id = okta_client.group_id(okta_group)
    logins_and_github_handles(okta_group, group_id).sort_by { |x, _y| x }.each do |login_and_github_handle|
      add_login_and_github_handle(login_and_github_handle)
    end
  end

  write_tf_file('github_membership.tf', resources)
end
github_client() click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 86
def github_client
  @github_client ||= Octokit::Client.new(access_token: config[:github_token])
end
github_handle(handle) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 99
def github_handle(handle)
  github_client.user(handle).login
rescue Octokit::NotFound
  false
end
list_group_github_handles(group_id) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 105
def list_group_github_handles(group_id)
  okta_client.list_active_group_members(group_id).select { |user| user.profile.key?(:githubHandle) && !user.profile.githubHandle.empty? }
end
login_and_github_handle(login_and_github_handle) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 125
def login_and_github_handle(login_and_github_handle)
  # login  = Okta login
  # handle = GitHub handle
  login, handle = login_and_github_handle
  login = login.split('@').shift
  [login, handle]
end
logins_and_github_handles(okta_group, group_id) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 133
def logins_and_github_handles(okta_group, group_id)
  puts "Looking for active users in Okta group \"#{okta_group}\" (with group id: #{group_id}) and the \"githubHandle\" profile attribute set ... "
  list_group_github_handles(group_id).map { |u| [u.profile.login.downcase, u.profile.githubHandle.downcase] }
end
okta_client() click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 90
def okta_client
  @okta_client ||= Oktakit::Client.new(token: config[:okta_token], api_endpoint: config[:okta_endpoint])
end
setup(argv) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 82
def setup(argv)
  parse_options(argv)
end
user_or_admin(login) click to toggle source
# File lib/okta-terraform-generator/cli/github_membership.rb, line 109
def user_or_admin(login)
  admins.include?(login) ? 'admin' : 'member'
end