Skip to content
Snippets Groups Projects
Commit e046e4c1 authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Namespace access token session key in `Import::GithubController`


Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 20aff5cd
No related branches found
No related tags found
No related merge requests found
class Import::GiteaController < Import::GithubController
def new
if session[:access_token].present? && session[:host_url].present?
if session[access_token_key].present? && session[host_key].present?
redirect_to status_import_url
end
end
 
def personal_access_token
session[:host_url] = params[:gitea_host_url]
session[host_key] = params[host_key]
super
end
 
def status
@gitea_host_url = session[:host_url]
@gitea_host_url = session[host_key]
super
end
 
private
 
def host_key
:"#{provider}_host_url"
end
# Overriden methods
def provider
:gitea
Loading
Loading
@@ -29,13 +33,13 @@ class Import::GiteaController < Import::GithubController
end
 
def provider_auth
if session[:access_token].blank? || session[:host_url].blank?
if session[access_token_key].blank? || session[host_key].blank?
redirect_to new_import_gitea_url,
alert: 'You need to specify both an Access Token and a Host URL.'
end
end
 
def client_options
{ host: session[:host_url], api_version: 'v1' }
{ host: session[host_key], api_version: 'v1' }
end
end
Loading
Loading
@@ -7,18 +7,18 @@ class Import::GithubController < Import::BaseController
def new
if logged_in_with_provider?
go_to_provider_for_permissions
elsif session[:access_token]
elsif session[access_token_key]
redirect_to status_import_url
end
end
 
def callback
session[:access_token] = client.get_token(params[:code])
session[access_token_key] = client.get_token(params[:code])
redirect_to status_import_url
end
 
def personal_access_token
session[:access_token] = params[:personal_access_token]
session[access_token_key] = params[:personal_access_token]
redirect_to status_import_url
end
 
Loading
Loading
@@ -52,7 +52,7 @@ class Import::GithubController < Import::BaseController
private
 
def client
@client ||= Gitlab::GithubImport::Client.new(session[:access_token], client_options)
@client ||= Gitlab::GithubImport::Client.new(session[access_token_key], client_options)
end
 
def verify_import_enabled
Loading
Loading
@@ -80,13 +80,17 @@ class Import::GithubController < Import::BaseController
end
 
def provider_unauthorized
session[:access_token] = nil
session[access_token_key] = nil
redirect_to new_import_url,
alert: "Access denied to your #{Gitlab::ImportSources.title(provider.to_s)} account."
end
 
def access_token_key
:"#{provider}_access_token"
end
def access_params
{ github_access_token: session[:access_token] }
{ github_access_token: session[access_token_key] }
end
 
# The following methods are overriden in subclasses
Loading
Loading
@@ -99,7 +103,7 @@ class Import::GithubController < Import::BaseController
end
 
def provider_auth
if session[:access_token].blank?
if session[access_token_key].blank?
go_to_provider_for_permissions
end
end
Loading
Loading
Loading
Loading
@@ -9,7 +9,7 @@ describe Import::GiteaController do
include_context 'a GitHub-ish import controller'
 
def assign_host_url
session[:host_url] = host_url
session[:gitea_host_url] = host_url
end
 
describe "GET new" do
Loading
Loading
Loading
Loading
@@ -29,7 +29,7 @@ describe Import::GithubController do
 
get :callback
 
expect(session[:access_token]).to eq(token)
expect(session[:github_access_token]).to eq(token)
expect(controller).to redirect_to(status_import_github_url)
end
end
Loading
Loading
Loading
Loading
@@ -4,6 +4,10 @@
# Note: You have access to `email_value` which is the email address value
# being currently tested).
 
def assign_session_token(provider)
session[:"#{provider}_access_token"] = 'asdasd12345'
end
shared_examples 'a GitHub-ish import controller: POST personal_access_token' do
let(:status_import_url) { public_send("status_import_#{provider}_url") }
 
Loading
Loading
@@ -15,7 +19,7 @@ shared_examples 'a GitHub-ish import controller: POST personal_access_token' do
 
post :personal_access_token, personal_access_token: token
 
expect(session[:access_token]).to eq(token)
expect(session[:"#{provider}_access_token"]).to eq(token)
expect(controller).to redirect_to(status_import_url)
end
end
Loading
Loading
@@ -24,7 +28,7 @@ shared_examples 'a GitHub-ish import controller: GET new' do
let(:status_import_url) { public_send("status_import_#{provider}_url") }
 
it "redirects to status if we already have a token" do
assign_session_token
assign_session_token(provider)
allow(controller).to receive(:logged_in_with_provider?).and_return(false)
 
get :new
Loading
Loading
@@ -48,7 +52,7 @@ shared_examples 'a GitHub-ish import controller: GET status' do
let(:extra_assign_expectations) { {} }
 
before do
assign_session_token
assign_session_token(provider)
end
 
it "assigns variables" do
Loading
Loading
@@ -80,7 +84,7 @@ shared_examples 'a GitHub-ish import controller: GET status' do
 
get :status
 
expect(session[:access_token]).to eq(nil)
expect(session[:"#{provider}_access_token"]).to be_nil
expect(controller).to redirect_to(new_import_url)
expect(flash[:alert]).to eq("Access denied to your #{Gitlab::ImportSources.title(provider.to_s)} account.")
end
Loading
Loading
@@ -100,11 +104,11 @@ shared_examples 'a GitHub-ish import controller: POST create' do
 
before do
stub_client(user: provider_user, repo: provider_repo)
assign_session_token
assign_session_token(provider)
end
 
context "when the repository owner is the Gitea user" do
context "when the Gitea user and GitLab user's usernames match" do
context "when the repository owner is the provider user" do
context "when the provider user and GitLab user's usernames match" do
it "takes the current user's namespace" do
expect(Gitlab::GithubImport::ProjectCreator).
to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider).
Loading
Loading
@@ -114,7 +118,7 @@ shared_examples 'a GitHub-ish import controller: POST create' do
end
end
 
context "when the Gitea user and GitLab user's usernames don't match" do
context "when the provider user and GitLab user's usernames don't match" do
let(:provider_username) { "someone_else" }
 
it "takes the current user's namespace" do
Loading
Loading
@@ -127,15 +131,15 @@ shared_examples 'a GitHub-ish import controller: POST create' do
end
end
 
context "when the repository owner is not the Gitea user" do
context "when the repository owner is not the provider user" do
let(:other_username) { "someone_else" }
 
before do
provider_repo.owner = OpenStruct.new(login: other_username)
assign_session_token
assign_session_token(provider)
end
 
context "when a namespace with the Gitea user's username already exists" do
context "when a namespace with the provider user's username already exists" do
let!(:existing_namespace) { create(:namespace, name: other_username, owner: user) }
 
context "when the namespace is owned by the GitLab user" do
Loading
Loading
@@ -164,7 +168,7 @@ shared_examples 'a GitHub-ish import controller: POST create' do
end
end
 
context "when a namespace with the Gitea user's username doesn't exist" do
context "when a namespace with the provider user's username doesn't exist" do
context "when current user can create namespaces" do
it "creates the namespace" do
expect(Gitlab::GithubImport::ProjectCreator).
Loading
Loading
Loading
Loading
@@ -30,8 +30,4 @@ module ImportSpecHelper
)
allow(Gitlab.config.omniauth).to receive(:providers).and_return([provider])
end
def assign_session_token
session[:access_token] = 'asdasd12345'
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment