No presence information


  • Translator

    Hi,
    I have installed/configured webmeetings, kopano-presence and webapp-meetings plugin.
    Messaging and video calls work normaly, the problem is I can’t see presence information nowhere in webapp, but looking at the logs, it’s updating presence status:

    2018-04-24 16:22:59,492 - presence - DEBUG - spreed: user1 available
    2018-04-24 16:23:00,424 - presence - DEBUG - spreed: user2 available
    2018-04-24 16:24:03,581 - presence - DEBUG - spreed: user2 available
    2018-04-24 16:24:04,529 - presence - DEBUG - spreed: user1 available
    

    Is there anything else that needs to be done?


  • Translator

    Hello,

    I don’t think this answers your question directly but perhaps you can look at these two threads.

    https://forum.kopano.io/topic/521/webmeeting-config/2
    https://forum.kopano.io/topic/119/turn-server


  • Translator

    @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.


  • Kopano

    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?


  • Translator

    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


  • Translator

    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?


  • Translator

    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?


  • Kopano

    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.


  • Translator

    @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?


  • Kopano

    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.


  • Translator

    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?


  • Translator

    @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 to else 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.