2016-09-22 15:59:39 -06:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe SessionToken do
|
2017-10-22 07:19:50 -06:00
|
|
|
let(:user) { FactoryBot.create(:user) }
|
2016-09-22 15:59:39 -06:00
|
|
|
|
|
|
|
FAKE_TOKEN = [
|
|
|
|
{ "sub" => "admin@admin.com",
|
|
|
|
"iat" => 1474570171,
|
|
|
|
"jti" => "c315f378-a318-4d4c-ba06-e4544cbc0621",
|
2016-11-08 15:09:46 -07:00
|
|
|
"iss" => "//localhost:3000",
|
2016-09-22 15:59:39 -06:00
|
|
|
"exp" => 1474915771,
|
|
|
|
"mqtt" => "localhost",
|
|
|
|
"bot" => "04b57247-763a-4e99-b1a7-3743fe946a1a" },
|
|
|
|
{ "typ" => "JWT",
|
|
|
|
"alg" => "RS256" }
|
|
|
|
]
|
|
|
|
|
|
|
|
it 'initializes' do
|
|
|
|
token = SessionToken.new(FAKE_TOKEN)
|
|
|
|
expect(token.unencoded).to be_kind_of(Hash)
|
|
|
|
actual = token.unencoded
|
|
|
|
expected = FAKE_TOKEN[0]
|
|
|
|
expect(actual["sub"]).to eq(expected["sub"])
|
|
|
|
expect(actual["iat"]).to eq(expected["iat"])
|
|
|
|
expect(actual["jti"]).to eq(expected["jti"])
|
|
|
|
expect(actual["iss"]).to eq(expected["iss"])
|
|
|
|
expect(actual["exp"]).to eq(expected["exp"])
|
|
|
|
expect(actual["mqtt"]).to eq(expected["mqtt"])
|
|
|
|
expect(actual["bot"]).to eq(expected["bot"])
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'issues a token to a user' do
|
2018-01-04 12:06:23 -07:00
|
|
|
token = SessionToken.issue_to(user, iat: 000,
|
2017-12-05 15:17:22 -07:00
|
|
|
exp: 456,
|
|
|
|
iss: "//lycos.com:9867",
|
|
|
|
fbos_version: Gem::Version.new("9.9.9"))
|
2018-01-04 12:06:23 -07:00
|
|
|
expect(token.unencoded[:beta_os_update_server]).to be_kind_of(String)
|
2016-09-22 15:59:39 -06:00
|
|
|
end
|
2017-12-06 07:12:14 -07:00
|
|
|
|
|
|
|
it 'conditionally sets `os_update_server`' do
|
|
|
|
test_case = -> (ver) do
|
|
|
|
SessionToken
|
|
|
|
.issue_to(user, fbos_version: Gem::Version.new(ver))
|
|
|
|
.unencoded[:os_update_server]
|
|
|
|
end
|
|
|
|
|
2018-01-14 07:01:37 -07:00
|
|
|
expect(test_case["0.0.0"]).to eq(CalculateUpgrade::OLD_OS_URL)
|
|
|
|
expect(test_case["5.0.5"]).to eq(CalculateUpgrade::OLD_OS_URL)
|
|
|
|
expect(test_case["5.0.6"]).to eq(CalculateUpgrade::OLD_OS_URL)
|
2018-01-14 07:18:22 -07:00
|
|
|
expect(test_case["5.0.8"]).to eq(CalculateUpgrade::MID_OS_URL)
|
2018-01-20 07:46:44 -07:00
|
|
|
expect(test_case["5.0.9"]).to eq(CalculateUpgrade::MID_OS_URL)
|
|
|
|
expect(test_case["6.0.1"]).to eq(CalculateUpgrade::OS_RELEASE)
|
2018-05-12 08:24:30 -06:00
|
|
|
expect(test_case["999.999.999"]).to eq(CalculateUpgrade::OS_RELEASE)
|
2018-05-10 11:59:57 -06:00
|
|
|
expect(test_case["0.0.0"]).to eq(CalculateUpgrade::OLD_OS_URL)
|
2017-12-06 07:12:14 -07:00
|
|
|
end
|
2016-09-29 14:55:53 -06:00
|
|
|
|
|
|
|
it "doesn't honor expired tokens" do
|
2017-10-17 14:39:50 -06:00
|
|
|
user.update_attributes!(confirmed_at: Time.now)
|
2017-12-05 15:17:22 -07:00
|
|
|
token = SessionToken.issue_to(user, iat: 000,
|
|
|
|
exp: 1,
|
|
|
|
iss: "//lycos.com:9867",
|
|
|
|
fbos_version: Gem::Version.new("9.9.9"))
|
2016-09-29 14:55:53 -06:00
|
|
|
result = Auth::FromJWT.run(jwt: token.encoded)
|
|
|
|
expect(result.success?).to be(false)
|
2017-10-16 06:12:46 -06:00
|
|
|
expect(result.errors.values.first.message)
|
|
|
|
.to eq(Auth::ReloadToken::BAD_SUB)
|
2016-09-29 14:55:53 -06:00
|
|
|
end
|
2017-10-16 06:12:46 -06:00
|
|
|
|
2017-10-11 09:45:34 -06:00
|
|
|
unless ENV["NO_EMAILS"]
|
|
|
|
it "doesn't mint tokens for unverified users" do
|
2017-10-17 14:39:50 -06:00
|
|
|
user.update_attributes!(confirmed_at: nil)
|
2017-10-11 09:45:34 -06:00
|
|
|
expect {
|
2017-12-05 15:17:22 -07:00
|
|
|
SessionToken.issue_to(user, iat: 000,
|
|
|
|
exp: 1,
|
|
|
|
iss: "//lycos.com:9867",
|
|
|
|
fbos_version: Gem::Version.new("9.9.9"))
|
2017-10-11 09:45:34 -06:00
|
|
|
}.to raise_error(Errors::Forbidden)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
puts "Skipping a test because NO_EMAILS was enabled."
|
2017-10-08 20:06:10 -06:00
|
|
|
end
|
2016-09-22 15:59:39 -06:00
|
|
|
end
|