class Lita::Handlers::Authorization

Provides a chat interface for administering authorization groups.

Public Instance Methods

add(response) click to toggle source

Adds a user to an authorization group. @param response [Lita::Response] The response object. @return [void]

# File lib/lita/handlers/authorization.rb, line 27
def add(response)
  toggle_membership(response, :add_user_to_group, "user_added", "user_already_in")
end
list(response) click to toggle source

Lists all authorization groups (or only the specified group) and the names of their members. @param response [Lita::Response] The response object. @return [void]

# File lib/lita/handlers/authorization.rb, line 42
def list(response)
  requested_group = response.args[1]
  output = get_groups_list(response.args[1])
  if output.empty?
    response.reply(empty_state_for_list(requested_group))
  else
    response.reply(output.join("\n"))
  end
end
remove(response) click to toggle source

Removes a user from an authorization group. @param response [Lita::Response] The response object. @return [void]

# File lib/lita/handlers/authorization.rb, line 34
def remove(response)
  toggle_membership(response, :remove_user_from_group, "user_removed", "user_not_in")
end

Private Instance Methods

empty_state_for_list(requested_group) click to toggle source
# File lib/lita/handlers/authorization.rb, line 54
def empty_state_for_list(requested_group)
  if requested_group
    t("empty_state_group", group: requested_group)
  else
    t("empty_state")
  end
end
get_groups_list(requested_group) click to toggle source
# File lib/lita/handlers/authorization.rb, line 62
def get_groups_list(requested_group)
  groups_with_users = robot.auth.groups_with_users
  if requested_group
    requested_group = requested_group.downcase.strip.to_sym
    groups_with_users.select! { |group, _| group == requested_group }
  end
  groups_with_users.map do |group, users|
    user_names = users.map(&:name).join(", ")
    "#{group}: #{user_names}"
  end
end
toggle_membership(response, method_name, success_key, failure_key) click to toggle source
# File lib/lita/handlers/authorization.rb, line 74
def toggle_membership(response, method_name, success_key, failure_key)
  return unless valid_message?(response)

  if robot.auth.public_send(method_name, response.user, @user, @group)
    response.reply t(success_key, user: @user.name, group: @group)
  else
    response.reply t(failure_key, user: @user.name, group: @group)
  end
end
valid_group?(response, identifier) click to toggle source
# File lib/lita/handlers/authorization.rb, line 84
def valid_group?(response, identifier)
  unless identifier && @group
    response.reply "#{t('format')}: #{robot.name} auth add USER GROUP"
    return
  end

  if @group.downcase.strip == "admins"
    response.reply t("admin_management")
    return
  end

  true
end
valid_message?(response) click to toggle source

Validates that incoming messages have the right format and a valid user. Also assigns the user and group to instance variables for the main methods to use later.

# File lib/lita/handlers/authorization.rb, line 101
def valid_message?(response)
  _command, identifier, @group = response.args

  return unless valid_group?(response, identifier)

  return unless valid_user?(response, identifier)

  true
end
valid_user?(response, identifier) click to toggle source
# File lib/lita/handlers/authorization.rb, line 111
def valid_user?(response, identifier)
  @user = User.fuzzy_find(identifier)

  if @user
    true
  else
    response.reply t("no_user_found", identifier: identifier)
    return
  end
end