Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,16 @@ then
uffizzi config set project "${UFFIZZI_PROJECT}"
fi
else
echo "Specify environment variables to login before executing Uffizzi CLI."
echo "UFFIZZI_USER, UFFIZZI_SERVER, UFFIZZI_PASSWORD, and optionally UFFIZZI_PROJECT"
if [ $GITHUB_ACTOR ] &&
[ $GITHUB_GITHUB_TOKEN ]
then
echo "New params. GITHUB_ACTOR = ${GITHUB_ACTOR}. GITHUB_GITHUB_TOKEN = ${GITHUB_GITHUB_TOKEN}"
uffizzi login_by_github --username "${GITHUB_ACTOR}" --server "${UFFIZZI_SERVER}"
uffizzi config set project github
else
echo "Specify environment variables to login before executing Uffizzi CLI."
echo "UFFIZZI_USER, UFFIZZI_SERVER, UFFIZZI_PASSWORD, and optionally UFFIZZI_PROJECT"
fi
fi

if
Expand Down
8 changes: 8 additions & 0 deletions lib/uffizzi/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ def login
Login.new(options).run
end

desc 'login_by_github [OPTIONS]', 'Login or register to Uffizzi to view and manage your previews'
method_option :server, required: false, aliases: '-s'
method_option :username, required: false, aliases: '-u'
def login_by_github
require_relative 'cli/login_by_github'
LoginByGithub.new(options).run
end

desc 'logout', 'Log out of a Uffizzi user account'
def logout
require_relative 'cli/logout'
Expand Down
68 changes: 68 additions & 0 deletions lib/uffizzi/cli/login_by_github.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# frozen_string_literal: true

require 'uffizzi'
require 'uffizzi/response_helper'
require 'uffizzi/clients/api/api_client'

module Uffizzi
class Cli::LoginByGithub
include ApiClient

def initialize(options)
@options = options
end

def run
server = set_server
username = set_username
token = set_token
params = prepare_request_params(username, token)
response = create_github_session(server, params)

if ResponseHelper.created?(response)
handle_succeed_response(response, server, username)
else
ResponseHelper.handle_failed_response(response)
end
end

private

def set_server
config_server = ConfigFile.exists? && ConfigFile.option_has_value?(:server) ? ConfigFile.read_option(:server) : nil
@options[:server] || config_server
end

def set_username
config_username = ConfigFile.exists? && ConfigFile.option_has_value?(:username) ? ConfigFile.read_option(:username) : nil
@options[:username] || config_username
end

def set_token
ENV['GITHUB_TOKEN']
end

def prepare_request_params(username, token)
{
user: {
username: username,
token: token,
},
}
end

def handle_succeed_response(response, server, username)
account = response[:body][:user][:accounts].first
return Uffizzi.ui.say('No account related to this email') unless account_valid?(account)

ConfigFile.write_option(:server, server)
ConfigFile.write_option(:username, username)
ConfigFile.write_option(:cookie, response[:headers])
ConfigFile.write_option(:account_id, account[:id])
end

def account_valid?(account)
account[:state] == 'active'
end
end
end
7 changes: 7 additions & 0 deletions lib/uffizzi/clients/api/api_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ def create_session(server, params = {})
build_response(response)
end

def create_github_session(server, params = {})
uri = github_session_uri(server)
response = http_client.make_post_request(uri, params)

build_response(response)
end

def destroy_session(server)
uri = session_uri(server)
response = http_client.make_delete_request(uri)
Expand Down
4 changes: 4 additions & 0 deletions lib/uffizzi/clients/api/api_routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ def session_uri(server)
"#{server}/api/cli/v1/session"
end

def github_session_uri(server)
"#{server}/api/cli/v1/github/session"
end

def validate_compose_file_uri(server, project_slug)
"#{compose_files_uri(server, project_slug)}/validate"
end
Expand Down