social_stream 0.12.1 → 0.12.2

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 (43) hide show
  1. data/Rakefile +3 -5
  2. data/base/app/assets/javascripts/social_stream-base.js +1 -0
  3. data/base/app/models/contact.rb +3 -1
  4. data/base/config/routes.rb +14 -4
  5. data/base/lib/social_stream/base/version.rb +1 -1
  6. data/base/vendor/assets/javascripts/jquery.screw.js +188 -0
  7. data/documents/app/assets/javascripts/documents.js.erb +6 -0
  8. data/documents/app/assets/stylesheets/documents.css.scss +5 -0
  9. data/documents/app/controllers/documents_controller.rb +31 -4
  10. data/documents/app/views/common/_headers.html.erb +76 -0
  11. data/documents/app/views/common/_index.html.erb +16 -30
  12. data/documents/config/routes.rb +1 -1
  13. data/documents/lib/social_stream/documents/version.rb +1 -1
  14. data/documents/social_stream-documents.gemspec +1 -1
  15. data/events/db/migrate/20111102145626_add_more_fields_to_events.rb +24 -0
  16. data/events/lib/social_stream/events/version.rb +1 -1
  17. data/events/social_stream-events.gemspec +1 -1
  18. data/lib/social_stream/version.rb +1 -1
  19. data/presence/app/assets/javascripts/store.js +6 -0
  20. data/presence/app/assets/javascripts/{xmpp_client.js → xmpp_client.js.erb} +53 -1
  21. data/presence/app/controllers/xmpp_controller.rb +2 -2
  22. data/presence/app/views/xmpp/_chat.html.erb +22 -36
  23. data/presence/app/views/xmpp/_chat_connecting.html.erb +1 -1
  24. data/presence/app/views/xmpp/_chat_contacts.html.erb +6 -6
  25. data/presence/app/views/xmpp/_chat_off.html.erb +29 -15
  26. data/presence/app/views/xmpp/index.html +0 -1
  27. data/presence/config/locales/en.yml +11 -0
  28. data/presence/config/locales/es.yml +11 -0
  29. data/presence/config/routes.rb +1 -0
  30. data/presence/ejabberd/conf/ssconfig_example.cfg +6 -0
  31. data/presence/ejabberd/ejabberd_scripts/authentication_script +61 -5
  32. data/presence/ejabberd/ejabberd_scripts/emanagement +123 -35
  33. data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
  34. data/presence/lib/generators/social_stream/presence/templates/initializer.rb +13 -6
  35. data/presence/lib/social_stream-presence.rb +9 -4
  36. data/presence/lib/social_stream/presence/models/buddy_manager.rb +10 -2
  37. data/presence/lib/social_stream/presence/version.rb +1 -1
  38. data/presence/lib/social_stream/presence/xmpp_server_order.rb +193 -121
  39. data/presence/lib/tasks/presence/synchronize.rake +2 -2
  40. data/presence/social_stream-presence.gemspec +2 -0
  41. data/social_stream.gemspec +3 -3
  42. metadata +19 -15
  43. data/presence/app/views/xmpp/chat.html.erb +0 -13
@@ -19,4 +19,4 @@ Rails.application.routes.draw do
19
19
  end
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Documents
3
- VERSION = "0.4.1".freeze
3
+ VERSION = "0.4.2".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 0.9.24')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.9.25')
16
16
  s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.7.0')
17
17
  s.add_runtime_dependency('paperclip','2.3.11')
18
18
  s.add_runtime_dependency('delayed_paperclip','>= 0.7.2')
@@ -0,0 +1,24 @@
1
+ class AddMoreFieldsToEvents < ActiveRecord::Migration
2
+ def change
3
+ add_column :events, :description, :string
4
+ add_column :events, :place, :string
5
+ add_column :events, :isabel_event, :string
6
+ add_column :events, :machine_id, :int
7
+ add_column :events, :repeat, :string
8
+ add_column :events, :at_job, :int
9
+ add_column :events, :parent_id, :int
10
+ add_column :events, :character, :int
11
+ add_column :events, :public_read, :int
12
+ add_column :events, :marte_event, :int
13
+ add_column :events, :marte_room, :int
14
+ add_column :events, :spam, :int
15
+ add_column :events, :notes, :int
16
+ add_column :events, :location, :text
17
+ add_column :events, :streamming_url, :text
18
+ add_column :events, :permalink, :string
19
+ add_column :events, :cm_event_id, :int
20
+ add_column :events, :vc_mode, :int
21
+ add_column :events, :other_participation_url, :text
22
+ add_column :events, :web_interface, :int
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Events
3
- VERSION = "0.0.16".freeze
3
+ VERSION = "0.0.17".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 0.9.24')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.9.25')
16
16
  s.add_runtime_dependency('conference_manager-ruby', '~> 0.0.3')
