class CslCli::CLI

Public Instance Methods

list() click to toggle source
# File lib/csl_cli/cli.rb, line 91
def list
  token = nil
  decoded_token = {}
  query = ""

  configloader = CslCli::Config.new(ENV['HOME'])
  config = configloader.load

  if config != false
    app_url = config['app_url']
  else
    app_url = ENV['CSL_CLI_APP_URL']
  end

  abort 'app_url missing, please check environment variables' if app_url.nil?

  begin
    tokenstore = CslCli::Tokenstore.new(ENV['HOME'])
    token = tokenstore.load
  rescue
    abort 'Failed loading token from disk. Are you logged in?'
  end

  decoded_token['header'] = JSON.parse(Base64.decode64(token.split('.')[0]))
  decoded_token['payload'] = JSON.parse(Base64.decode64(token.split('.')[1]))

  query = "?limited=true" unless options[:show_all]

  headers = {"Content-Type" => "application/json", "Authorization" => "Bearer #{token}", "Accept" => "application/json"}
  request = CslCli::Request::Get.new(app_url + "/switches/" + query, headers)
  if request.code < 400
    response = request.response

    case options[:format]
    when "csv"
      tp.set :separator, ","
      tp.set :max_width, 100000
    when "json"
      puts response.to_json
      exit
    end

    if options[:show_all]
      tp response, :except => [:updated_at, :url, :id]
    else
      tp response, :except => [:updated_at, :url, :id, :user_id]
    end
  else
    abort "Failed to list notes: #{request.response}"
  end
end
login() click to toggle source
# File lib/csl_cli/cli.rb, line 11
def login
  configloader = CslCli::Config.new(ENV['HOME'])
  config = configloader.load

  if config != false
    puts "Loaded config from .csv_config.json"
    email = config['email']
    password = config['password']
    app_url = config['app_url']
  else
    puts "Loaded config from ENV"
    email = ENV['CSL_CLI_EMAIL']
    password = ENV['CSL_CLI_PASSWORD']
    app_url = ENV['CSL_CLI_APP_URL']
  end

  abort 'email missing, please check environment variables' if email.nil?
  abort 'password missing, please check environment variables' if password.nil?
  abort 'app_url missing, please check environment variables' if app_url.nil?

  auth = CslCli::Auth.new(app_url)
  logged_in = auth.login(email, password)
  if logged_in
    tokenstore = CslCli::Tokenstore.new(ENV['HOME'])
    tokenstore.store(auth.token)
    puts "Successfully logged in (token saved to disk)"
  else
    abort 'wrong credentials'
  end


end
logout() click to toggle source
# File lib/csl_cli/cli.rb, line 45
def logout
  tokenstore = CslCli::Tokenstore.new(ENV['HOME'])
  tokenstore.clear
  puts "Successfully logged out (removed token from disk)"
end
switch(note) click to toggle source
# File lib/csl_cli/cli.rb, line 52
def switch(note)
  token = nil
  decoded_token = {}

  configloader = CslCli::Config.new(ENV['HOME'])
  config = configloader.load

  if config != false
    app_url = config['app_url']
  else
    app_url = ENV['CSL_CLI_APP_URL']
  end

  abort 'app_url missing, please check environment variables' if app_url.nil?

  begin
    tokenstore = CslCli::Tokenstore.new(ENV['HOME'])
    token = tokenstore.load
  rescue
    abort 'Failed loading token from disk. Are you logged in?'
  end

  decoded_token['header'] = JSON.parse(Base64.decode64(token.split('.')[0]))
  decoded_token['payload'] = JSON.parse(Base64.decode64(token.split('.')[1]))

  headers = {"Content-Type" => "application/json", "Authorization" => "Bearer #{token}", "Accept" => "application/json"}
  body = {note: note, user_id: decoded_token['payload']['sub']['$oid']}.to_json
  request = CslCli::Request::Post.new(app_url + "/switches/", body, headers)
  if request.code < 300
    response = request.response
    puts "Successfully created new context switch: #{response['created_at']}: #{response['id']}: #{response['note']}"
  else
    abort "Failed to create new note: #{request.response}"
  end
end