FEATURE: remove support for legacy auth tokens
This commit is contained in:
parent
62a8904729
commit
3a06cb461e
|
@ -4,6 +4,9 @@ require 'digest/sha1'
|
||||||
class UserAuthToken < ActiveRecord::Base
|
class UserAuthToken < ActiveRecord::Base
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
|
# TODO 2019: remove this line
|
||||||
|
self.ignored_columns = ["legacy"]
|
||||||
|
|
||||||
ROTATE_TIME = 10.minutes
|
ROTATE_TIME = 10.minutes
|
||||||
# used when token did not arrive at client
|
# used when token did not arrive at client
|
||||||
URGENT_ROTATE_TIME = 1.minute
|
URGENT_ROTATE_TIME = 1.minute
|
||||||
|
@ -48,9 +51,8 @@ class UserAuthToken < ActiveRecord::Base
|
||||||
expire_before = SiteSetting.maximum_session_age.hours.ago
|
expire_before = SiteSetting.maximum_session_age.hours.ago
|
||||||
|
|
||||||
user_token = find_by("(auth_token = :token OR
|
user_token = find_by("(auth_token = :token OR
|
||||||
prev_auth_token = :token OR
|
prev_auth_token = :token) AND rotated_at > :expire_before",
|
||||||
(auth_token = :unhashed_token AND legacy)) AND rotated_at > :expire_before",
|
token: token, expire_before: expire_before)
|
||||||
token: token, unhashed_token: unhashed_token, expire_before: expire_before)
|
|
||||||
|
|
||||||
if !user_token
|
if !user_token
|
||||||
|
|
||||||
|
@ -180,7 +182,6 @@ end
|
||||||
# prev_auth_token :string not null
|
# prev_auth_token :string not null
|
||||||
# user_agent :string
|
# user_agent :string
|
||||||
# auth_token_seen :boolean default(FALSE), not null
|
# auth_token_seen :boolean default(FALSE), not null
|
||||||
# legacy :boolean default(FALSE), not null
|
|
||||||
# client_ip :inet
|
# client_ip :inet
|
||||||
# rotated_at :datetime not null
|
# rotated_at :datetime not null
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
|
|
|
@ -94,6 +94,17 @@ Migration::ColumnDropper.drop(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Migration::ColumnDropper.drop(
|
||||||
|
table: 'user_auth_tokens',
|
||||||
|
after_migration: 'RemoveLegacyAuthToken',
|
||||||
|
columns: %w[
|
||||||
|
legacy
|
||||||
|
],
|
||||||
|
on_drop: ->() {
|
||||||
|
STDERR.puts 'Removing user_auth_token legacy column!'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# User for the smoke tests
|
# User for the smoke tests
|
||||||
if ENV["SMOKE"] == "1"
|
if ENV["SMOKE"] == "1"
|
||||||
UserEmail.seed do |ue|
|
UserEmail.seed do |ue|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RemoveLegacyAuthToken < ActiveRecord::Migration[5.1]
|
||||||
|
def change
|
||||||
|
# placeholder so we can drop column in 009_users.rb
|
||||||
|
end
|
||||||
|
end
|
|
@ -169,26 +169,6 @@ describe Auth::DefaultCurrentUserProvider do
|
||||||
expect(provider("/topic/anything/goes", method: "GET").should_update_last_seen?).to eq(true)
|
expect(provider("/topic/anything/goes", method: "GET").should_update_last_seen?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly supports legacy tokens" do
|
|
||||||
user = Fabricate(:user)
|
|
||||||
token = SecureRandom.hex(16)
|
|
||||||
user_token = UserAuthToken.create!(user_id: user.id, auth_token: token,
|
|
||||||
prev_auth_token: token, legacy: true,
|
|
||||||
rotated_at: Time.zone.now
|
|
||||||
)
|
|
||||||
|
|
||||||
prov = provider("/", "HTTP_COOKIE" => "_t=#{user_token.auth_token}")
|
|
||||||
expect(prov.current_user.id).to eq(user.id)
|
|
||||||
|
|
||||||
# sets a new token up cause it got a global token
|
|
||||||
cookies = {}
|
|
||||||
prov.refresh_session(user, {}, cookies)
|
|
||||||
user.reload
|
|
||||||
|
|
||||||
expect(user.user_auth_tokens.count).to eq(2)
|
|
||||||
expect(cookies["_t"][:value]).not_to eq(token)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "correctly rotates tokens" do
|
it "correctly rotates tokens" do
|
||||||
SiteSetting.maximum_session_age = 3
|
SiteSetting.maximum_session_age = 3
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
|
|
|
@ -31,7 +31,7 @@ describe UserAuthToken do
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can lookup both hashed and unhashed" do
|
it "can lookup hashed" do
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
|
|
||||||
token = UserAuthToken.generate!(user_id: user.id,
|
token = UserAuthToken.generate!(user_id: user.id,
|
||||||
|
@ -45,12 +45,6 @@ describe UserAuthToken do
|
||||||
lookup_token = UserAuthToken.lookup(token.auth_token)
|
lookup_token = UserAuthToken.lookup(token.auth_token)
|
||||||
|
|
||||||
expect(lookup_token).to eq(nil)
|
expect(lookup_token).to eq(nil)
|
||||||
|
|
||||||
token.update_columns(legacy: true)
|
|
||||||
|
|
||||||
lookup_token = UserAuthToken.lookup(token.auth_token)
|
|
||||||
|
|
||||||
expect(user.id).to eq(lookup_token.user.id)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can validate token was seen at lookup time" do
|
it "can validate token was seen at lookup time" do
|
||||||
|
|
Loading…
Reference in New Issue