No presence information
-
@mcostan
I had already seen those threads.
As I said webmettings is working normally (can make video calls, send/receive messages), only presence isn’t available/shown in Webapp. -
Hi @nbj,
is it like “you don’t know where these information are supposed to be displayed” or “you know where you’d find them, but they are missing”?
From the logging I would expect that it indeed does work. Could it be that your browser is blocking it? Which versions of WebApp and the Spreed plugin are you using?
-
There’s no presence information in webapp (not in GAB contacts or emails received) . My setup is one server with webapp/webmeetings (only apache) and other with kopano-core/Kopano-presence. I tried running webapp/webmeetings in the same server as Kopano-core but the result was the same.
It doesn’t seems to be a browser problem because I did a test installation with the univention server and presence worked as expected.
By the way, I fully translated WebApp and MDM to European Portuguese (Kopano-core and files plug-in are work in progress) . I have the po file and I could send it to you.
WebApp 3.4.12.1412+793.1
Webmeetings 0.29.5-1 -
Did a tcpdump in the server running kopano-core/kopano-presence and got this:
webapp does a PUT:{"AuthenticationToken":"1524764456:nuno:MCPYJC86G9BIZWXB4ISDZSMO+BAECMT+OG7TEKIYLAG=","Type":"UserStatus","UserStatus":[{"user_id":"nuno@ola.pt","spreed":{"status":"unavailable","message":""}}]}
kopano-presence responds:
HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: Werkzeug/0.10.4 Python/2.7.12 Date: Thu, 26 Apr 2018 17:42:16 GMT
after that webapp does a POST:
{"AuthenticationToken":"1524764836:nuno:LUPGH/HSUHZZKZQIEK7CH9NUJXJSXPNWZYPUVKONGGW=","Type":"UserStatus","UserStatus":[]}
with a response from server:
HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 51 Server: Werkzeug/0.10.4 Python/2.7.12 Date: Thu, 26 Apr 2018 17:42:19 GMT { "Type": "UserStatus", "UserStatus": [] }
So this why I get no presence information in webapp.
In the working uninvention server the first PUT it’s the same, but the POST is different:
{"AuthenticationToken":"1524765181:teste12:IU9YABEBYYBEFTU/FLX+0REEILHRFCQ3FK/MS73EIIS=","Type":"UserStatus","UserStatus":[{"user_id":"asdf"}]}
Server responds with:
HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 216 Server: Werkzeug/0.9.6 Python/2.7.9 Date: Thu, 26 Apr 2018 17:48:05 GMT { "Type": "UserStatus", "UserStatus": [ { "user_id": "asdf", "spreed": { "status": "available", "message": "" } } ] }
Don’t know if it’s the incomplete POST that’s causing the response to also be empty or if it’s unrelated. Any ideas what can be causing this behaviour?
-
I found this scripts (https://stash.kopano.io/users/jvanderwaa/repos/kopanocore/browse/ECtools/presence/test) to test the presence server and it works:
curl -u presenca:presence -X GET -d '{"AuthenticationToken":"1524844924:nuno:CGPP7QJA5TJ78GAWCT5BXI8YLU2GHH4OL+QQM7PM3Y=", "Type": "UserStatus", "UserStatus": [{"user_id": "user1"}, {"user_id": "user2"}]}' https://wxxxxxx.xxxxxx.xx/webapp/presence -H "Content-Type: application/json" { "Type": "UserStatus", "UserStatus": [ { "user_id": "user1", "spreed": { "status": "available", "message": "" } }, { "user_id": "user2", "spreed": { "status": "available", "message": "" } } ]
At this point I could say the problem was with webapp/webmeetings, but I changed the config files to use the kopano-core/kopano-presence running in the uninvention server and it works.
Running out of ideas. Any pointers?
-
If both systems are identical, then it must be something in your configuration. I’d recommend to get in touch with our support so they can have a look on your system.
Ps: https://stash.kopano.io/projects/KC/repos/kopanocore/browse would be the correct source repository.
-
@fbartels
Your post got me thinking, and even though both servers are running the LDAP plugin for authentication I went and tried with the unix plugin and VOILÁ, it works, I got presence information.I’m using an Active Directory Windows 2012R2 back-end for authentication. Is there any special configuration needed for presence to work with this setup?
-
I know you just configured the Unix backend as a test, but I would urge not to use the Unix backend for production deployments. For one it’s vastly inferior to the ldap backend and for the other it’s not actively tested.
@nbj said in No presence information:
. Is there any special configuration needed for presence to work with this setup?
No, presence is pretty plug and play and does not really need configuration (it’s mostly only the secret/token). I can only imagine that this could be because of some attribute mapped in the ldap.propmap.cfg.
I would still urge you to get in contact with our support, so that we can investigate your configuration.
-
Figured out what the problem is. If I use the email address as ldap_loginname_attribute, presence does not work. If instead I use sAMAccountName presence works. Maybe has something to do with the ‘@’ in the user name?
Is this a bug or using email as the ldap_loginname_attribute isn’t supported in kopano-presence?
-
@fbartels
After applying the following modifications I finally got it working with the email address as the login.First in /usr/share/kopano-webapp/client/kopano-debug.js ( not sure but it seems the part I modified comes from kopano-webapp/client/zarafa/core/data/UserIdObjectFactory.js):
// Add ZARAFA specific fields to the object var recordEntryId = record.get('entryid'); var recordUsername = record.get('username'); var recordEmailAddress = record.get('email_address'); var recordSmtpAddress = record.get('smtp_address'); user.entryid = recordEntryId; // Try to be smart to find the username and email address. // Sometimes the username is available in the email_address field, // sometimes the email address is available in the username field, // and sometimes it is available in the smtp_address field. if ( Ext.isString(recordUsername) && recordUsername.indexOf('@')==-1 ){ user.username = recordUsername; } else if ( Ext.isString(recordEmailAddress) && recordEmailAddress.indexOf('@')==-1 ){ user.username = recordEmailAddress; }
In my debugging recordUsername is empty/undefined because record.get(‘username’); returns nothing as there’s no username in record, eg:
account: "" address_type: "ZARAFA" assistant: "" business2_telephone_number: "" business2_telephone_number_mv: "" business_telephone_number: "" comment: "" company_name: "" country: "" department_name: "IT" display_name: "User2 Adeus" display_type: 0 display_type_ex: 1073741824 email_address: "user2@adeus.pt" entryid: "00000000ac21a95040d3ee48b319fba753304425010000000600000072000000457949424c762f4471306d7069456e355873375a41513d3d00000000" fileas: "user2@adeus.pt" full_name: "Adeus, User2" given_name: "User2" home2_telephone_number: "" home2_telephone_number_mv: "" home_telephone_number: "" initials: "" locality: "" message_class: undefined mobile_telephone_number: "" object_type: 6 office_location: "" office_telephone_number: "" pager_telephone_number: "" postal_code: "" primary_fax_number: "" search_key: "5a41524146413a55534552324041444555532e505400" smtp_address: "user2@adeus.pt" state_or_province: "" street_address: "" surname: "Adeus" title: ""
Also noticed that email_address in record is populated with ldap_loginname_attribute.
So when you test
else if ( Ext.isString(recordEmailAddress) && recordEmailAddress.indexOf('@')==-1 ){ user.username = recordEmailAddress; }
, and are using an email as the login, it will fail and user.username will be empty. To make it work I changed it toelse if ( Ext.isString(recordEmailAddress) { user.username = recordEmailAddress; }
The other file I modified was /usr/share/kopano-webapp/plugins/spreedwebrtc/jsspreedwebrtc-debug.js:
/** * Will either add or remove an email_address to the watch list * * @param {String} email_address The email address to remove or add * @param {String} remove optionally remove the user from the watch list * @private */ updatePresenceWatchingList: function(email_address, entryId, smtp_address, remove) { if (!email_address || 0 === email_address.length) { return; } // skip non-Kopano email addresses if (email_address.indexOf('@') > -1) { return; } var index = this.presenceWatchingList.indexOf(email_address);
Same issue here. Removed
if (email_address.indexOf('@') > -1) { return; }
so I don’t get an empty watch list and subsequent empty presence request.With this modifications presence works using either sAMAccountName or mail as ldap_loginname_attribute.
Keep in mind that I’m no software developer nor do I know if there are implications anywhere else in Kopano. Hope this helps you solve the issue.