class KBSecret::CLI::Command::Session

The implementation of `kbsecret session`.

Constants

SUBCOMMANDS

The list of subcommands supported by `kbsecret session`.

Public Class Methods

new(argv) click to toggle source
Calls superclass method KBSecret::CLI::Command::Abstract::new
# File lib/kbsecret/cli/command/session.rb, line 11
        def initialize(argv)
          super(argv) do |cli|
            cli.slop cmds: SUBCOMMANDS do |o|
              o.banner = <<~HELP
                Usage:
                  kbsecret session [options] <new|rm> <label>
              HELP

              o.string "-t", "--team", "the team to create the session under"
              o.array "-u", "--users", "the Keybase users", default: [Keybase::Local.current_user]
              o.string "-r", "--root", "the secret root directory"
              o.bool "-c", "--create-team", "create the Keybase team if it does not exist"
              o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
              o.bool "-n", "--no-notify", "do not send a notification to session members"
              o.bool "-d", "--delete", "unlink the session in addition to deconfiguration"
            end

            cli.dreck do
              string :command
              string :session
            end

            cli.ensure_session! :argument if cli.args[:command] == "rm"
          end
        end

Public Instance Methods

new_session() click to toggle source

@api private @return [void]

# File lib/kbsecret/cli/command/session.rb, line 60
        def new_session
          if Config.session?(@label) && !cli.opts.force?
            cli.die "Refusing to overwrite a session without --force."
          end

          if cli.opts[:team]
            teams = Keybase::Local::Team.list_self_memberships.teams

            unless teams.map(&:fq_name).include?(cli.opts[:team])
              if cli.opts.create_team?
                Keybase::Local::Team.create_team cli.opts[:team]
                Keybase::Local::Team.add_members cli.opts[:team], users: [{
                  username: Keybase::Local.current_user,
                  role: "admin",
                }]
              else
                cli.die "No such team (either nonexistent or non-member)."
              end
            end

            Config.configure_session(@label, team: cli.opts[:team], root: @label)
          else
            cli.die "Missing `-r', `--root' option." unless cli.opts[:root]

            cli.opts[:users].each do |user|
              cli.die "Nonexistent Keybase user: #{user}." unless Keybase::API.user? user
            end

            unless cli.opts[:users].include? Keybase::Local.current_user
              cli.warn "You didn't include yourself in the user list, but I'll add you."
              cli.opts[:users] << Keybase::Local.current_user
            end

            Config.configure_session(@label, users: cli.opts[:users], root: cli.opts[:root])

            unless cli.opts.no_notify? && cli.opts[:users] != [Keybase::Local.current_user]
              users = cli.opts[:users].join(",")

              Keybase::Local::Chat.send_message cli.opts[:users], <<~MESSAGE
                You've been added to a KBSecret session!

                To access this session, please run the following:

                ```
                  $ kbsecret session new -r '#{cli.opts[:root]}' -u #{users} <label>
                ```

                If you don't have KBSecret installed, you can install it from `gem`:

                ```
                  $ gem install kbsecret
                ```
              MESSAGE
            end
          end
        end
rm_session() click to toggle source

@api private @return [void]

# File lib/kbsecret/cli/command/session.rb, line 119
def rm_session
  cli.session.unlink! if cli.opts.delete?
  Config.deconfigure_session @label
end
run!() click to toggle source

@see Command::Abstract#run!

# File lib/kbsecret/cli/command/session.rb, line 49
def run!
  case @subcmd
  when "new"
    new_session
  when "rm"
    rm_session
  end
end
setup!() click to toggle source

@see Command::Abstract#setup!

# File lib/kbsecret/cli/command/session.rb, line 38
def setup!
  @label = cli.args[:session]
  @subcmd = cli.args[:command]
end
validate!() click to toggle source

@see Command::Abstract#validate!

# File lib/kbsecret/cli/command/session.rb, line 44
def validate!
  cli.die "Unknown subcommand: #{@subcmd}." unless SUBCOMMANDS.include?(@subcmd)
end