Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
d3a8a074
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d3a8a074
编写于
4月 23, 2018
作者:
J
James Edwards-Jones
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Unify Saml::IdentityLinker and OAuth::IdentityLinker
上级
f8d54913
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
53 addition
and
69 deletion
+53
-69
app/controllers/omniauth_callbacks_controller.rb
app/controllers/omniauth_callbacks_controller.rb
+2
-2
lib/gitlab/auth/o_auth/identity_linker.rb
lib/gitlab/auth/o_auth/identity_linker.rb
+0
-19
lib/gitlab/auth/omniauth_identity_linker_base.rb
lib/gitlab/auth/omniauth_identity_linker_base.rb
+28
-6
lib/gitlab/auth/saml/identity_linker.rb
lib/gitlab/auth/saml/identity_linker.rb
+0
-19
spec/lib/gitlab/auth/o_auth/identity_linker_spec.rb
spec/lib/gitlab/auth/o_auth/identity_linker_spec.rb
+13
-13
spec/lib/gitlab/auth/saml/identity_linker_spec.rb
spec/lib/gitlab/auth/saml/identity_linker_spec.rb
+10
-10
未找到文件。
app/controllers/omniauth_callbacks_controller.rb
浏览文件 @
d3a8a074
...
@@ -80,9 +80,9 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
...
@@ -80,9 +80,9 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
identity_linker
||=
auth_module
::
IdentityLinker
.
new
(
current_user
,
oauth
)
identity_linker
||=
auth_module
::
IdentityLinker
.
new
(
current_user
,
oauth
)
identity_linker
.
create_or_update
identity_linker
.
link
if
identity_linker
.
c
reat
ed?
if
identity_linker
.
c
hang
ed?
redirect_identity_linked
redirect_identity_linked
elsif
identity_linker
.
error_message
.
present?
elsif
identity_linker
.
error_message
.
present?
redirect_identity_link_failed
(
identity_linker
.
error_message
)
redirect_identity_link_failed
(
identity_linker
.
error_message
)
...
...
lib/gitlab/auth/o_auth/identity_linker.rb
浏览文件 @
d3a8a074
...
@@ -2,25 +2,6 @@ module Gitlab
...
@@ -2,25 +2,6 @@ module Gitlab
module
Auth
module
Auth
module
OAuth
module
OAuth
class
IdentityLinker
<
OmniauthIdentityLinkerBase
class
IdentityLinker
<
OmniauthIdentityLinkerBase
def
create_or_update
if
identity
.
new_record?
@created
=
identity
.
save
end
end
def
error_message
identity
.
validate
identity
.
errors
.
full_messages
.
join
(
', '
)
end
private
def
identity
@identity
||=
current_user
.
identities
.
with_extern_uid
(
oauth
[
'provider'
],
oauth
[
'uid'
])
.
first_or_initialize
(
extern_uid:
oauth
[
'uid'
])
end
end
end
end
end
end
end
...
...
lib/gitlab/auth/omniauth_identity_linker_base.rb
浏览文件 @
d3a8a074
...
@@ -6,19 +6,41 @@ module Gitlab
...
@@ -6,19 +6,41 @@ module Gitlab
def
initialize
(
current_user
,
oauth
)
def
initialize
(
current_user
,
oauth
)
@current_user
=
current_user
@current_user
=
current_user
@oauth
=
oauth
@oauth
=
oauth
@c
reat
ed
=
false
@c
hang
ed
=
false
end
end
def
created?
def
link
@created
save
if
identity
.
new_record?
end
def
changed?
@changed
end
end
def
error_message
def
error_message
''
identity
.
validate
identity
.
errors
.
full_messages
.
join
(
', '
)
end
private
def
save
@changed
=
identity
.
save
end
def
identity
@identity
||=
current_user
.
identities
.
with_extern_uid
(
provider
,
uid
)
.
first_or_initialize
(
extern_uid:
uid
)
end
def
provider
oauth
[
'provider'
]
end
end
def
create_or_update
def
uid
raise
NotImplementedError
oauth
[
'uid'
]
end
end
end
end
end
end
...
...
lib/gitlab/auth/saml/identity_linker.rb
浏览文件 @
d3a8a074
...
@@ -2,25 +2,6 @@ module Gitlab
...
@@ -2,25 +2,6 @@ module Gitlab
module
Auth
module
Auth
module
Saml
module
Saml
class
IdentityLinker
<
OmniauthIdentityLinkerBase
class
IdentityLinker
<
OmniauthIdentityLinkerBase
def
create_or_update
if
find_saml_identity
.
nil?
create_saml_identity
@created
=
true
else
@created
=
false
end
end
protected
def
find_saml_identity
current_user
.
identities
.
with_extern_uid
(
:saml
,
oauth
[
'uid'
]).
take
end
def
create_saml_identity
current_user
.
identities
.
create
(
extern_uid:
oauth
[
'uid'
],
provider: :saml
)
end
end
end
end
end
end
end
...
...
spec/lib/gitlab/auth/o_auth/identity_linker_spec.rb
浏览文件 @
d3a8a074
...
@@ -12,23 +12,23 @@ describe Gitlab::Auth::OAuth::IdentityLinker do
...
@@ -12,23 +12,23 @@ describe Gitlab::Auth::OAuth::IdentityLinker do
let!
(
:identity
)
{
user
.
identities
.
create!
(
provider:
provider
,
extern_uid:
uid
)
}
let!
(
:identity
)
{
user
.
identities
.
create!
(
provider:
provider
,
extern_uid:
uid
)
}
it
"doesn't create new identity"
do
it
"doesn't create new identity"
do
expect
{
subject
.
create_or_update
}.
not_to
change
{
Identity
.
count
}
expect
{
subject
.
link
}.
not_to
change
{
Identity
.
count
}
end
end
it
"
#created? returns
false"
do
it
"
sets #changed? to
false"
do
subject
.
create_or_update
subject
.
link
expect
(
subject
).
not_to
be_c
reat
ed
expect
(
subject
).
not_to
be_c
hang
ed
end
end
end
end
context
'identity already linked to different user'
do
context
'identity already linked to different user'
do
let!
(
:identity
)
{
create
(
:identity
,
provider:
provider
,
extern_uid:
uid
)
}
let!
(
:identity
)
{
create
(
:identity
,
provider:
provider
,
extern_uid:
uid
)
}
it
"#c
reat
ed? returns false"
do
it
"#c
hang
ed? returns false"
do
subject
.
create_or_update
subject
.
link
expect
(
subject
).
not_to
be_c
reat
ed
expect
(
subject
).
not_to
be_c
hang
ed
end
end
it
'exposes error message'
do
it
'exposes error message'
do
...
@@ -38,25 +38,25 @@ describe Gitlab::Auth::OAuth::IdentityLinker do
...
@@ -38,25 +38,25 @@ describe Gitlab::Auth::OAuth::IdentityLinker do
context
'identity needs to be created'
do
context
'identity needs to be created'
do
it
'creates linked identity'
do
it
'creates linked identity'
do
expect
{
subject
.
create_or_update
}.
to
change
{
user
.
identities
.
count
}
expect
{
subject
.
link
}.
to
change
{
user
.
identities
.
count
}
end
end
it
'sets identity provider'
do
it
'sets identity provider'
do
subject
.
create_or_update
subject
.
link
expect
(
user
.
identities
.
last
.
provider
).
to
eq
provider
expect
(
user
.
identities
.
last
.
provider
).
to
eq
provider
end
end
it
'sets identity extern_uid'
do
it
'sets identity extern_uid'
do
subject
.
create_or_update
subject
.
link
expect
(
user
.
identities
.
last
.
extern_uid
).
to
eq
uid
expect
(
user
.
identities
.
last
.
extern_uid
).
to
eq
uid
end
end
it
'sets #c
reat
ed? to true'
do
it
'sets #c
hang
ed? to true'
do
subject
.
create_or_update
subject
.
link
expect
(
subject
).
to
be_c
reat
ed
expect
(
subject
).
to
be_c
hang
ed
end
end
end
end
end
end
spec/lib/gitlab/auth/saml/identity_linker_spec.rb
浏览文件 @
d3a8a074
...
@@ -12,37 +12,37 @@ describe Gitlab::Auth::Saml::IdentityLinker do
...
@@ -12,37 +12,37 @@ describe Gitlab::Auth::Saml::IdentityLinker do
let!
(
:identity
)
{
user
.
identities
.
create!
(
provider:
provider
,
extern_uid:
uid
)
}
let!
(
:identity
)
{
user
.
identities
.
create!
(
provider:
provider
,
extern_uid:
uid
)
}
it
"doesn't create new identity"
do
it
"doesn't create new identity"
do
expect
{
subject
.
create_or_update
}.
not_to
change
{
Identity
.
count
}
expect
{
subject
.
link
}.
not_to
change
{
Identity
.
count
}
end
end
it
'sets #created? to false'
do
it
"sets #changed? to false"
do
subject
.
create_or_update
subject
.
link
expect
(
subject
).
not_to
be_c
reat
ed
expect
(
subject
).
not_to
be_c
hang
ed
end
end
end
end
context
'identity needs to be created'
do
context
'identity needs to be created'
do
it
'creates linked identity'
do
it
'creates linked identity'
do
expect
{
subject
.
create_or_update
}.
to
change
{
user
.
identities
.
count
}
expect
{
subject
.
link
}.
to
change
{
user
.
identities
.
count
}
end
end
it
'sets identity provider'
do
it
'sets identity provider'
do
subject
.
create_or_update
subject
.
link
expect
(
user
.
identities
.
last
.
provider
).
to
eq
provider
expect
(
user
.
identities
.
last
.
provider
).
to
eq
provider
end
end
it
'sets identity extern_uid'
do
it
'sets identity extern_uid'
do
subject
.
create_or_update
subject
.
link
expect
(
user
.
identities
.
last
.
extern_uid
).
to
eq
uid
expect
(
user
.
identities
.
last
.
extern_uid
).
to
eq
uid
end
end
it
'sets #c
reat
ed? to true'
do
it
'sets #c
hang
ed? to true'
do
subject
.
create_or_update
subject
.
link
expect
(
subject
).
to
be_c
reat
ed
expect
(
subject
).
to
be_c
hang
ed
end
end
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录