Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: appengine/gaeauth/server/session.go

Issue 2951393002: [errors] de-specialize Transient in favor of Tags. (Closed)
Patch Set: copyright Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 server 5 package server
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "strconv" 9 "strconv"
10 "strings" 10 "strings"
11 "time" 11 "time"
12 12
13 "golang.org/x/net/context" 13 "golang.org/x/net/context"
14 14
15 ds "github.com/luci/gae/service/datastore" 15 ds "github.com/luci/gae/service/datastore"
16 "github.com/luci/gae/service/info" 16 "github.com/luci/gae/service/info"
17 "github.com/luci/luci-go/common/clock" 17 "github.com/luci/luci-go/common/clock"
18 "github.com/luci/luci-go/common/errors"
19 "github.com/luci/luci-go/common/logging" 18 "github.com/luci/luci-go/common/logging"
19 "github.com/luci/luci-go/common/retry"
20 "github.com/luci/luci-go/server/auth" 20 "github.com/luci/luci-go/server/auth"
21 "github.com/luci/luci-go/server/auth/identity" 21 "github.com/luci/luci-go/server/auth/identity"
22 ) 22 )
23 23
24 // SessionStore stores auth sessions in the datastore (always in the default 24 // SessionStore stores auth sessions in the datastore (always in the default
25 // namespace). It implements auth.SessionStore. 25 // namespace). It implements auth.SessionStore.
26 type SessionStore struct { 26 type SessionStore struct {
27 Prefix string // used as prefix for datastore keys 27 Prefix string // used as prefix for datastore keys
28 } 28 }
29 29
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 } 80 }
81 if err = ds.Put(c, &userEnt, &sessionEnt); err != nil { 81 if err = ds.Put(c, &userEnt, &sessionEnt); err != nil {
82 return err 82 return err
83 } 83 }
84 84
85 sessionID = fmt.Sprintf("%s/%s/%d", s.Prefix, userID, sessionEnt .ID) 85 sessionID = fmt.Sprintf("%s/%s/%d", s.Prefix, userID, sessionEnt .ID)
86 return nil 86 return nil
87 }, nil) 87 }, nil)
88 88
89 if err != nil { 89 if err != nil {
90 » » return "", errors.WrapTransient(err) 90 » » return "", retry.Tag.Apply(err)
91 } 91 }
92 return sessionID, nil 92 return sessionID, nil
93 } 93 }
94 94
95 // CloseSession closes a session given its ID. Does nothing if session is 95 // CloseSession closes a session given its ID. Does nothing if session is
96 // already closed or doesn't exist. Returns only transient errors. 96 // already closed or doesn't exist. Returns only transient errors.
97 func (s *SessionStore) CloseSession(c context.Context, sessionID string) error { 97 func (s *SessionStore) CloseSession(c context.Context, sessionID string) error {
98 c = defaultNS(c) 98 c = defaultNS(c)
99 ent, err := s.fetchSession(c, sessionID) 99 ent, err := s.fetchSession(c, sessionID)
100 switch { 100 switch {
101 case err != nil: 101 case err != nil:
102 return err 102 return err
103 case ent == nil: 103 case ent == nil:
104 return nil 104 return nil
105 default: 105 default:
106 ent.IsClosed = true 106 ent.IsClosed = true
107 ent.Closed = clock.Now(c).UTC() 107 ent.Closed = clock.Now(c).UTC()
108 » » return errors.WrapTransient(ds.Put(ds.WithoutTransaction(c), ent )) 108 » » return retry.Tag.Apply(ds.Put(ds.WithoutTransaction(c), ent))
109 } 109 }
110 } 110 }
111 111
112 // GetSession returns existing non-expired session given its ID. Returns nil 112 // GetSession returns existing non-expired session given its ID. Returns nil
113 // if session doesn't exist, closed or expired. Returns only transient errors. 113 // if session doesn't exist, closed or expired. Returns only transient errors.
114 func (s *SessionStore) GetSession(c context.Context, sessionID string) (*auth.Se ssion, error) { 114 func (s *SessionStore) GetSession(c context.Context, sessionID string) (*auth.Se ssion, error) {
115 c = defaultNS(c) 115 c = defaultNS(c)
116 ent, err := s.fetchSession(c, sessionID) 116 ent, err := s.fetchSession(c, sessionID)
117 if ent == nil { 117 if ent == nil {
118 return nil, err 118 return nil, err
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 154 }
155 switch err = ds.Get(c, &sessionEnt); err { 155 switch err = ds.Get(c, &sessionEnt); err {
156 case nil: 156 case nil:
157 if sessionEnt.IsClosed || clock.Now(c).After(sessionEnt.Expirati on) { 157 if sessionEnt.IsClosed || clock.Now(c).After(sessionEnt.Expirati on) {
158 return nil, nil 158 return nil, nil
159 } 159 }
160 return &sessionEnt, nil 160 return &sessionEnt, nil
161 case ds.ErrNoSuchEntity: 161 case ds.ErrNoSuchEntity:
162 return nil, nil 162 return nil, nil
163 default: 163 default:
164 » » return nil, errors.WrapTransient(err) 164 » » return nil, retry.Tag.Apply(err)
165 } 165 }
166 } 166 }
167 167
168 //// 168 ////
169 169
170 // profile is used in both userEntity and sessionEntity. It holds information 170 // profile is used in both userEntity and sessionEntity. It holds information
171 // about a user extracted from user.User struct. 171 // about a user extracted from user.User struct.
172 type profile struct { 172 type profile struct {
173 Identity string 173 Identity string
174 Superuser bool `gae:",noindex"` 174 Superuser bool `gae:",noindex"`
(...skipping 28 matching lines...) Expand all
203 ID int64 `gae:"$id"` 203 ID int64 `gae:"$id"`
204 Parent *ds.Key `gae:"$parent"` 204 Parent *ds.Key `gae:"$parent"`
205 205
206 Profile profile 206 Profile profile
207 Created time.Time // when this session was created 207 Created time.Time // when this session was created
208 Expiration time.Time // when this session expires 208 Expiration time.Time // when this session expires
209 209
210 IsClosed bool // if true, the session was closed by CloseSession() 210 IsClosed bool // if true, the session was closed by CloseSession()
211 Closed time.Time // when the session was closed by CloseSession() 211 Closed time.Time // when the session was closed by CloseSession()
212 } 212 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698