Skip to content
Snippets Groups Projects
  • Brian Warner's avatar
    add checkExpiredSession check, set session.superSessionToken, add DB methods · 1b0444d8
    Brian Warner authored
    With this change, existing session cookies are invalidated when the user
    changes their password. This will also support a "log me out of
    everywhere" button, which merely needs to update the superSessionToken
    as if the password was changed.
    
    This adds .superSessionToken to all sessions in
    wsapi.authenticateSession, and checks it against the database row in
    during a new checkExpiredSession() call (run for all /wsapi requests,
    both GETs and POSTs).
    
    All database methods which create an account or modify the password were
    changed to also set .superSessionToken (to the current time).
    updatePassword() added an 'invalidateSessions' argument so passwords can
    be rehashed (when the bcrypt work factor changes) *without* invalidating
    sessions. Finally, the database added a new method named
    superSessionToken() to retrieve the current value, for comparison in
    checkExpiredSession().
    
    wsapi/update_password.js is changed to add a call to authenticateSession
    after changing the password, to update the cookie with the new
    .superSessionToken. This ensures that the user's new session works on
    the next call after update_password.
    
    Database rows that don't have a superSessionToken (created before the
    code was upgraded to include this change) will not enforce
    session-checking, so user sessions will not be spontaneously expired
    when the server is upgraded past this revision.
    1b0444d8