OLD | NEW |
1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package auth | 5 package auth |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "net/http" | 9 "net/http" |
10 | 10 |
11 "golang.org/x/net/context" | 11 "golang.org/x/net/context" |
12 | 12 |
13 "github.com/luci/luci-go/common/errors" | 13 "github.com/luci/luci-go/common/errors" |
14 "github.com/luci/luci-go/common/logging" | 14 "github.com/luci/luci-go/common/logging" |
15 | 15 |
16 "github.com/luci/luci-go/server/auth/authdb" | |
17 "github.com/luci/luci-go/server/auth/delegation" | 16 "github.com/luci/luci-go/server/auth/delegation" |
18 "github.com/luci/luci-go/server/auth/identity" | 17 "github.com/luci/luci-go/server/auth/identity" |
19 "github.com/luci/luci-go/server/auth/signing" | 18 "github.com/luci/luci-go/server/auth/signing" |
20 ) | 19 ) |
21 | 20 |
22 var ( | 21 var ( |
23 // ErrNotConfigured is returned by Authenticate if auth library wasn't | 22 // ErrNotConfigured is returned by Authenticate if auth library wasn't |
24 // properly initialized (see SetConfig). | 23 // properly initialized (see SetConfig). |
25 ErrNotConfigured = errors.New("auth: the library is not properly configu
red") | 24 ErrNotConfigured = errors.New("auth: the library is not properly configu
red") |
26 | 25 |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 if delegationTok != "" { | 179 if delegationTok != "" { |
181 // Need to grab our own identity to verify that the delegation t
oken is | 180 // Need to grab our own identity to verify that the delegation t
oken is |
182 // minted for consumption by us and not some other service. | 181 // minted for consumption by us and not some other service. |
183 ownServiceIdentity, err := getOwnServiceIdentity(c, cfg.Signer) | 182 ownServiceIdentity, err := getOwnServiceIdentity(c, cfg.Signer) |
184 if err != nil { | 183 if err != nil { |
185 return nil, err | 184 return nil, err |
186 } | 185 } |
187 delegatedIdentity, err := delegation.CheckToken(c, delegation.Ch
eckTokenParams{ | 186 delegatedIdentity, err := delegation.CheckToken(c, delegation.Ch
eckTokenParams{ |
188 Token: delegationTok, | 187 Token: delegationTok, |
189 PeerID: s.peerIdent, | 188 PeerID: s.peerIdent, |
190 » » » CertificatesProvider: certsProvider{s.db}, | 189 » » » CertificatesProvider: s.db, |
191 GroupsChecker: s.db, | 190 GroupsChecker: s.db, |
192 OwnServiceIdentity: ownServiceIdentity, | 191 OwnServiceIdentity: ownServiceIdentity, |
193 }) | 192 }) |
194 if err != nil { | 193 if err != nil { |
195 return nil, err | 194 return nil, err |
196 } | 195 } |
197 // User profile information is not available when using delegati
on, so just | 196 // User profile information is not available when using delegati
on, so just |
198 // wipe it. | 197 // wipe it. |
199 s.user = &User{Identity: delegatedIdentity} | 198 s.user = &User{Identity: delegatedIdentity} |
200 } | 199 } |
(...skipping 26 matching lines...) Expand all Loading... |
227 // then redirects the user to the URL specified by dest. | 226 // then redirects the user to the URL specified by dest. |
228 func (a Authenticator) LogoutURL(c context.Context, dest string) (string, error)
{ | 227 func (a Authenticator) LogoutURL(c context.Context, dest string) (string, error)
{ |
229 if api := a.usersAPI(); api != nil { | 228 if api := a.usersAPI(); api != nil { |
230 return api.LogoutURL(c, dest) | 229 return api.LogoutURL(c, dest) |
231 } | 230 } |
232 return "", ErrNoUsersAPI | 231 return "", ErrNoUsersAPI |
233 } | 232 } |
234 | 233 |
235 //// | 234 //// |
236 | 235 |
237 // certsProvider implements delegation.CertificatesProvider. | |
238 type certsProvider struct { | |
239 db authdb.DB | |
240 } | |
241 | |
242 func (p certsProvider) GetAuthServiceCertificates(c context.Context) (*signing.P
ublicCertificates, error) { | |
243 serviceURL, err := p.db.GetAuthServiceURL(c) | |
244 if err != nil { | |
245 return nil, err | |
246 } | |
247 return signing.FetchCertificatesFromLUCIService(c, serviceURL) | |
248 } | |
249 | |
250 // getOwnServiceIdentity returns 'service:<appID>' identity of the current | 236 // getOwnServiceIdentity returns 'service:<appID>' identity of the current |
251 // service. | 237 // service. |
252 func getOwnServiceIdentity(c context.Context, signer signing.Signer) (identity.I
dentity, error) { | 238 func getOwnServiceIdentity(c context.Context, signer signing.Signer) (identity.I
dentity, error) { |
253 if signer == nil { | 239 if signer == nil { |
254 return "", ErrNotConfigured | 240 return "", ErrNotConfigured |
255 } | 241 } |
256 serviceInfo, err := signer.ServiceInfo(c) | 242 serviceInfo, err := signer.ServiceInfo(c) |
257 if err != nil { | 243 if err != nil { |
258 return "", err | 244 return "", err |
259 } | 245 } |
260 return identity.MakeIdentity("service:" + serviceInfo.AppID) | 246 return identity.MakeIdentity("service:" + serviceInfo.AppID) |
261 } | 247 } |
OLD | NEW |