device-tracker 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +2 -0
  4. data/Readme.md +1 -0
  5. data/bin/console +1 -1
  6. data/device-tracker.gemspec +8 -2
  7. data/exe/device-tracker +48 -9
  8. data/lib/device_tracker/app.rb +21 -0
  9. data/lib/{device/tracker → device_tracker}/config-schema.json +0 -0
  10. data/lib/{device/tracker → device_tracker}/config.ru +0 -0
  11. data/lib/device_tracker/controllers/application_controller.rb +220 -0
  12. data/lib/device_tracker/controllers/devices_controller.rb +313 -0
  13. data/lib/device_tracker/controllers/heartbeat_controller.rb +54 -0
  14. data/lib/device_tracker/controllers/os_controller.rb +41 -0
  15. data/lib/device_tracker/controllers/transactions_controller.rb +19 -0
  16. data/lib/device_tracker/controllers/users_controller.rb +191 -0
  17. data/lib/{device/tracker → device_tracker}/db/migrate/20150521071815_create_users.rb +0 -0
  18. data/lib/{device/tracker → device_tracker}/db/migrate/20150521082155_create_devices.rb +0 -0
  19. data/lib/{device/tracker → device_tracker}/db/migrate/20150521120335_create_operating_systems.rb +0 -0
  20. data/lib/{device/tracker → device_tracker}/db/migrate/20150527162242_create_transactions.rb +0 -0
  21. data/lib/{device/tracker → device_tracker}/db/migrate/20151027073050_create_heartbeat.rb +0 -0
  22. data/lib/{device/tracker → device_tracker}/db/migrate/20151028132946_add_user_verification.rb +0 -0
  23. data/lib/{device/tracker → device_tracker}/db/migrate/20151028141328_remove_is_active_from_users.rb +0 -0
  24. data/lib/{device/tracker → device_tracker}/db/migrate/20151029085629_add_password_reset_code_to_users.rb +0 -0
  25. data/lib/{device/tracker → device_tracker}/db/migrate/20151030130341_add_missing_column_to_devices.rb +0 -0
  26. data/lib/{device/tracker → device_tracker}/db/migrate/20151102141601_add_serial_number_to_devices.rb +0 -0
  27. data/lib/{device/tracker → device_tracker}/db/schema.rb +0 -0
  28. data/lib/device_tracker/db/seeds.rb +46 -0
  29. data/lib/{device/tracker → device_tracker}/dependencies.rb +0 -1
  30. data/lib/device_tracker/device_tracker.rb +17 -0
  31. data/lib/device_tracker/helpers/application_helper.rb +82 -0
  32. data/lib/device_tracker/models/device.rb +35 -0
  33. data/lib/device_tracker/models/heartbeat.rb +7 -0
  34. data/lib/device_tracker/models/operating_system.rb +6 -0
  35. data/lib/device_tracker/models/transaction.rb +54 -0
  36. data/lib/device_tracker/models/user.rb +20 -0
  37. data/lib/{device/tracker → device_tracker}/public/css/bootstrap-sortable.css +0 -0
  38. data/lib/{device/tracker → device_tracker}/public/css/bootstrap.min.css +0 -0
  39. data/lib/{device/tracker → device_tracker}/public/css/custom.css +0 -0
  40. data/lib/{device/tracker → device_tracker}/public/favicon.png +0 -0
  41. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-144x144.png +0 -0
  42. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-192x192.png +0 -0
  43. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-36x36.png +0 -0
  44. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-48x48.png +0 -0
  45. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-72x72.png +0 -0
  46. data/lib/{device/tracker → device_tracker}/public/favicon/android-chrome-96x96.png +0 -0
  47. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-114x114.png +0 -0
  48. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-120x120.png +0 -0
  49. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-144x144.png +0 -0
  50. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-152x152.png +0 -0
  51. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-180x180.png +0 -0
  52. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-57x57.png +0 -0
  53. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-60x60.png +0 -0
  54. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-72x72.png +0 -0
  55. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-76x76.png +0 -0
  56. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon-precomposed.png +0 -0
  57. data/lib/{device/tracker → device_tracker}/public/favicon/apple-touch-icon.png +0 -0
  58. data/lib/{device/tracker → device_tracker}/public/favicon/browserconfig.xml +0 -0
  59. data/lib/{device/tracker → device_tracker}/public/favicon/favicon-16x16.png +0 -0
  60. data/lib/{device/tracker → device_tracker}/public/favicon/favicon-32x32.png +0 -0
  61. data/lib/{device/tracker → device_tracker}/public/favicon/favicon-96x96.png +0 -0
  62. data/lib/{device/tracker → device_tracker}/public/favicon/favicon.ico +0 -0
  63. data/lib/{device/tracker → device_tracker}/public/favicon/manifest.json +0 -0
  64. data/lib/{device/tracker → device_tracker}/public/favicon/mstile-144x144.png +0 -0
  65. data/lib/{device/tracker → device_tracker}/public/favicon/mstile-150x150.png +0 -0
  66. data/lib/{device/tracker → device_tracker}/public/favicon/mstile-310x150.png +0 -0
  67. data/lib/{device/tracker → device_tracker}/public/favicon/mstile-310x310.png +0 -0
  68. data/lib/{device/tracker → device_tracker}/public/favicon/mstile-70x70.png +0 -0
  69. data/lib/{device/tracker → device_tracker}/public/favicon/safari-pinned-tab.svg +0 -0
  70. data/lib/{device/tracker → device_tracker}/public/fonts/glyphicons-halflings-regular.eot +0 -0
  71. data/lib/{device/tracker → device_tracker}/public/fonts/glyphicons-halflings-regular.svg +0 -0
  72. data/lib/{device/tracker → device_tracker}/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  73. data/lib/{device/tracker → device_tracker}/public/fonts/glyphicons-halflings-regular.woff +0 -0
  74. data/lib/{device/tracker → device_tracker}/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
  75. data/lib/{device/tracker → device_tracker}/public/js/bootstrap-sortable.js +0 -0
  76. data/lib/{device/tracker → device_tracker}/public/js/bootstrap.min.js +0 -0
  77. data/lib/{device/tracker → device_tracker}/public/js/jquery-2.1.4.min.js +0 -0
  78. data/lib/device_tracker/version.rb +3 -0
  79. data/lib/{device/tracker → device_tracker}/views/404.erb +0 -0
  80. data/lib/{device/tracker → device_tracker}/views/_alert.erb +0 -0
  81. data/lib/{device/tracker → device_tracker}/views/_device_form.erb +0 -0
  82. data/lib/{device/tracker → device_tracker}/views/_device_list.erb +0 -0
  83. data/lib/{device/tracker → device_tracker}/views/_footer.erb +0 -0
  84. data/lib/{device/tracker → device_tracker}/views/_header.erb +0 -0
  85. data/lib/{device/tracker → device_tracker}/views/_heartbeat_list.erb +0 -0
  86. data/lib/{device/tracker → device_tracker}/views/_user_form.erb +0 -0
  87. data/lib/{device/tracker → device_tracker}/views/devices/edit.erb +0 -0
  88. data/lib/{device/tracker → device_tracker}/views/devices/index.erb +0 -0
  89. data/lib/{device/tracker → device_tracker}/views/devices/new.erb +0 -0
  90. data/lib/{device/tracker → device_tracker}/views/devices/show.erb +0 -0
  91. data/lib/{device/tracker → device_tracker}/views/devices/users.erb +0 -0
  92. data/lib/{device/tracker → device_tracker}/views/emails/new_password.erb +0 -0
  93. data/lib/{device/tracker → device_tracker}/views/emails/password_reset.erb +0 -0
  94. data/lib/{device/tracker → device_tracker}/views/emails/registration.erb +0 -0
  95. data/lib/{device/tracker → device_tracker}/views/emails/reminder.erb +0 -0
  96. data/lib/{device/tracker → device_tracker}/views/emails/verification.erb +0 -0
  97. data/lib/{device/tracker → device_tracker}/views/forgot_password.erb +0 -0
  98. data/lib/{device/tracker → device_tracker}/views/index.erb +0 -0
  99. data/lib/{device/tracker → device_tracker}/views/layout.erb +0 -0
  100. data/lib/{device/tracker → device_tracker}/views/login.erb +0 -0
  101. data/lib/{device/tracker → device_tracker}/views/operating_system/operating_systems.json.jbuilder +0 -0
  102. data/lib/{device/tracker → device_tracker}/views/os/manage.erb +0 -0
  103. data/lib/{device/tracker → device_tracker}/views/transactions/_transactions_list.erb +0 -0
  104. data/lib/{device/tracker → device_tracker}/views/transactions/index.erb +0 -0
  105. data/lib/{device/tracker → device_tracker}/views/users/edit.erb +0 -0
  106. data/lib/{device/tracker → device_tracker}/views/users/manage.erb +0 -0
  107. data/lib/{device/tracker → device_tracker}/views/users/new.erb +0 -0
  108. metadata +187 -103
  109. data/lib/device/tracker.rb +0 -19
  110. data/lib/device/tracker/app.rb +0 -25
  111. data/lib/device/tracker/controllers/application_controller.rb +0 -215
  112. data/lib/device/tracker/controllers/devices_controller.rb +0 -315
  113. data/lib/device/tracker/controllers/heartbeat_controller.rb +0 -55
  114. data/lib/device/tracker/controllers/os_controller.rb +0 -43
  115. data/lib/device/tracker/controllers/transactions_controller.rb +0 -21
  116. data/lib/device/tracker/controllers/users_controller.rb +0 -193
  117. data/lib/device/tracker/db/data/devices.xlsx +0 -0
  118. data/lib/device/tracker/db/seeds.rb +0 -25
  119. data/lib/device/tracker/helpers/application_helper.rb +0 -84
  120. data/lib/device/tracker/models/device.rb +0 -39
  121. data/lib/device/tracker/models/heartbeat.rb +0 -9
  122. data/lib/device/tracker/models/operating_system.rb +0 -8
  123. data/lib/device/tracker/models/transaction.rb +0 -56
  124. data/lib/device/tracker/models/user.rb +0 -22
  125. data/lib/device/tracker/version.rb +0 -5
