Browse Source

Improved device logging, do not delete current used device. Delete also sessions of device.

Martin Edenhofer 9 years ago
parent
commit
f2ef65d67d

+ 1 - 1
app/assets/javascripts/app/views/profile/devices.jst.eco

@@ -21,7 +21,7 @@
         <td><%= device.name %></td>
         <td><%= device.location %></td>
         <td><%- @humanTime(device.updated_at) %></td>
-        <td><a href="#" data-device-id="<%- device.id %>" data-type="delete" title="<%- @Ti('Delete') %>"><svg class="icon-trash"><use xlink:href="#icon-trash"></use></svg></a></td>
+        <td><a href="#" data-device-id="<%- device.id %>" data-type="delete" title="<%- @Ti('Delete') %>"<% if device.current: %>disabled<% end %>><svg class="icon-trash"><use xlink:href="#icon-trash"></use></svg></a></td>
       </tr>
     <% end %>
     <tbody>

+ 7 - 1
app/controllers/application_controller.rb

@@ -98,6 +98,9 @@ class ApplicationController < ActionController::Base
   # check user device
   def check_user_device
 
+    # return if we are in switch to user mode
+    return if session[:switched_from_user_id]
+
     # only if user_id exists
     return if !session[:user_id]
 
@@ -108,11 +111,14 @@ class ApplicationController < ActionController::Base
     return if session[:check_user_device_at] && session[:check_user_device_at] > Time.zone.now - 5.minutes
     session[:check_user_device_at] = Time.zone.now
 
-    UserDevice.add(
+    user_device = UserDevice.add(
       session[:user_agent],
       session[:remote_id],
       session[:user_id],
     )
+    if user_device.id != session[:check_user_device_id]
+      session[:check_user_device_id] = user_device.id
+    end
   end
 
   def authentication_check_only(auth_param)

+ 17 - 1
app/controllers/user_devices_controller.rb

@@ -14,13 +14,29 @@ class UserDevicesController < ApplicationController
       attributes.delete('created_at')
       attributes.delete('device_details')
       attributes.delete('location_details')
+
+      if session[:check_user_device_id] == device.id
+        attributes['current'] = true
+      end
       devices_full.push attributes
     }
     model_index_render_result(devices_full)
   end
 
   def destroy
-    UserDevice.where(user_id: current_user.id, id: params[:id]).destroy_all
+    # find device
+    user_device = UserDevice.find_by(user_id: current_user.id, id: params[:id])
+
+    # delete device and session's
+    if user_device
+      SessionHelper.list.each {|session|
+        next if !session.data['user_id']
+        next if !session.data['check_user_device_id']
+        next if session.data['check_user_device_id'] != user_device.id
+        SessionHelper.destroy( session.id )
+      }
+      user_device.destroy
+    end
     render json: {}, status: :ok
   end
 

+ 1 - 1
app/models/user_device.rb

@@ -9,7 +9,7 @@ class UserDevice < ApplicationModel
 
 store device for user
 
-  UserDevice.add(
+  user_device = UserDevice.add(
     'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
     '172.0.0.1',
     user.id,