Agregador de noticias

ProcessOne: ejabberd Community 14.12

Planet Jabber - 17 December, 2014 - 13:47

We’re pleased to announce the last release of ejabberd for 2014 !
Thanks to contributors, this release includes great improvements and opens road to 2015.

ejabberd Community 14.12 includes many bugfixes, and a few new features:
– New module mod_client_state implements XEP-0352: Client State Indication
– New module mod_fail2ban to ban IPs that show malicious signs
– New option store_empty_body in mod_offline
– New option disable_sasl_mechanisms
– Improve option resend_on_timeout to support if_offline

Improvements mainly cover:
– More robust offline server
– Better charset support in XMLRPC
– Some PEP issues fixed

As usual, the release is tagged in the Git source code repository on github

The source package and binary installers are available at ProcessOne

If you suspect you found a bug, search or fill a bug report in Jira

Peter Saint-Andre: Progressive Similarity

Planet Jabber - 14 December, 2014 - 00:00
Lately I've been listening a lot to the music of the a cappella group Pentatonix. On the surface, their music is stylistically not the kind of thing I typically like - I very much prefer Bach, Ellington, and Yes to recent pop.

Swift Blog: Swift and Isode

Planet Jabber - 11 December, 2014 - 00:00

Having been working on this behind the scenes for a while, we’ve got some good news. After years of quietly supporting Swift, Isode are now taking Swift formally into their product set. This means more developers working on Swift and the opportunity for more rapid development and advancement of the projects. In practical terms, we think the only obvious change externally is likely to be an increase in activity in the commit logs and improvements to the software, both of which have been becoming increasingly obvious in recent months as Isode’s been increasing support.

Some details about which you may care:

  • Isode’s a long-term producer of messaging and directory servers, including the M-Link XMPP server, has been the provider of commercial licenses for Swiften, was responsible for the port of Swiften to Java in the form of Stroke and is where Kev works for his day-job.
  • Kev’s going to manage the Swift projects within Isode.
  • Swift, Stroke et al. will be remaining open source, with commercial licensing and support available.
  • The project will continue to run in much the same way, with public code review systems etc.
  • We’ll still be accepting community-supplied patches
  • We’ll still be encouraging testing and feedback by the community
  • We think this is going to be an opportunity to make Swift better

We hope you’ll join us in our excitement for Swift’s future.

Peter Saint-Andre: My Intellectual History, Part III

Planet Jabber - 6 December, 2014 - 00:00
It seems that every once in a while on December 6th, I write a journal entry about the intellectual path I'm travelling in this all-too-short life. The previous installments in this series were written on December 6th, 1989 and December 6th, 1999. It's been fifteen years since the last post, so there's a lot of ground to cover! Like 1500 blog posts, 4 books, a bunch of meaningful friendships, and a big phase of my career. (And no, there isn't any particular significance to December 6th, it just happens to have worked out that way.)

ProcessOne: [FR] Conférence SeaBeyond 2014: Le programme de la Sandbox

Planet Jabber - 25 November, 2014 - 20:55

Nous avons publié une courte vidéo décrivant les thèmes que nous allons aborder dans la Sandbox de SeaBeyond, le 4 décembre 2014 à Paris.

Au programme:
– XMPP, ejabberd SaaS et temps réel web (Websockets, …).
– Développement iOS: Push, Widgets, Beacons.
– Watches: Android Wear et Apple Watch.

Voici la vidéo pour plus de détails:

Les détails et le lien pour l’inscription sont sur la page de SeaBeyond

Prosodical Thoughts: Prosody 0.9.7 released

Planet Jabber - 24 November, 2014 - 14:50

We are pleased to announce a new minor release from our stable branch. This release has just a couple of changes for you:

  • Fix server-to-server interoperability issue with Isode M-Link (since 0.9.6)
  • Fix traceback in 'prosodyctl about' command with LuaRocks 2.2.0+ installed

Also, this is our first release with an official Docker image. More on that soon!

Download

As usual, download instructions for many platforms can be found on our download page

If you have any questions, comments or other issues with this release, let us know!

ProcessOne: [FR] La conférence SeaBeyond: Qu’est-ce que c’est ?

Planet Jabber - 17 November, 2014 - 08:31

Voici une brève introduction qui explique la génèse et l’esprit de SeaBeyond:

Pour s’inscrire et consulter le programme de SeaBeyond, c’est ici: SeaBeyond

Tigase Blog: Tigase XMPP Server 5.2.3 release

Planet Jabber - 14 November, 2014 - 16:34

A maintenance version Tigase XMPP Server 5.2.3 has been released and it's available for download. As always - binaries are available for download in the files section on the project tracking system.

Alexander Gnauck: Secure Gmail Authentication with X-OAUTH2 SASL

Planet Jabber - 12 November, 2014 - 13:36

In July 2014 Google has introduced the “More Secure Gmail Authentication feature”.
When Access for less secure apps is set to disabled then Google does not allow login over SASL PLAIN anymore (even on TLS).

During authentication Google replies with the not-authorized error. And they will notify you by email that access to an insecure application was denied.

CLIENT: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AUTH DATA</auth> SERVER: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <not-authorized /> </failure>

When access for less secure apps is disabled you have to login with the X-OAUTH2 SASL mechanism the Gmail XMPP server offers. Here is a small tutorial how to achieve this with MatriX.

1) API Project

