summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2015-01-27 15:37:19 -0800
committerValery Sizov <valery@gitlab.com>2015-01-28 15:57:31 -0800
commit54f6d8c7b5a1c67a222011c35ad70909da0e686d (patch)
treef8befddb79b6c6ab5a957d4ff2705f582bbe23ab
parent1718075a02a0774029f3739be5b0717bc9224a04 (diff)
downloadgitlab-ce-54f6d8c7b5a1c67a222011c35ad70909da0e686d.tar.gz
an ability to clone project with oauth2 token
-rw-r--r--db/migrate/20150116234545_add_gitlab_access_token_to_user.rb5
-rw-r--r--db/schema.rb3
-rw-r--r--lib/gitlab/backend/grack_auth.rb14
3 files changed, 20 insertions, 2 deletions
diff --git a/db/migrate/20150116234545_add_gitlab_access_token_to_user.rb b/db/migrate/20150116234545_add_gitlab_access_token_to_user.rb
new file mode 100644
index 00000000000..c28ba3197ac
--- /dev/null
+++ b/db/migrate/20150116234545_add_gitlab_access_token_to_user.rb
@@ -0,0 +1,5 @@
+class AddGitlabAccessTokenToUser < ActiveRecord::Migration
+ def change
+ add_column :users, :gitlab_access_token, :string
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 29466f048eb..3f9ceb84e5d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150116234544) do
+ActiveRecord::Schema.define(version: 20150116234545) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -434,6 +434,7 @@ ActiveRecord::Schema.define(version: 20150116234544) do
t.string "website_url", default: "", null: false
t.datetime "last_credential_check_at"
t.string "github_access_token"
+ t.string "gitlab_access_token"
end
add_index "users", ["admin"], name: "index_users_on_admin", using: :btree
diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb
index 1f71906bc8e..2e393f753e8 100644
--- a/lib/gitlab/backend/grack_auth.rb
+++ b/lib/gitlab/backend/grack_auth.rb
@@ -34,7 +34,7 @@ module Grack
def auth!
if @auth.provided?
return bad_request unless @auth.basic?
-
+
# Authentication with username and password
login, password = @auth.credentials
@@ -71,8 +71,20 @@ module Grack
false
end
+ def oauth_access_token_check(login, password)
+ if login == "oauth2" && git_cmd == 'git-upload-pack' && password.present?
+ token = Doorkeeper::AccessToken.by_token(password)
+ token && token.accessible? && User.find_by(id: token.resource_owner_id)
+ end
+ end
+
def authenticate_user(login, password)
user = Gitlab::Auth.new.find(login, password)
+
+ unless user
+ user = oauth_access_token_check(login, password)
+ end
+
return user if user.present?
# At this point, we know the credentials were wrong. We let Rack::Attack