Skip to content

Commit

Permalink
Add JWT validation to for the engine - notification validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Emmanuel Chigbo committed Jun 9, 2016
1 parent 4526e3f commit 0fba591
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 20 deletions.
3 changes: 2 additions & 1 deletion app/services/token_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

class TokenManager
class << self
def generate_token(user_id, exp = 24.hours.from_now)
def generate_token(user_id, exp = 24.hours.from_now, notify_object = nil)
payload = { user: user_id, exp: exp.to_i }
payload = { object: notify_object, exp: exp.to_i } if notify_object
issue_token(payload)
end

Expand Down
4 changes: 3 additions & 1 deletion app/workers/notification_system_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ class NotificationSystemWorker

def perform(klass, object_id)
object = klass.constantize.find(object_id).object_for_notification
ZiNotification::Client.post(Endpoints[:new_resource], object)
token = TokenManager.generate_token(nil, 5.minutes.from_now, object)
options = { object: object, json_token: token }
ZiNotification::Client.post(Endpoints[:new_resource], options)
end
end
59 changes: 41 additions & 18 deletions spec/services/token_manager_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,56 @@
let(:user){ create(:user) }

describe ".generate_token" do
let(:token){ subject.generate_token(user.id) }

it 'generates a valid token' do
expect(token.split('.').count).to eq 3
expect{subject.decode(token)}.not_to raise_error
describe 'arguments' do
it 'throws argument error if no arg is provided' do
expect{ subject.generate_token }.to raise_error ArgumentError
end
end

describe 'token expiration' do
it 'sets expiration time to 24hrs by default' do
decoded = subject.decode(token)
expect(decoded.first['exp']).to eql 24.hours.from_now.to_i
context "when generating token for a user" do
let(:token){ subject.generate_token(user.id) }

it 'generates a valid token' do
expect(token.split('.').count).to eq 3
expect{subject.decode(token)}.not_to raise_error
end

it 'sets expiration time to any time given' do
temp_token = subject.generate_token(user.id, 2.minutes.from_now)
decoded = subject.decode(temp_token)
expect(decoded.first['exp']).to eql 2.minutes.from_now.to_i
expect(decoded.first['exp']).not_to eql 24.hours.from_now.to_i
describe 'token expiration' do
it 'sets expiration time to 24hrs by default' do
decoded = subject.decode(token)
expect(decoded.first['exp']).to eql 24.hours.from_now.to_i
end

it 'sets expiration time to any time given' do
temp_token = subject.generate_token(user.id, 2.minutes.from_now)
decoded = subject.decode(temp_token)
expect(decoded.first['exp']).to eql 2.minutes.from_now.to_i
expect(decoded.first['exp']).not_to eql 24.hours.from_now.to_i
end
end
end

describe 'arguments' do
it 'throws argument error if no arg is provided' do
expect{ subject.generate_token }.to raise_error ArgumentError
context "when generating token for notification" do
let(:object) { { "id" => 1, "title" => "sample object" } }
let(:token){ subject.generate_token(nil, 5.minutes.from_now, object) }

it 'generates a valid token' do
expect(token.split('.').count).to eq 3
expect{subject.decode(token)}.not_to raise_error
end
end

describe 'token expiration' do
it 'sets expiration time to 5 minutes' do
decoded = subject.decode(token)
expect(decoded.first['exp']).to eql 5.minutes.from_now.to_i
end

it 'sets the notification object' do
decoded = subject.decode(token)
expect(decoded.first['object']).to eql object
end
end
end
end

describe ".issue_token" do
Expand Down

0 comments on commit 0fba591

Please sign in to comment.