In order to access the Google API you have to setup a project in the Google API Console which provides you the Access credentials. Once you have created your API project you can request your credentials which include the Client Id and Client Secret. During the creation process of the app project we selected “native application”.

2) Request an Access Token

To authenticate with OAuth 2.0 we need to get our Access Token. The OAuth 2.0 is documented at the Google pages under the following 2 links:

There are also several .NET libraries available, e.g DotNetOpenAuth or Google APIs Client Library.

We are not going to use a third party library for now, because this help us also to understand the whole XAuth authentication flow.

We create a new form and put a Webbrowser control on it. When the form loads we have ro navigate to a Url which includes;

  • Client Id of our API project
  • A redirect Uri, we use this urn:ietf:wg:oauth:2.0:oob
  • scopes:
    • https://www.googleapis.com/auth/googletalk
      (required for XMPP authentication)
    • https://www.googleapis.com/auth/userinfo.email
      (optional, we can use this t get the username/email address of the user)

When our form with the webbrowser loads we navigate to this Url with teh following code:

const string CLIENT_SECRET = "XXXXXXXYYYYYYYYYYYYZZZZZZZZZ"; const string CLIENT_ID = "yyyyyyyyyyyyy-xxxxxxxxxxxxxxxxx.apps.googleusercontent.com"; private static Uri GetAutenticationUri() { var postData = new List<string> { "client_id=" + CLIENT_ID, "redirect_uri=urn:ietf:wg:oauth:2.0:oob", "scope=https://www.googleapis.com/auth/googletalk https://www.googleapis.com/auth/userinfo.email", "response_type=code" }; return new Uri("https://accounts.google.com/o/oauth2/auth" + "?" + string.Join("&", postData.ToArray())); } private void Form_Load(object sender, EventArgs e) { // navigate to the Uri when the form loads webBrowser1.Url = GetAutenticationUri(); }

When you run the code you should see the following:

3) Authentication

When the user now clicks on “Accept” in the authentication dialog the page in the browser reloads. The new page contains an Authentication code in the title tag. The authentication code is also in the body of the result page. We have seen cases where the code in the title tag was cut off. So it could be more secure to parse it from the body.

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string docTitle = ((WebBrowser) sender).DocumentTitle.ToLower(); // when there is "success code=" in the title its the page we are looking for. if (docTitle.IndexOf("success code=") > -1) { webBrowser1.Visible = false; // Hide the webbrowser // we can find the auth code in the title tag of the html page string authCode = webBrowser1.DocumentTitle.Replace("Success code=", ""); ProcessAuthorizationCode(authCode); } else if (docTitle.IndexOf("denied error=") > -1) { // user denied the app dialog, handle this here. } } 4) Exchanging the Authentication Code

Now we have the Authentication code, and can use it to request the access token and refresh token over a simple HTTP Post. The result is in JSON, we use Newtonsoft.Json to process it.

public void ProcessAuthorizationCode(string authCode) { var postData = new List<string> { "code=" + authCode, "client_id=" + CLIENT_ID, "client_secret=" + CLIENT_SECRET, "redirect_uri=urn:ietf:wg:oauth:2.0:oob", "grant_type=authorization_code" }; //Posting the Data to Google string responseString = Post("https://accounts.google.com/o/oauth2/token", postData); //Processing the JSON Response JObject jObject = JObject.Parse(responseString); JToken refreshToken = jObject.SelectToken("refresh_token"); // Checking for errors. if (refreshToken == null) { //this._ErrorMessage = response; } else { RefreshToken = refreshToken.ToString(); AccessToken = jObject.SelectToken("access_token").ToString(); // close the browser Windows, we are done Close(); } } public static string Post(string url, List<string> postData) { var request = WebRequest.Create(url); // Preparing the post data var toPost = string.Join("&", postData.ToArray()); byte[] byteArray = Encoding.UTF8.GetBytes(toPost); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = byteArray.Length; var dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); try { // read the response var response = request.GetResponse(); dataStream = response.GetResponseStream(); var reader = new StreamReader(dataStream); string responseString = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); return responseString; } catch (Exception) { return null; } } 5) Getting the username (optional)

The username for XMPP authentication for XOAUTH2 SASL is the users email address. You can either ask the user to enter it in your software. Or you can use your access token to request more user details. This is why we have added the scope https://www.googleapis.com/auth/userinfo.email. This allows us to get the username with a post to the following url:
https://www.googleapis.com/oauth2/v1/userinfo?access_token={your_access_token}

This request returns JSON payload where you could fine the users email address.

6) Authenticate with MartiX

Now we have everything to perform the XOAUTH2 authentication with MatriX. We need to subscribe to the OnBeforeSasl event to manual select the SASL mechanism and pass our access token.

private void xmppClient_OnBeforeSasl(object sender, Matrix.Xmpp.Sasl.SaslEventArgs e) { // make sure we use the correct username for authentication xmppClient.Username = "user12345@gmail.com"; // disable automatic SASL algrithm selection in MatriX e.Auto = false; // manual specify the X_OAUTH2 SASL mechanism e.SaslMechanism = Matrix.Xmpp.Sasl.SaslMechanism.X_OAUTH2; //pass the Access token to MatriX e.SaslProperties = new OAuthProperties() { AccessToken = "AccessToken" }; }

Tigase Blog: How we use git and git-flow to handle all Tigase projects

Planet Jabber - 12 November, 2014 - 10:24
Over time Tigase grew from a single server project to a family of applications, tools and libraries related to XMPP.
Distribuir contenido