@@ -1,19 +0,0 @@
1
- require "device/tracker/version"
2
- require "device/tracker/dependencies"
3
- require "device/tracker/app"
4
- require "rack"
5
-
6
- module Device
7
- module Tracker
8
- def self.start(host, port)
9
- options = {
10
- :Host => host,
11
- :Port => port
12
- }
13
-
14
- Rack::Handler::Thin.run(App.new, options) do |server|
15
- [:INT, :TERM].each { |sig| trap(sig) { server.stop } }
16
- end
17
- end
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- require_relative 'dependencies'
2
- require 'rack'
3
-
4
- module Device
5
- module Tracker
6
-
7
- class App
8
- def initialize
9
- @app = Rack::Builder.new do
10
- map('/heartbeats') { run HeartbeatController }
11
- map('/transactions') { run TransactionsController }
12
- map('/users') { run UsersController }
13
- map('/devices') { run DevicesController }
14
- map('/os') { run OSController }
15
- map('/') { run ApplicationController }
16
- end
17
- end
18
-
19
- def call(env)
20
- @app.call(env)
21
- end
22
- end
23
-
24
- end
25
- end
@@ -1,215 +0,0 @@
1
- module Device
2
- module Tracker
3
- class ApplicationController < Sinatra::Base
4
- helpers ApplicationHelper
5
-
6
- register Sinatra::ActiveRecordExtension
7
- register Sinatra::Partial
8
- register Sinatra::Flash
9
-
10
- enable :sessions
11
- enable :partial_underscores
12
-
13
- set :views, File.expand_path('../../views', __FILE__)
14
- set :public_dir, File.expand_path('../../public', __FILE__)
15
- set :partial_template_engine, :erb
16
- set :session_secret, SECRET
17
-
18
- use Rack::MethodOverride
19
-
20
- EMAILS_PATH = File.expand_path('../../views/emails/', __FILE__)
21
-
22
- configure :development do
23
- require 'byebug'
24
- end
25
-
26
- configure :production, :development do
27
- enable :logging
28
- end
29
-
30
- not_found do
31
- @administrators = User.where(is_verified: true, is_admin: true)
32
- erb :"404"
33
- end
34
-
35
- get "/version" do
36
- halt 200, {
37
- error: false,
38
- version: $version
39
- }
40
- end
41
-
42
- get "/" do
43
- @devices = Device.where(available: false).order(checked_out_since: :desc).limit(10)
44
- erb :index, devices: @devices
45
- end
46
-
47
- get "/forgot-password" do
48
-
49
- if !params[:user_id].nil? and !params[:password_reset].nil?
50
-
51
- # Check to see if the user_id matches the password_reset
52
-
53
- @user = User.where(id: params[:user_id], reset_code: params[:password_reset]).first
54
-
55
- if @user.nil?
56
- create_flash "warning", ["Sorry, but something went wrong. Did you click on the correct link?"]
57
- redirect "/"
58
- end
59
-
60
- # Reset that back
61
- @user.reset_code = nil
62
-
63
- @new_password = generate_activation_code 12
64
-
65
- @user.password = @new_password
66
-
67
- @user.save
68
-
69
- body = ERB.new(File.read(EMAILS_PATH + "/new_password.erb")).result(binding)
70
-
71
- begin
72
- Pony.mail(
73
- :to => @user.email,
74
- :from => 'no-reply@device-tracker',
75
- :subject => 'New password | Device Tracker',
76
- :html_body => body
77
- )
78
- rescue Net::OpenTimeout => e
79
- puts "ERROR: Error sending email"
80
- end
81
-
82
- create_flash "success", ["Your new password has been emailed to #{@user.email}"]
83
- redirect "/login"
84
-
85
- else
86
- erb :"forgot_password"
87
- end
88
- end
89
-
90
- put "/:device_id/found" do |device_id|
91
-
92
- if Device.exists?(device_id)
93
-
94
- user = get_logged_in_user
95
-
96
- device = Device.find(device_id)
97
- device.missing = false
98
- device.save
99
-
100
- report_transaction("#{user[:email]} reported #{device.full_name} as found", Transaction.found, device)
101
-
102
- create_flash "success", ["Yay.. The device has been returned successfully!"]
103
- redirect back
104
- else
105
- raise Siatra::NotFound
106
- end
107
- end
108
-
109
- put "/:device_id/missing" do |device_id|
110
- if Device.exists?(device_id)
111
-
112
- user = get_logged_in_user
113
-
114
- device = Device.find(device_id)
115
- device.missing = true
116
- device.save
117
-
118
- report_transaction("#{user[:email]} reported #{device.full_name} missing", Transaction.missing, device)
119
-
120
- create_flash "success", ["Oh no, the device has been reported missing!"]
121
- redirect back
122
- else
123
- raise Sinatra::NotFound
124
- end
125
- end
126
-
127
- post "/forgot-password" do
128
- # user = User.find(params[:email])
129
- if User.exists?(email: params[:email])
130
-
131
- # Generate a random string
132
- random_string = generate_activation_code 24
133
-
134
- @user = User.find_by_email(params[:email])
135
- @user.reset_code = random_string
136
- @user.save
137
-
138
- @password_reset_url = request.url + "?user_id=#{@user.id}&password_reset=#{random_string}"
139
-
140
- body = ERB.new(File.read(EMAILS_PATH + "/password_reset.erb")).result(binding)
141
-
142
- # Email that user with the link
143
- # /password-reset?user_id=1&reset_code=MWAZ9JT9WKRP7RPTF3RHEG9J
144
- begin
145
- Pony.mail(
146
- :to => @user.email,
147
- :subject => 'Password Reset | Device Tracker',
148
- :html_body => body
149
- )
150
- rescue Net::OpenTimeout => e
151
- puts "ERROR: Error sending email"
152
- end
153
-
154
- # Validate the link
155
- # Send the user a new password
156
-
157
- create_flash "success", ["We have sent you a password reset link to #{@user.email}"]
158
- redirect back
159
-
160
- else
161
- create_flash "warning", ["Sorry, but the email #{params[:email]} doesn't exist."]
162
- redirect back
163
- end
164
- end
165
-
166
- get "/logout" do
167
- session[:user] = nil
168
- redirect to("/")
169
- end
170
-
171
- get "/login" do
172
- erb :login
173
- end
174
-
175
- post "/login" do
176
-
177
- # Parse the form
178
- email = params[:user][:email]
179
- password = params[:user][:password]
180
-
181
- if email.empty? or password.empty?
182
- create_flash "warning", ["Please supply a username and or password"]
183
- redirect back
184
- end
185
-
186
- flash[:email] = email
187
-
188
- user = User.find_by_email(email)
189
-
190
- unless user.is_verified
191
- create_flash "warning", ["Your account is waiting verification."]
192
- redirect back
193
- end
194
-
195
- if user.nil? or !user.authenticate(password)
196
- create_flash "warning", ["You entered an invalid username and or password, please try again."]
197
- redirect back
198
- end
199
-
200
-
201
- session[:user] = {
202
- id: user.id,
203
- name: user.name,
204
- email: user.email,
205
- is_admin: user.is_admin,
206
- is_verified: user.is_verified
207
- }
208
-
209
- redirect to("devices/users/#{session[:user][:id]}")
210
-
211
- end
212
-
213
- end
214
- end
215
- end
@@ -1,315 +0,0 @@
1
- require_relative 'application_controller'
2
-
3
- module Device
4
- module Tracker
5
-
6
- class DevicesController < ApplicationController
7
-
8
- before do
9
- protected!
10
- end
11
-
12
- get "/new" do
13
- perform_admin_check
14
-
15
- @device = Device.new
16
-
17
- @operating_systems = OperatingSystem.select(:name, :id).distinct.order(:name)
18
-
19
- erb :"devices/new"
20
- end
21
-
22
- post "/create" do
23
- perform_admin_check
24
-
25
- attributes = {
26
- unid: params[:device][:unid],
27
- manufacturer: params[:device][:manufacturer],
28
- device: params[:device][:device],
29
- description: params[:device][:description],
30
- imei: params[:device][:imei],
31
- serial_number: params[:device][:serial_number],
32
- operating_system_id: params[:device][:operating_system_id]
33
- }
34
-
35
- if params[:device][:sim_card]
36
- attributes[:sim_card] = true
37
- end
38
-
39
- if params[:device][:debug_device]
40
- attributes[:debug_device] = true
41
- end
42
-
43
- attributes.each do |key, value|
44
- flash[key] = value
45
- end
46
-
47
- @device = Device.new(attributes)
48
-
49
- if @device.valid?
50
- @device.save
51
- create_flash "success", ["Created new device #{@device.full_name}"]
52
- redirect "/devices/#{@device.id}"
53
- else
54
- create_flash "warning", @device.errors.full_messages
55
- redirect back
56
- end
57
- end
58
-
59
- get "/" do
60
- @title = "All Devices"
61
-
62
- @devices = Device.all
63
- @users = User.all
64
-
65
- @show_search = true
66
-
67
- if params[:device_name] && ! params[:device_name].empty?
68
- @show_search = false
69
- @devices = @devices.where("device like ? or manufacturer like ?", "%#{params[:device_name]}%", "%#{params[:device_name]}%")
70
- end
71
-
72
- @devices = @devices.sort { |a, b| a.full_name <=> b.full_name }
73
-
74
- erb :"devices/index"
75
- end
76
-
77
- get "/checked-out" do
78
- @devices = Device.where(available: false).order(checked_out_since: :desc)
79
- @users = User.all
80
-
81
- if params[:device_name] && ! params[:device_name].empty?
82
- @devices = @devices.where("description like ?", "%#{params[:device_name]}%")
83
- end
84
-
85
- @title = "Checked out Devices"
86
-
87
- erb :"devices/index"
88
- end
89
-
90
- get "/:device_id" do |device_id|
91
-
92
- unless Device.exists?(device_id)
93
- raise Sinatra::NotFound
94
- end
95
-
96
- @users = User.where(is_verified: true).order(email: :desc)
97
-
98
- @device = Device.find(device_id)
99
-
100
- if @device.missing?
101
- @last_checkout_transaction = Transaction
102
- .where(transaction_type: 'CHECKOUT', device_id: @device.id)
103
- .order(id: :desc).first
104
- end
105
-
106
- @transactions = @device.transactions.order(created_at: :desc).take(10)
107
-
108
- @current_user = get_logged_in_user
109
-
110
- erb :"devices/show"
111
- end
112
-
113
- put "/:device_id" do |device_id|
114
- perform_admin_check
115
-
116
- unless Device.exists?(device_id)
117
- raise Sinatra::NotFound
118
- end
119
-
120
- params[:device].each do |key, value|
121
- flash[key.to_sym] = value
122
- end
123
-
124
- @device = Device.find(device_id)
125
- @device.update(params[:device])
126
-
127
- if @device.save
128
-
129
- create_flash "success", ["The device has been successfully updated."]
130
- redirect "/devices/#{device_id}"
131
- else
132
- create_flash "warning", @device.errors.full_messages
133
- redirect back
134
- end
135
-
136
- end
137
-
138
- # devices/users/1
139
- get "/users/:user_id" do |user_id|
140
-
141
- user = get_logged_in_user
142
-
143
- if user[:id] != user_id.to_i
144
- create_flash "warning", ["You don't have permission to view this page."]
145
- redirect back
146
- end
147
-
148
- unless User.exists?(user_id)
149
- raise Sinatra::NotFound
150
- end
151
-
152
- # Get the user
153
- @user = User.find(user_id)
154
-
155
- @devices = @user.devices
156
-
157
- erb :"devices/users", devices: @devices
158
- end
159
-
160
- put "/:device_id/return" do |device_id|
161
-
162
- unid = device_id.upcase
163
-
164
- if Device.exists?(unid: unid)
165
- @device = Device.find_by_unid(unid)
166
-
167
- user = @device.user
168
-
169
- current_user = get_logged_in_user
170
- if current_user[:id] == @device.user.id
171
- report_transaction("#{user.email} returned #{@device.device}", Transaction.return, @device)
172
- else
173
- report_transaction("#{current_user[:email]} returned #{@device.device} on behalf of #{@device.user.email}", Transaction.return, @device)
174
- end
175
-
176
- @device.user = nil
177
- @device.available = true
178
- @device.checked_out_since = nil
179
-
180
- @device.save
181
-
182
- create_flash "success", ["The device has been successfully returned, thank you."]
183
- redirect back
184
- else
185
- create_flash "warning", ["Device not found with id #{device_id}."]
186
- redirect back
187
- end
188
- end
189
-
190
- put "/:device_id/checkout" do |device_id|
191
-
192
- unid = device_id.upcase
193
-
194
- if Device.exists?(unid: unid)
195
-
196
- @user = User.find(session[:user][:id])
197
-
198
- device = Device.find_by_unid(unid)
199
- device.user = @user
200
-
201
- device.available = false
202
- device.checked_out_since = Time.now.utc.iso8601
203
-
204
- if device.save
205
- report_transaction("#{@user.email} checked out #{device.device}.", Transaction.checkout, device)
206
-
207
- create_flash "success", ["You have successfully checked out the device."]
208
- redirect back
209
-
210
- else
211
- create_flash "warning", device.errors.full_messages
212
- redirect back
213
- end
214
-
215
- end
216
-
217
- end
218
-
219
- # /devices/<%= @device.id %>/assign
220
- put "/:device_id/assign" do |device_id|
221
- perform_admin_check
222
-
223
- if Device.exists?(device_id)
224
-
225
- user_id = params[:user_id]
226
-
227
- if user_id.nil?
228
- create_flash "warning", ["You must select a user to assign the device to"]
229
- redirect back
230
- end
231
-
232
- @current_user = User.find(session[:user][:id])
233
- if ! User.exists?(user_id)
234
- create_flash "danger", ["User not found with id #{user_id}"]
235
- end
236
-
237
- @assigned_user = User.find(user_id)
238
-
239
- device = Device.find(device_id)
240
- device.user = @assigned_user
241
-
242
- device.available = false
243
- device.checked_out_since = Time.now.utc.iso8601
244
-
245
- if device.save
246
- report_transaction("#{@current_user.email} checked out #{device.device} on behalf of #{@assigned_user.email}", Transaction.checkout, device)
247
- end
248
-
249
- create_flash "success", ["You have successfully assigned out the device to #{@assigned_user.name}."]
250
- redirect back
251
-
252
- end
253
- end
254
-
255
- post "/:device_id/send_reminder" do |device_id|
256
- perform_admin_check
257
-
258
- if Device.exists?(device_id)
259
-
260
- @device = Device.find(device_id)
261
- @device_url = request.base_url + '/devices/' + device_id
262
-
263
- body = ERB.new(File.read(EMAILS_PATH + "/reminder.erb")).result(binding)
264
-
265
- begin
266
- Pony.mail(
267
- :to => [@device.user.email],
268
- :from => 'no-reply@device-tracker',
269
- :subject => 'Reminder | Device Tracker',
270
- :html_body => body
271
- )
272
- rescue Net::OpenTimeout => e
273
- puts "ERROR: Error sending email"
274
- end
275
-
276
- # Send email
277
- create_flash "success", ["A reminder email has been sent out to #{@device.user.name}."]
278
- redirect "/devices/#{device_id}"
279
-
280
- else
281
- # Feedback
282
- create_flash "warning", ["Sorry but that device doesn't exists.."]
283
- redirect "/devices/#{device_id}"
284
- end
285
-
286
- end
287
-
288
- get "/:device_id/edit" do |device_id|
289
- perform_admin_check
290
-
291
- unless Device.exists?(device_id)
292
- raise Sinatra::NotFound
293
- end
294
-
295
- @device = Device.find(device_id)
296
- @operating_systems = OperatingSystem.select(:name, :id).distinct.order(:name)
297
-
298
- erb :"devices/edit"
299
- end
300
-
301
- delete "/:device_id" do |device_id|
302
- perform_admin_check
303
-
304
- unless Device.exists?(device_id)
305
- raise Sinatra::NotFound
306
- end
307
-
308
- @device = Device.find(device_id).destroy
309
- create_flash "success", ["Deleted device #{@device.unid}"]
310
- redirect "/devices"
311
- end
312
-
313
- end
314
- end
315
- end