17
17
 
18
18
  # Development Gem dependencies
@@ -1,3 +1,3 @@
1
1
  module SocialStream
2
- VERSION = "0.12.1".freeze
2
+ VERSION = "0.12.2".freeze
3
3
  end
@@ -10,6 +10,12 @@ $(document).ready(function () {
10
10
 
11
11
 
12
12
  function storePassword() {
13
+
14
+ //Dont store password if cookie authentication is enable
15
+ if (authByCookie()) {
16
+ return
17
+ }
18
+
13
19
  if (window.sessionStorage) {
14
20
  if (($("#user_password").length==1)&&($("#user_password").val()!="")){
15
21
  sessionStorage.setItem("ss_user_pass", $('#user_password').val());
@@ -3,7 +3,7 @@
3
3
  ////////////////////
4
4
 
5
5
  function log(msg) {
6
- //console.log(msg)
6
+ console.log(msg)
7
7
  }
8
8
 
9
9
 
@@ -17,6 +17,45 @@ statusMessage['away'] = "Away";
17
17
  statusMessage['xa'] = "Away";
18
18
  statusMessage['dnd'] = "Busy";
19
19
 
20
+
21
+ ////////////////////
22
+ //Connect functions
23
+ ////////////////////
24
+
25
+ function connectToServerWithCookie(){
26
+ try {
27
+ connection = new Strophe.Connection(BOSH_SERVICE);
28
+ connection.connect(user_jid, cookie, onConnect);
29
+ } catch (err) {
30
+ //"Handle errors"
31
+ return false;
32
+ }
33
+ }
34
+
35
+ //Password: Get from chatPassword param if exists, instead try to get from sessionStorage.
36
+ function connectToServerWithPassword(chatPassword){
37
+
38
+ //Get Password
39
+ if ((chatPassword!=null)&&(chatPassword!="")){
40
+ var password = chatPassword;
41
+ } else if ((window.sessionStorage)&&(sessionStorage.getItem("ss_user_pass") != null)) {
42
+ var password = sessionStorage.getItem("ss_user_pass");
43
+ } else {
44
+ return false;
45
+ }
46
+
47
+ try {
48
+ //Connect actual user to the chat
49
+ connection = new Strophe.Connection(BOSH_SERVICE);
50
+ connection.connect(user_jid, password, onConnect);
51
+ } catch (err) {
52
+ //"Handle errors"
53
+ return false;
54
+ }
55
+
56
+ return true;
57
+ }
58
+
20
59
  ////////////////////
21
60
  //Strophe functions
22
61
  ////////////////////
@@ -176,6 +215,19 @@ function sendChatMessage(from,to,text){
176
215
  return true;
177
216
  }
178
217
 
218
+ function authByCookie(){
219
+ var authMethod = '<%= SocialStream::Presence.auth_method %>';
220
+ return authMethod=="cookie";
221
+ }
222
+
223
+ function authByPassword(){
224
+ var authMethod = '<%= SocialStream::Presence.auth_method %>';
225
+ return authMethod=="password";
226
+ }
227
+
228
+ function ifCookie(){
229
+ return (!(typeof cookie == 'undefined'))
230
+ }
179
231
 
180
232
  ////////////////////
181
233
  //Audio functions
@@ -100,7 +100,7 @@ class XmppController < ApplicationController
100
100
  return
101
101
  end
102
102
 
103
- SocialStream::Presence::XmppServerOrder::reset_presence
103
+ SocialStream::Presence::XmppServerOrder::resetPresence
104
104
 
105
105
  render :text => "Ok"
106
106
  end
@@ -115,7 +115,7 @@ class XmppController < ApplicationController
115
115
  #Actual connected users
116
116
  user_slugs = params[:name]
117
117
 
118
- SocialStream::Presence::XmppServerOrder::synchronize_presence_for_slugs(user_slugs)
118
+ SocialStream::Presence::XmppServerOrder::synchronizePresenceForSlugs(user_slugs)
119
119
 
120
120
  render :text => "ok"
121
121
  end
@@ -1,4 +1,4 @@
1
- <% if current_subject.subject_type=="User" %>
1
+ <% if current_user and current_subject.subject_type=="User" %>
2
2
 
3
3
  <% content_for :headers do %>
4
4
  <%= stylesheet_link_tag "chat.css", :media => "screen, projection" %>
@@ -9,49 +9,35 @@
9
9
  <%= javascript_include_tag 'xmpp_client'%>
10
10
  <%= javascript_include_tag 'store'%>
11
11
  <% end %>
12
-
13
12
 
13
+
14
14
  <script type="text/javascript">
15
-
16
- //Global variables
15
+
16
+ //Global variables
17
17
  var BOSH_SERVICE = '<%= SocialStream::Presence.bosh_service || root_url + "http-bind/" %>';
18
+ var cookie = "AuthenticationByCookie>>" + "<%=cookies[Rails.application.config.session_options[:key]]%>";
18
19
  var domain = '<%=SocialStream::Presence.domain%>';
19
- var user_name = '<%=current_user.name%>';
20
+ var user_name = '<%=current_user.name%>';
20
21
  var user_slug = '<%=current_user.slug%>';
21
- var user_jid = '<%=current_user.slug%>'+"@"+domain;
22
- var sound_path = "/assets/audio/chat/onMessage"
23
-
24
- function connectToServer(chatPassword){
25
- <%unless current_user.nil? %>
26
-
27
- //Get Password
28
- if ((chatPassword!=null)&&(chatPassword!="")){
29
- var password = chatPassword;
30
- } else if ((window.sessionStorage)&&(sessionStorage.getItem("ss_user_pass") != null)) {
31
- var password = sessionStorage.getItem("ss_user_pass");
32
- } else {
33
- return false;
34
- }
35
-
36
- try {
37
- //Connect actual user to the chat
38
- connection = new Strophe.Connection(BOSH_SERVICE);
39
- connection.connect(user_jid, password, onConnect);
40
- } catch (err) {
41
- //"Handle errors"
42
- return false;
43
- }
22
+ var user_jid = '<%=current_user.slug%>'+"@"+domain;
23
+ var sound_path = "/assets/audio/chat/onMessage";
44
24
 
45
- return true;
46
- <%end%>
47
- }
48
25
 
49
26
  $(document).ready(function () {
50
- if (connectToServer(null)==false){
51
- refreshChatWindow();
52
- }
53
- initialTimer = setTimeout("updateChatWindow()", 15000);
54
- initAudio();
27
+
28
+ if (authByCookie()){
29
+ if (connectToServerWithCookie()==false){
30
+ refreshChatWindow();
31
+ }
32
+ } else {
33
+ if (connectToServerWithPassword(null)==false){
34
+ refreshChatWindow();
35
+ }
36
+ }
37
+
38
+ initialTimer = setTimeout("updateChatWindow()", 15000);
39
+ initAudio();
40
+
55
41
  });
56
42
 
57
43
  </script>
@@ -2,7 +2,7 @@
2
2
  <div class="header">
3
3
  <%=image_tag("btn/btn_friend.png", :class => "header_icon")%>
4
4
  <div class="header_text">
5
- Chat Connecting
5
+ <%=t('chat.connecting')%>
6
6
  </div>
7
7
  </div>
8
8
  </div>
@@ -4,17 +4,17 @@
4
4
  <div class="header">
5
5
  <%=image_tag("btn/btn_friend.png", :class => "header_icon")%>
6
6
  <div class="header_text">
7
- Chat
7
+ <%=t('chat.title')%>
8
8
  </div>
9
9
  </div>
10
10
 
11
11
  <div id="status" class="dropdown">
12
- <dt><a href=""><span>Establecer estado</span></a></dt>
12
+ <dt><a href=""><span><%=t('chat.status.choose')%></span></a></dt>
13
13
  <dd>
14
14
  <ul>
15
- <li><a href="#" class="option"><img class="flag" src="assets/status/available.png" alt=""/> Disponible <span class="value">chat</span></a></li>
16
- <li><a href="#" class="option"><img class="flag" src="assets/status/away.png" alt=""/> Ausente <span class="value">away</span></a></li>
17
- <li><a href="#" class="option"><img class="flag" src="assets/status/dnd.png" alt=""/> No molestar <span class="value">dnd</span></a></li>
15
+ <li><a href="#" class="option"><img class="flag" src="assets/status/available.png" alt=""/> <%=t('chat.status.available')%> <span class="value">chat</span></a></li>
16
+ <li><a href="#" class="option"><img class="flag" src="assets/status/away.png" alt=""/> <%=t('chat.status.away')%> <span class="value">away</span></a></li>
17
+ <li><a href="#" class="option"><img class="flag" src="assets/status/dnd.png" alt=""/> <%=t('chat.status.dnd')%> <span class="value">dnd</span></a></li>
18
18
  </ul>
19
19
  </dd>
20
20
  </div>
@@ -30,7 +30,7 @@
30
30
  <a title='<%=contact.name%>' class="presence_user_link" width="28">
31
31
  <%=image_tag(contact.logo.url, :alt => contact.name , :size => "28x28")%>
32
32
  <% if contact.user.status %>
33
- <%=image_tag("status/" + contact.user.status + ".png", :class => "presence_status") %></a>
33
+ <%=image_tag("status/" + contact.user.status + ".png", :class => "presence_status") %></a>
34
34
  <% end %>
35
35
  </a>
36
36
  </div>
@@ -1,18 +1,32 @@
1
1
  <script type="text/javascript">
2
- $(document).ready(function () {
3
- if ((window.sessionStorage) && (sessionStorage.getItem("ss_user_pass") != null)) {
4
- $("#passwordFormChat").hide();
5
- } else {
6
- $("#passwordFormChat").show();
7
- }
2
+ $(document).ready(function () {
8
3
 
9
- $('.connectChatButton').bind('click', function () {
10
- connectToServer($('#user_password').val());
11
- });
12
-
13
- $('.storePass').bind('click', function () {
14
- storePassword();
15
- });
4
+ if (authByCookie()){
5
+ //Authentication by cookie
6
+
7
+ $("#passwordFormChat").hide();
8
+ $('.connectChatButton').bind('click', function () {
9
+ connectToServerWithCookie();
10
+ });
11
+
12
+ } else {
13
+ //Authentication by password
14
+
15
+ if ((window.sessionStorage) && (sessionStorage.getItem("ss_user_pass") != null)) {
16
+ $("#passwordFormChat").hide();
17
+ } else {
18
+ $("#passwordFormChat").show();
19
+ }
20
+
21
+ $('.connectChatButton').bind('click', function () {
22
+ connectToServerWithPassword($('#user_password').val());
23
+ });
24
+
25
+ $('.storePass').bind('click', function () {
26
+ storePassword();
27
+ });
28
+
29
+ }
16
30
 
17
31
  });
18
32
  </script>
@@ -21,14 +35,14 @@
21
35
  <div class="header">
22
36
  <%=image_tag("btn/btn_friend.png", :class => "header_icon")%>
23
37
  <div class="header_text">
24
- Chat Disconnected
38
+ <%=t('chat.disconnected')%>
25
39
  </div>
26
40
  </div>
27
41
  </div>
28
42
 
29
43
  <div class="chat_off">
30
44
  <div id="passwordFormChat">
31
- <label for="user_password" class="chatPasswordTitle">Password</label>
45
+ <label for="user_password" class="chatPasswordTitle"><%=t('chat.password')%></label>
32
46
  <input id="user_password" class="chat_password" type="password"></input>
33
47
  </div>
34
48
  <input class="connectChatButton storePass" value="Connect">
@@ -12,7 +12,6 @@
12
12
 
13
13
  <p> <a href="/xmpp4r_test">Test</a></p>
14
14
  <p> <a href="/active_users">Usuarios conectados al servidor XMPP</a></p>
15
- <p> <a href="/chat">Chat</a></p>
16
15
 
17
16
  </div>
18
17
  </body>
@@ -0,0 +1,11 @@
1
+ en:
2
+ chat:
3
+ connecting: "Chat Connecting"
4
+ disconnected: "Chat Disconnected"
5
+ title: "Chat"
6
+ password: "Password"
7
+ status:
8
+ choose: "Choose status"
9
+ available: "Available"
10
+ away: "Away"
11
+ dnd: "Busy"
@@ -0,0 +1,11 @@
1
+ es:
2
+ chat:
3
+ connecting: "Chat Conectando"
4
+ disconnected: "Chat Desconectado"
5
+ title: "Chat"
6
+ password: "Contraseña"
7
+ status:
8
+ choose: "Establecer estado"
9
+ available: "Disponible"
10
+ away: "Ausente"
11
+ dnd: "No molestar"
@@ -11,5 +11,6 @@ Rails.application.routes.draw do
11
11
  match '/xmpp/setPresence' => "Xmpp#setPresence"
12
12
  match '/xmpp/unsetPresence' => "Xmpp#unsetPresence"
13
13
  match '/chatWindow'=> "Xmpp#chatWindow"
14
+ match '/chatAuthWithCookie'=> "Xmpp#chatAuthWithCookie"
14
15
 
15
16
  end
@@ -15,6 +15,8 @@ scripts_path=/my_scripts_path
15
15
 
16
16
  #API REST
17
17
  auth_api=http://localhost/users/sign_in
18
+ auth_by_cookie_api=http://localhost/api/me
19
+ cookie_name=_rails_server_cookie
18
20
  set_connection_api=http://localhost/xmpp/setConnection
19
21
  unset_connection_api=http://localhost/xmpp/unsetConnection
20
22
  reset_connection_api=http://localhost/xmpp/resetConnection
@@ -30,3 +32,7 @@ ss_password=password
30
32
 
31
33
  #Ejabberd Server Password
32
34
  ejabberd_password=password
35
+
36
+ #Emanagement configuration
37
+ users_require_sudo=user1,user2,...
38
+ verbose=false
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'logger'
4
4
  require 'rest_client'
5
+ require 'rexml/document'
6
+ include REXML
5
7
 
6
8
  $stdout.sync = true
7
9
  $stdin.sync = true
@@ -30,6 +32,8 @@ def getOption(option)
30
32
  end
31
33
 
32
34
  $accessUrl = getOption("auth_api=")
35
+ $accessByCookieUrl = getOption("auth_by_cookie_api=")
36
+ $cookie_name = getOption("cookie_name=")
33
37
  $sslogin = getOption("ss_login=")
34
38
  $sspass = getOption("ss_password=")
35
39
 
@@ -75,6 +79,45 @@ def auth(username, password)
75
79
  end
76
80
 
77
81
 
82
+ def authByCookie(username, cookie)
83
+ begin
84
+ response = RestClient.get $accessByCookieUrl, :cookies => {:"#{$cookie_name}" => cookie}
85
+ doc = REXML::Document.new(response.body)
86
+
87
+ slug = ""
88
+ doc.elements.each('user/slug') do |ele|
89
+ slug = ele.text
90
+ end
91
+
92
+ if username != "" and username == slug
93
+ return true
94
+ else
95
+ return false
96
+ end
97
+
98
+ rescue => e
99
+
100
+ unless e.class.name == "RestClient::Unauthorized" and e.message == "401 Unauthorized"
101
+ $logger.error "#{Process.pid}: Exception in authByCookie(username, cookie)"
102
+ $logger.error "#{Process.pid}: #{e.class.name}: #{e.message}"
103
+ end
104
+
105
+ return false
106
+ end
107
+ end
108
+
109
+
110
+ def validateParameters(username,domain,password)
111
+ if !username or !password or !domain
112
+ return false
113
+ end
114
+ if (username.gsub(/\s+/, "")=="") or (password.gsub(/\s+/, "")=="") or (domain.gsub(/\s+/, "")=="")
115
+ return false
116
+ end
117
+ return true
118
+ end
119
+
120
+
78
121
  loop do
79
122
  begin
80
123
  $stdin.eof? # wait for input
@@ -91,12 +134,25 @@ loop do
91
134
 
92
135
  when "auth"
93
136
  $logger.info "#{Process.pid}: Authenticating #{data[0]}@#{data[1]}"
94
- #$logger.info "#{Process.pid}: With password #{data[2]}"
95
- #password = data[2]
96
-
97
- #Authorization condition for LOGIN
98
- auth(data[0], data[2])
99
137
 
138
+ #Parameters basic validation: validateParameters(username,domain,password)
139
+ if !validateParameters(data[0],data[1],data[2])
140
+ $logger.info "#{Process.pid}: Invalid parameters"
141
+ return false
142
+ end
143
+
144
+ #Select authorization condition for LOGIN
145
+ #Authentication methods: user/password or user/cookie
146
+ password = data[2]
147
+ if password.split(">>")[0]=="AuthenticationByCookie"
148
+ cookie = password.split(">>")[1]
149
+ $logger.info "#{Process.pid}: With username #{data[0]} and cookie #{cookie}"
150
+ authByCookie(data[0], cookie)
151
+ else
152
+ $logger.info "#{Process.pid}: With username #{data[0]} and password ******"
153
+ #$logger.info "#{Process.pid}: With username #{data[0]} and password #{data[2]}"
154
+ auth(data[0], data[2])
155
+ end
100
156
 
101
157
  when "isuser"
102
158