MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / ClientLogout

Method ClientLogout

pkg/oauth/user.go:41–111  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

39)
40
41func (s *server) ClientLogout(w http.ResponseWriter, r *http.Request) {
42 ctx := r.Context()
43 accessTokenID := r.URL.Query().Get("access_token_id")
44 redirectURI := s.config.UI.MountPath()
45 if accessTokenID == "" {
46 webhandlers.Error(w, r, errMissingAccessTokenIDParam.New())
47 return
48 }
49 err := s.store.Transact(ctx, func(ctx context.Context, st store.Interface) error {
50 at, err := st.GetAccessToken(ctx, accessTokenID)
51 if err != nil && !errors.IsNotFound(err) {
52 return err
53 }
54 if at != nil {
55 client, err := st.GetClient(ctx, at.ClientIds, []string{"logout_redirect_uris"})
56 if err != nil {
57 return err
58 }
59 if err = st.DeleteAccessToken(ctx, accessTokenID); err != nil {
60 return err
61 }
62 events.Publish(evtAccessTokenDeleted.NewWithIdentifiersAndData(ctx, at.UserIds, nil))
63 err = st.DeleteSession(ctx, at.UserIds, at.UserSessionId)
64 if err != nil && !errors.IsNotFound(err) {
65 return err
66 }
67 events.Publish(EvtUserLogout.NewWithIdentifiersAndData(ctx, at.UserIds, nil))
68 redirectParam := r.URL.Query().Get("post_logout_redirect_uri")
69 if redirectParam == "" {
70 if len(client.LogoutRedirectUris) != 0 {
71 redirectURI = client.LogoutRedirectUris[0]
72 }
73 } else {
74 for _, uri := range client.LogoutRedirectUris {
75 redirectURI, err = osin.ValidateUri(uri, redirectParam)
76 if err == nil {
77 break
78 }
79 }
80 if err != nil {
81 return errInvalidLogoutRedirectURI.WithCause(err)
82 }
83 }
84 }
85 var session *ttnpb.UserSession
86 r, session, err = s.session.Get(w, r)
87 if err != nil && !errors.IsUnauthenticated(err) && !errors.IsNotFound(err) {
88 return err
89 }
90 if session != nil {
91 events.Publish(evtUserSessionTerminated.NewWithIdentifiersAndData(ctx, session.GetUserIds(), nil))
92 if session.GetSessionId() != at.GetUserSessionId() {
93 if err = st.DeleteSession(ctx, session.GetUserIds(), session.SessionId); err != nil {
94 return err
95 }
96 }
97 }
98 return nil

Callers

nothing calls this directly

Calls 15

GetUserIdsMethod · 0.95
GetSessionIdMethod · 0.95
ErrorFunction · 0.92
IsNotFoundFunction · 0.92
PublishFunction · 0.92
IsUnauthenticatedFunction · 0.92
MountPathMethod · 0.80
RemoveAuthCookieMethod · 0.80
ContextMethod · 0.65
GetMethod · 0.65
NewMethod · 0.65
TransactMethod · 0.65

Tested by

no test coverage detected