Commit 862e70ea authored by Gabriel Mazetto's avatar Gabriel Mazetto

Fix specs and improve code style

parent 29cfb411
...@@ -112,18 +112,19 @@ class SessionsController < Devise::SessionsController ...@@ -112,18 +112,19 @@ class SessionsController < Devise::SessionsController
end end
def gitlab_geo_login def gitlab_geo_login
if !signed_in? && Gitlab::Geo.enabled? && Gitlab::Geo.secondary? return if signed_in? || !Gitlab::Geo.secondary?
oauth = Gitlab::Geo::OauthSession.new oauth = Gitlab::Geo::OauthSession.new
# share full url with primary node by shared session # share full url with primary node by shared session
user_return_to = URI.join(root_url, session[:user_return_to].to_s).to_s user_return_to = URI.join(root_url, session[:user_return_to].to_s).to_s
oauth.return_to = @redirect_to || user_return_to oauth.return_to = @redirect_to || user_return_to
redirect_to oauth_geo_auth_url(state: oauth.generate_oauth_state) redirect_to oauth_geo_auth_url(state: oauth.generate_oauth_state)
end
end end
def gitlab_geo_logout def gitlab_geo_logout
return unless Gitlab::Geo.secondary?
oauth = Gitlab::Geo::OauthSession.new(access_token: session[:access_token]) oauth = Gitlab::Geo::OauthSession.new(access_token: session[:access_token])
@geo_logout_state = oauth.generate_logout_state @geo_logout_state = oauth.generate_logout_state
end end
......
...@@ -17,11 +17,14 @@ module Gitlab ...@@ -17,11 +17,14 @@ module Gitlab
def generate_oauth_state def generate_oauth_state
return unless return_to return unless return_to
hmac = generate_oauth_hmac(oauth_salt, return_to) hmac = generate_oauth_hmac(oauth_salt, return_to)
"#{oauth_salt}:#{hmac}:#{return_to}" "#{oauth_salt}:#{hmac}:#{return_to}"
end end
def generate_logout_state def generate_logout_state
return unless access_token
cipher = logout_token_cipher(oauth_salt, :encrypt) cipher = logout_token_cipher(oauth_salt, :encrypt)
encrypted = cipher.update(access_token) + cipher.final encrypted = cipher.update(access_token) + cipher.final
"#{oauth_salt}:#{Base64.urlsafe_encode64(encrypted)}" "#{oauth_salt}:#{Base64.urlsafe_encode64(encrypted)}"
...@@ -29,6 +32,7 @@ module Gitlab ...@@ -29,6 +32,7 @@ module Gitlab
def extract_logout_token def extract_logout_token
return unless state return unless state
salt, encrypted = state.split(':', 2) salt, encrypted = state.split(':', 2)
decipher = logout_token_cipher(salt, :decrypt) decipher = logout_token_cipher(salt, :decrypt)
decipher.update(Base64.urlsafe_decode64(encrypted)) + decipher.final decipher.update(Base64.urlsafe_decode64(encrypted)) + decipher.final
...@@ -57,6 +61,7 @@ module Gitlab ...@@ -57,6 +61,7 @@ module Gitlab
def generate_oauth_hmac(salt, return_to) def generate_oauth_hmac(salt, return_to)
return false unless return_to return false unless return_to
digest = OpenSSL::Digest.new('sha256') digest = OpenSSL::Digest.new('sha256')
key = Gitlab::Application.secrets.secret_key_base + salt key = Gitlab::Application.secrets.secret_key_base + salt
OpenSSL::HMAC.hexdigest(digest, key, return_to) OpenSSL::HMAC.hexdigest(digest, key, return_to)
......
...@@ -64,6 +64,10 @@ describe Gitlab::Geo::OauthSession do ...@@ -64,6 +64,10 @@ describe Gitlab::Geo::OauthSession do
describe '#generate_logout_state' do describe '#generate_logout_state' do
subject { described_class.new(access_token: access_token) } subject { described_class.new(access_token: access_token) }
it 'returns nil when access_token is not defined' do
expect(described_class.new.generate_logout_state).to be_nil
end
it 'returns a string with salt and encrypted access token colon separated' do it 'returns a string with salt and encrypted access token colon separated' do
state = subject.generate_logout_state state = subject.generate_logout_state
expect(state).to be_a String expect(state).to be_a String
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment