mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-04 00:13:08 +08:00
The current impersonation feature works by signing you in as the user you are impersonating. This has the side effect of invalidating your own session and forcing you to log out and in again. In this experimental implementation you keep your existing session, but DefaultCurrentUserProvider returns the user being impersonated, allowing you to see the site from their perspective.
52 lines
1.1 KiB
Ruby
52 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Auth
|
|
end
|
|
|
|
class Auth::CurrentUserProvider
|
|
# do all current user initialization here
|
|
def initialize(env)
|
|
raise NotImplementedError
|
|
end
|
|
|
|
# our current user, return nil if none is found
|
|
def current_user
|
|
raise NotImplementedError
|
|
end
|
|
|
|
# log on a user and set cookies and session etc.
|
|
def log_on_user(user, session, cookie_jar, opts = {})
|
|
raise NotImplementedError
|
|
end
|
|
|
|
# optional interface to be called to refresh cookies etc if needed
|
|
def refresh_session(user, session, cookie_jar)
|
|
end
|
|
|
|
# Optional interface for implementing impersonation.
|
|
def start_impersonating_user(user)
|
|
end
|
|
|
|
# Optional interface for implementing impersonation.
|
|
def stop_impersonating_user
|
|
end
|
|
|
|
# api has special rights return true if api was detected
|
|
def is_api?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def is_user_api?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
# we may need to know very early on in the middleware if an auth token
|
|
# exists, to optimise caching
|
|
def has_auth_cookie?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def log_off_user(session, cookie_jar)
|
|
raise NotImplementedError
|
|
end
|
|
end
|