Browse code

Ukladanie prihlasovacich udajov do databazy a nie do session

Cinan Rakosnik authored on 12/05/2013 at 16:41:48
Showing 4 changed files
... ...
@@ -43,13 +43,13 @@ class ApplicationController < ActionController::Base
43 43
         session[:ip]         = request.remote_ip
44 44
 
45 45
         if user_credentials
46
-            session[:users] = {} unless session[:users]
47
-
48 46
             encrypted_pass = Security::encrypt(user_credentials[:password])
49 47
             cookies[:key] = Security::cipher_key
50 48
             cookies[:iv]  = Security::cipher_iv
51 49
 
52
-            session[:users][user_credentials[:jid]] = encrypted_pass
50
+            user = create_new_user(user_credentials)
51
+            user.update_pass(user_credentials[:jid], encrypted_pass)
52
+            user_id = user.id
53 53
         end
54 54
 
55 55
         @token.save_session(session, user_id)
... ...
@@ -58,7 +58,5 @@ class ApplicationController < ActionController::Base
58 58
     def create_new_user(user_credentials)
59 59
         jid  = user_credentials[:jid]
60 60
         user = User.existing_jid(jid) || User.create_jid(jid)
61
-
62
-        user.id
63 61
     end
64 62
 end
... ...
@@ -24,17 +24,15 @@ class WsRosterController < WsController
24 24
     def connect
25 25
         initialize_storage()
26 26
 
27
-        # TODO: Pouzit najprv:
28
-        # clients = Token.fing_user_accounts_having_to_token(session[:token])
29
-        # ale toto, az ked budem mat dokonceny multiaccount (settings a popup)
30
-        # TODO: skusit zrychlit
31 27
         cookies = env['rack.request.cookie_hash'] # TODO: nahlasit bug na websocket-rails, lebo sa neda pristupit ku `cookies'
32 28
         cipher_key = cookies['key']
33 29
         cipher_iv = cookies['iv']
34 30
 
35
-        clients = session[:users].map do |jid, encrypted_pass|
36
-            decrypted_pass = Security::decrypt(encrypted_pass, cipher_key, cipher_iv)
37
-            {jid: jid, pass: decrypted_pass}
31
+        credentials = User.crendentials_for_token(session[:token])
32
+
33
+        clients = credentials.map do |tuple|
34
+            decrypted_pass = Security::decrypt(tuple['pass'], cipher_key, cipher_iv)
35
+            {jid: tuple['jid'], pass: decrypted_pass}
38 36
         end
39 37
 
40 38
         clients.each do |client|
... ...
@@ -13,6 +13,8 @@ module Security
13 13
 
14 14
         encrypted = cipher.update(unencrypted_message)
15 15
         encrypted << cipher.final
16
+
17
+        Base64.encode64(encrypted).encode('utf-8')
16 18
     end
17 19
 
18 20
     def self.decrypt(encrypted_message, key, iv)
... ...
@@ -23,7 +25,7 @@ module Security
23 23
         cipher.iv  = @@cipher_iv = iv
24 24
 
25 25
         begin
26
-            decrypted = cipher.update(encrypted_message)
26
+            decrypted = cipher.update(Base64.decode64(encrypted_message.encode('ascii-8bit')))
27 27
             decrypted << cipher.final
28 28
         rescue
29 29
             decrypted = ''
... ...
@@ -5,7 +5,7 @@ class User
5 5
 
6 6
     def update_pass(jid, pass)
7 7
         account_credentials = jids.detect do |f|
8
-            f[:jid] == jid || f["jid"] == jid
8
+            f[:jid] == jid || f['jid'] == jid
9 9
         end
10 10
 
11 11
         account_credentials[:pass] = pass
... ...
@@ -13,7 +13,7 @@ class User
13 13
     end
14 14
 
15 15
     def self.existing_jid(jid)
16
-        where("jids.jid" => jid).only(:jids).first
16
+        where('jids.jid' => jid).only(:jids).first
17 17
     end
18 18
 
19 19
     def self.create_jid(jid)
... ...
@@ -26,4 +26,16 @@ class User
26 26
         jids << {jid: another_jid, pass: password}
27 27
         save
28 28
     end
29
+
30
+    def self.crendentials_for_token(token)
31
+        found = Token.where(token: token).only(:user_id).limit(1).first
32
+        if found
33
+            user_id = found.user_id
34
+        else
35
+            return []
36
+        end
37
+
38
+        user = find(user_id)
39
+        return user ? user.jids : []
40
+    end
29 41
 end
30 42
\ No newline at end of file