phone

    • chevron_right

      Ignite Realtime Blog: HTTP File Upload plugin 1.2.0 released

      news.movim.eu / PlanetJabber · Wednesday, 30 November, 2022 - 16:17

    We have now released version 1.2.0 of the HTTP File Upload plugin!

    This plugin adds functionality to Openfire that allows clients to share files, as defined in the XEP-0363 ‘HTTP File Upload’ specification .

    This release primarily enhances functionality when running in an Openfire cluster. All changes can be reviewed in the changelog for this release of the plugin.

    As always, your instance of Openfire should automatically display the availability of the update. Alternatively, you can download the new release of the plugin at the HTTP File Upload plugin’s archive page .

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic

    • chevron_right

      Prosodical Thoughts: Bringing FASTer authentication to Prosody and XMPP

      news.movim.eu / PlanetJabber · Monday, 28 November, 2022 - 17:30 · 9 minutes

    As our work continues on modernizing XMPP authentication , we have some more new milestones to share with you. Until now our work has mostly been focused on internal Prosody improvements, such as the new roles and permissions framework . Now we are starting to extend our work to the actual client-to-server protocol in XMPP.

    Prosody and Snikket are both regularly used from mobile devices, which have intermittent connectivity. Even if it’s only a change between networks, or when driving through a tunnel for a few minutes, these things can temporarily break your connection - requiring a new one to be established.

    We’ve had solutions and optimizations in the XMPP protocol for this situation for years (really… the first version of XEP-0198 was published in 2004!). XEP-0198 allows a client to reconnect to the server as soon as the network comes back, easily discover if anything failed to be sent/received due to the network interruption, and then resync any lost packets in either direction.

    This effectively allows resuming and repairing the session as if no disconnect occurred, while skipping a bunch of traffic that would usually be exchanged when establishing a new session (instead, everything is simply cached from the old session).

    However, there is one important thing we don’t allow the client to skip. To keep this resumption step secure, we require authentication. It’s a new connection, and we need to prove it’s from who it claims to be from.

    Authentication in XMPP today

    The most common authentication method for XMPP connections today is SCRAM. This is a neat password-based authentication mechanism that has many nice properties, such as allowing both the client and the server to store only a hash of the password. It also allows the client to determine that the server really knows the user’s password, and supports channel binding. These features allow the client to detect various kinds of attack.

    Even though we have been using SCRAM in XMPP for many years now, it still offers more protective features today than the vast majority of online services you use - which generally all send your password to the server in plain text, albeit within TLS or HTTPS.

    A new SCRAM alternative is currently being developed, known as OPAQUE, which adds even more nice properties. But that’s for future blog post… :)

    However, there are some drawbacks of SCRAM (and similar mechanisms, including OPAQUE) that can’t realistically be solved. To adequately protect your password, it requires some back-and-forth negotiation with the server. In protocol speak, we refer to such situations as “round trips” - every time the client sends something to the server and has to wait for a response before it can proceed. On a very slow network, round trips can add a bunch of latency , and as anyone who has used audio/video calls or gaming online knows, latency can be frustrating and hard to eliminate from a connection.

    Simpler authentication methods just have the client say “here are my credentials”, and the server say “your credentials look great, you’re authenticated!“. That’s how HTTP and most websites work today. Such approaches are quick and easy, but they don’t protect your credentials as well as SCRAM does.

    Passwords are the problem

    SCRAM’s protections are important for passwords. Passwords are (unfortunately) often chosen by users to be the same or similar across multiple services, and even if they are strong and unique they can be vulnerable to phishing. If leaked, many memorable passwords contain private information about the user.

    We don’t want to drop any of our important password security features just to improve connection speed. So instead we found a better solution: drop passwords!

    Our new solution allows the client to log in initially using a password (or any other method the XMPP server supports). After that, it can upgrade to a strong unique authentication token provided by the server, which it can use to quickly re-authenticate on future connections.

    Tokens are the answer

    Tokens have many advantages compared to passwords:

    • They are unique to the service that generated them , so cross-service attacks like credential stuffing are useless against tokens.
    • Tokens don’t need to be memorable , so they can be very long and random (both desirable properties for increasing account security!).
    • As they are not memorized by the user, they can be rotated frequently without any inconvenience.
    • Different tokens can be generated for each of a user’s devices , instead of sharing the user’s password across all of them. This also allows selectively removing a device’s access from the user’s account, e.g. if it gets lost or stolen.

    With these security advantages, we suddenly unlock the ability to use simpler authentication mechanisms without risking the security of the user’s account or password.

    Still, we can do a bit better than just sending the token to the server as plain text. Fortunately, just the kind of modern token authentication method we need has already been in development by Florian Schmaus: the SASL HT mechanism family .

    HT mechanisms have the following properties:

    • The actual token itself is not exchanged over the connection during authentication.
    • And yet, the server receives proof that the client has the full correct token .
    • The client also receives proof that the server has the full correct token (and isn’t just impersonating the real server).
    • Finally, if channel binding is used, both sides receive proof that no MITM or relay attack being performed .

    And… all this can be completed within a single round trip!

    The protocol to achieve this has been submitted to the XSF as “Fast Authentication Streamlining Tokens” . It is in the acceptance queue, so doesn’t have a XEP number assigned yet.

    Updating and integrating with SASL2

    If FAST authentication was the only thing we had been working on recently, we would be happy enough. But there’s more…

    In collaboration with Thilo Molitor from the Monal project , a new version of XEP-0388 (SASL 2) has been submitted . SASL 2 was originally proposed back in 2017, and it defines a new authentication protocol for XMPP (still based on SASL, so we can reuse all the existing mechanisms we already have in place).

    Several features of SASL 2 are very relevant to our work. For example, it allows negotiation of session features in parallel with the authentication process. The old way required the client to authenticate, and then proceed to negotiate whatever features and parameters it wanted for the new session. With SASL2 the client can provide this information at the same time it provides its credentials. This saves yet more round trips.

    As well as SASL 2, we’ve also updated a related proposal from around the same time, XEP-0386 (Bind 2). This is also a critical piece of session establishment that integrates with SASL 2.

    With the work we’ve done across these three specifications - XEP-0388, XEP-0386 and FAST - we’ve essentially overhauled the entire authentication and session establishment protocol of XMPP . Even with all our additional authentication security features, it’s now possible for a client to connect, authenticate, and resume or create a session in a single request and response.

    This post shouldn’t be taken as being entirely about performance improvements. It’s nice to be able to (re)connect to the server in the blink of an eye. But there are other reasons to be working on this.

    As anyone who used XMPP in 2012 and 2022 knows, XMPP has been continuously evolving as both the internet and the way people use it has changed. Over time we have “bolted on” various features to the connection process to achieve this evolution.

    Now, with these new changes, we are bringing all these enhancements together into a single framework that was designed for them to fit neatly into. Not only are we reducing round trips, we are also simplifying connection establishment for the next generation of XMPP developers.

    When can I use all this?

    Even though this is all cutting edge stuff, you’ll be able to use it much sooner than you might think!

    Prosody has support for the new SASL 2, Bind 2 and FAST protocols. They are all available as community modules right now, though we intend for them to become part of the main Prosody distribution eventually.

    To get started, you’ll need a Prosody trunk nightly build , and simply enable the following community modules:

    To take advantage of the new features, you’ll need a compatible client. FAST is already implemented in multiple clients, and will be available from Conversations 2.11 for Android, as well as the next major versions of Monal , Siskin and Beagle for iOS and MacOS.

    Gajim already has SASL 2 implemented, and other client developers have also already expressed an interest in support.

    If you’re a client or library developer interested in supporting any of this, we have a test server available that you are welcome to use. Just let us know!

    Do remember that all this is still very new and experimental . The relevant protocol specifications are still working their way through the XSF standards process and there may be changes to come in the future. There may also be undiscovered bugs. We encourage brave souls to help test it all in real world deployments, but if your priority is keeping a stable setup, you should probably wait a little longer before deploying any of this.

    TCP Fast Open

    While this post is not just about performance improvements, we’ve talked a lot about performance improvements. Therefore it’s worth noting an extra little side feature at this point.

    Prosody trunk builds, when used with the new LuaSocket 3.1.0, support something known as TCP Fast Open . This is a low-level TCP extension that allows new connections to skip a round trip, by exchanging initial data packets while the connection is being established.

    It’s disabled for servers by default on Linux, but you can enable it on most modern systems by creating the file /etc/sysctl.d/tcp-fastopen.conf with the contents:

    net.ipv4.tcp_fastopen=3
    

    Run systemctl restart systemd-sysctl.service to apply the changes. More information on the sysctl configuration can be found in the Linux kernel documentation .

    In Prosody’s config, add the following in the global section:

    network_settings = {
        tcp_fastopen = 256;
    }
    

    Restart Prosody to apply these changes. Be aware that some networks and routers have been reported to be incompatible with TCP Fast Open (support was removed from Firefox for this reason). Although Linux has built-in recovery mechanisms that should work around such issues, if you experience trouble connecting to your server from certain networks, you may want to try turning this off again.

    We’re also looking at support for TLS 1.3’s 0-RTT mode, which can be combined with FAST authentication and TCP Fast Open to achieve full connection establishment within a single round-trip. Pretty impressive!

    Next steps

    These protocol changes are yet another step on our XMPP authentication modernization journey. With the new protocols now written and implemented, we can start looking forward to the next milestones for the project.

    In the coming months, we’ll be working on the ability to sign in to your XMPP account from third-party clients and services without sharing your password with them. Subscribe to our blog or Mastodon account and keep an eye out for that future post!

    • wifi_tethering open_in_new

      This post is public

      blog.prosody.im /fast-auth/

    • chevron_right

      Jérôme Poisson: Libervia progress note 2022-W45

      news.movim.eu / PlanetJabber · Thursday, 24 November, 2022 - 11:58 · 8 minutes

    Hello, it's time for a long overdue progress note.

    I'll talk here about the work made on ActivityPub (AP) gateway and on end-to-end encryption around pubsub.

    Oh, and if everything goes well, this blog post should be accessible from XMPP and ActivityPub (and HTTP and ATOM feed), using the same identifier goffi@goffi.org .

    Forewords

    The work made on the AP gateway has been possible thanks to a NLnet/NGI0 grant (with financial support from the European Commission's Next Generation Internet programme).

    I especially appreciated that the team was really there to help bring the ideas to life, and not once did they get in the way: little paperwork, no unnecessary pressure, caring, contacts when help was needed, etc.

    I wish there were more organizations like this one that really help develop libre projects for the common good.

    So once again I want to thank them for all that.

    XMPP ⬌ ActivityPub Gateway

    There is probably no need to explain here what is ActivityPub , we can simply write that it is an open protocol that allows to do things that XMPP also allows doing, and that until now these 2 protocols could not communicate together. The work on the ActivityPub gateway aims to allow software implementing one of these 2 protocols to communicate as easily as possible. I firmly believe that all open protocols should be able to communicate which each other, to avoid creating more silos, proprietary software is already good enough at that.

    To be useful, a gateway must use the full potential of both protocols. A simple bot transcribing messages as we see too often, using unsuitable features (such as instant messaging for blog posts), or using a very limited set of features to ensure compatibility are flaws that I have tried to avoid. Building a good gateway is a difficult and time-consuming task. If done right, the gateway should be as invisible as possible to the end user.

    XMPP is featuring blogging since long before AP, however the set of features is not exactly the same. Current use of AP is clearly inspired from commercial "social" networks, and metadata such as subscribers/subscribed nodes (or followers/following in AP terms) are highlighted, feature such as like/favourite were missing in XMPP, and some implementation such as Pleroma do implement reactions. To integrate that in the gateway, I've been working on new specifications:

    • Pubsub Public Subscriptions : a way to publicly announce subscriptions, in an opt-in way. With this it's possible to implement followers/following features in a way respectful of privacy.

    • Pubsub Attachments : a generic way to attach any kind of data to a pubsub item. It's notably used to implements noticed/favourite button (see here and reactions.

    • Calendar Events : handling of events and all the RSVP mechanism. Libervia was handling events for years, but it was an experimental implementation, this specification is a next step in the effort to make it a standard.

    Note that this XEP and the others linked below have been accepted but are not yet visible in official list.

    You may wonder why there is a specification for Calendar Events… It's because the AP gateway also handles them, making it compatible with Mobilizon . The gateway may evolve in the future to support other non (micro)blogging use cases.

    The gateway is now finished in terms of functionalities, however the code is clearly of an alpha quality for the moment. Now the goal in the coming months will be to stabilize and possibly implement other features if there is a demand for it.

    Early adopters are encouraged to try and test it as long as they keep in mind that it's not stable. So if you do try it, I recommend keeping a separate ActivityPub account in whatever stable implementation you use at the moment, this way you can check if messages or media are missing, if there is any inconsistency or other bugs, and report them to me. If you test it, please join the XMPP room libervia@chat.jabberfr.org ( click here to connect from your browser ) for help and feedback. Stabilization will probably take weeks, but I hope to have it done by early 2023.

    Installation instructions and details on how the conversion between protocols is done is available in the documentation and notably here

    A question I've been asked a lot: yes, you can use the same identifier for XMPP (JID) and AP ( WebFinger actor handle) as long as you use "simple" characters (i.e. alphanumeric ASCII chars, _ , . and - ). If you use something more complicated, you'll have to use the escaping mechanism explained in the doc (this is due to constraints with some AP implementations).

    As for blogs on pubsub nodes (what Movim calls "communities"), I made it simple: you can use directly the name of the node that holds the blog in the local part (i.e. before the "@") of your actor handle: a blog named community_bog at the XMPP pubsub service pubsub.example.org can thus be addressed with the AP actor community_blog@pubsub.example.org . This way you can use a rather user-friendly identifier to share your blog with people who are only on ActivityPub.

    This gateway should work with any XMPP server, and any client that implement blogging features (Only Libervia itself and Movim implement it for now, but I have heard that other clients are planning support for it). To enjoy the whole feature set of the gateway, the new specifications need to be implemented by the clients, so you can start to fill feature requests…

    With this gateway, the door is open to have a client able to talk to the ActivityPub network, while having the feature of XMPP, including e2e encrypted private messages (e2e encrypted only if you communicate with an XMPP account, not with an AP one).

    Oh, and please update your graphics, drawing and other texts to include XMPP in the fediverse ;)

    End-to-End Encryption

    Much effort has also gone into end-to-end encryption.

    OMEMO implementation has been updated (OMEMO:2 is now used), including Stanza Content Encryption which allows encrypting arbitrary elements instead of only the \<body/> of the message, I believe that Libervia is the first XMPP client to implement it. OpenPGP for XMPP (or "OX") has also been implemented, all that thanks to the work of Tim Henkes "Syndace", the author of python-omemo .

    Beside instant messaging, end-to-end encryption has also been introduced to pubsub. I've made specifications for two methods:

    • An OpenPGP profile for pubsub which is thought to encrypt a whole node, with a system of secret sharing/rotation/revocation. With it, it is easy to give access to new entities after publication, and to retrieve old items for newcomers. This specification can be used to encrypt any pubsub based features: (micro)blogging, calendar events, lists, etc.

    • Pubsub Targeted Encryption which is a way to apply the same cryptographic system used in instant messaging to pubsub. This way, OMEMO can be used with its forward secrecy property. It is not a good option to use this specification to encrypt a whole node, as archive is then not accessible to newcomers, and to add access to a new entity you have to re-encrypt all items, but it's an interesting option to encrypt an element occasionally, for instance to restrict access of a specific post in an otherwise public blog.

    Specifications have also been written to sign a pubsub item in a backward compatible way (client which don't implement those specifications can still work normally):

    All those specifications are already implemented in Libervia, but they are only usable from CLI frontend at the moment. All you have to do is to use the --encrypt and/or --sign options from pubsub or blog commands (check documentation for details).

    Uploaded files were already encrypted with OMEMO Media Sharing which is what is commonly used these days, but this method has not been accepted as a standard as it was a workaround for limitation of legacy OMEMO implementation. The proper way is now specified with Stateless File Sharing and is encrypted with Encryption For Stateless File Sharing . Those methods are currently only usable when OMEMO:2 is implemented in the peer client, and with them metadata on the shared file can be attached, including thumbnails.

    Encryption has also been implemented for Jingle ( XEP-0391 and XEP-0396 ), which is notably used for Jingle File Transfer (specially useful for large files transfers).

    So to summarize, nearly everything (instant messaging, files uploaded, large file transfers, all pubsub related features) can now be e2e encrypted with Libervia.

    Possible Future

    With the AP gateway permitting to reach the whole AP network, all the new features implemented, and the work done on e2e encryption, Libervia has everything to be a solid option for communication. After the recent events regarding a famous commercial network, we see a breakthrough of ActivityPub that will hopefully last over time. We can now access AP from XMPP, while having the possibility to have e2e encrypted private conversations or even blogs or calendar events.

    As far as I know this is, so far, something unique for a Libre decentralized software. However, there is still work to do on stabilization on UI/UX update before this is really usable.

    Those feature were planned for very long (years), but the lack of resources made them slow to come. The grant has made it possible to greatly accelerate the pace of development, and I doubt that it would have been possible to have all that without it.

    Regarding how large the project is, and my family life, it's not possible any more to develop seriously this project on my free time alone (and I would like to do other things, sometimes, of my free time).

    In other words, I need to find a way to sustain the development of Libervia for the years to come, so I can work full-time on it, and with some luck, build a team. I'm thinking very seriously about it these days, I'll probably write on this topic in a little while. If you are willing to help in any way, please contact me (on the Libervia room linked above for instance).

    That's all for this progress note. I'm now working on stabilization and UI/UX update on the web frontend.

    • wifi_tethering open_in_new

      This post is public

      www.goffi.org /b/libervia-progress-note-2022-w45-MTdL

    • chevron_right

      Ignite Realtime Blog: Openfire Monitoring Service plugin 2.4.0 release

      news.movim.eu / PlanetJabber · Tuesday, 22 November, 2022 - 21:11

    Earlier today, we have released version 2.4.0 of the Openfire Monitoring Service plugin. This plugin adds both statistics, as well as message archiving functionality to Openfire.

    In this release, compatibility with future versions of Openfire is added. A bug that affects MSSQL users has been fixed, and the dreaded “Unable to save XML properties” error message has been resolved. A few other minor tweaks have been added.

    As always, your instance of Openfire should automatically display the availability of the update. Alternatively, you can download the new release of the plugin at the Monitoring plugin’s archive page .

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic

    • chevron_right

      ProcessOne: ejabberd turns 20

      news.movim.eu / PlanetJabber · Wednesday, 16 November, 2022 - 15:17 · 4 minutes

    ejabberd is a piece of software that was born 20 years ago. This is a long time, even at the scale of Internet. And yet, what ejabberd represents has not always been obvious. It took us a long time to realize what was so important about ejabberd. Why have we been developing it for 20 years? Why are we pushing it further even today? What makes it so special?


    ejabberd is a scalable messaging server. That sums it all and that does not do justice to this critical piece of the Internet infrastructure. Sure, it is known to be the most scalable XMPP server, so scalable that it was used as a building brick to build Whatsapp messaging service. This is something that we have always been proud of, something you can easily brag about when meeting your friends.

    But is that just it? Of course not. Today, with the troubles at Twitter, something appeared clearly.

    ejabberd is important because it helped build much more than Whatsapp or any other big name high-profile projects we have built. It is important because it makes people communicate, in a federated way. It is important because it implements open protocols, and now several of them: XMPP, MQTT, SIP and now Matrix.

    It’s about federation

    ejabberd is about federation. It is helping people on different servers, domains, companies, communities or even countries chatting together. And today even more than 20 years ago, it really matters. We have built ejabberd for 20 years, because it is a critical building brick of what makes the Internet exists. Openness, interoperability, federation. It is one of the few software that prosper outside of the spotlights and make the Internet what it is, along for example with web and mail servers.

    This is something we are pondering as we are thinking about the next steps, the next 20 years. But deep down, we know for sure, what we are about. ejabberd is about federation. You will read more from us here soon. It is a tradition. No birthday celebration speech is complete without looking back at the past.

    It is hard to track all ejabberd usage, but we know that ejabberd empowers more than a billion users. Not bad for a piece of code we wrote. Trillions of messages went through our lines of code.

    As mentioned in this post ten years ago :

    Closed protocols come and go – ejabberd and XMPP remains

    Happy 20th birthday, ejabberd!

    Brief timeline

    The very first public commit in ejabberd’s source code was done by Alexey Shchepin the 16th November of 2002. That was in the Jabber.ru CVS server. Later when that machine had technical problems, the development code moved to JabberStudio CVS.

    The first official ejabberd release was ejabberd 0.5 in November 2003 . The ejabberd home page at that time was a simple HTML. It’s also worth checking the early stage of the Ejabberd Installation and Operation Guide . Notice this first ejabberd logo represented a frog-like animal sitting on a “Jabber globe bulb,” with bat wings, dangerous-looking cogs, and an Erlang suit.

    After the 0.7.5 release in October 2004, ejabberd home page moved from JabberStudio to ejabberd.jabber.ru , and the bug tracker to Jabber.ru’s Bugzilla. For this Drupal site, the logo changed to a hedgehog, and that would remain ten years until the final website and logo update in 2015 .

    At the beginning of 2005, JabberStudio CVS had technical difficulties and the development code moved to ProcessOne SVN. Notice that ProcessOne contracted Alexey to work in J-EAI, a project based in ejabberd specially designed for some business usages, and later extended that relationship to ejabberd.

    In February 2005 the source code repository moved from SVN to Git, and the bug tracker to JIRA . Around October 2010 the source code repository and the bug tracker were finally moved to GitHub.

    From around that time, there’s an interview to Alexey Shchepin which covers the initial concept and years of ejabberd development. By the way, there was another interview two years ago .

    The ejabberd code base got a relevant massive change with the data binarization (use Erlang binaries instead of Erlang strings for data representation) in March 2013, which jumped ejabberd version from 2.1.12 to 13.03.

    The next years followed another major source code change: the movement of many C/C++ code to independent external libraries.

    Today, ejabberd is not just about XMPP. Even if it is mostly know for its great XMPP support, it also supports several other protocols:
    – SIP support to connect SIP phone was added in 2014 (see ejabberd 14.05 )
    – Support for MQTT protocol, to better support Internet of Things use cases, was added initially in the Business Edition , and some months later added to the Community Server 19.02 .
    – Right now Matrix federation is being introduced to allow interop between ejabberd and Matrix servers, to ejabberd Business Edition internally or on Fluux ejabberd SaaS platform. It will come later to ejabberd Community Server.

    ejabberd keeps on improving at a steady pace and is happy to open to other protocols and communities.

    Some source code statistics

    The oldest unchanged function in ejabberd is probably one of the least used: stop/0 . And the oldest functional line is the SETS macro definition .

    The ejabberd repository got 1,070,325 line insertions and 901,287 line deletions. When counting both ejabberd and the dependency libraries, they got 1.693.180 line insertions and 1.108.873 line deletions. With all this, the ejabberd source code went from 13 files to 868, from 1,448 lines of code to 480,961.

    Looking at the programming languages of ejabberd and its libraries, Erlang is obviously the major one, and C comes as a relevant second:

    Language Files Lines Code Comments Blanks
    ABNF 3 128 110 3 15
    ASN.1 1 14 10 0 4
    Autoconf 14 696 544 33 119
    Batch 4 31 21 0 10
    C 20 187549 139764 39614 8171
    C Header 8 11199 3783 6979 437
    C++ 1 533 442 17 74
    CSS 5 532 507 0 25
    Elixir 32 1888 1469 130 289
    Erlang 604 247901 208912 18368 20621
    JavaScript 2 23 21 1 1
    Lua 1 16 16 0 0
    Makefile 21 848 635 10 203
    Perl 3 1086 897 63 126
    Python 1 53 49 0 4
    RPM Specfile 3 5408 3928 1059 421
    Shell 21 4031 3263 336 432
    SQL 9 3857 2994 303 560
    TCL 3 1179 1002 69 108
    Plain Text 13 1870 0 1561 309
    YAML 20 1448 1357 53 38
    The post ejabberd turns 20 first appeared on ProcessOne .
    • chevron_right

      Dino: Stateless File Sharing: Source Attachment and Wrap-Up

      news.movim.eu / PlanetJabber · Saturday, 12 November, 2022 - 00:00 · 2 minutes

    Recap

    Stateless file sharing (sfs) is a generic file sharing message which, alongside metadata, sends a list of sources where the file can be retrieved from. It is generic in the sense, that sources can be from different kinds of file transfer methods. HTTP, Jingle and any other file transfers can be encapsulated with it. The big idea is that functionality can be implemented for all file transfer methods at once, thanks to this wrapper.

    Source Attaching

    The idea is simple: Once somebody started sfs, anybody can contribute more sources to the list of sources. A sfs-attachment consists of the message id of the original sfs, as well as a list of sources that should be attached.

    You might ask: “But why? I have used many messengers and never heard of such a feature, why should somebody else in the chat be able to do that?”

    I was surprised as well, but there actually are some reasonable use cases.

    1. Peer-to-Peer file sharing in groups
    2. Reviving dead download links
    3. Announcing file uploads before the upload is finished

    Security Considerations

    We obviously have to prevent the possibility of other members attaching wrong files to other people’s sfs. To prevent this, sources can only be attached to sfs, which have checksums in their metadata.

    Clients need to dismiss source attachments,

    1. if the sfs didn’t provide a checksum
    2. if the checksum algorithm is not trusted or unknown
    3. if the checksum of the downloaded file doesn’t match

    Google Summer of Code Retrospect

    This was the first time with Google Summer of Code and honestly, it’s been a nice ride. I’ve come to enjoy my stay and take pride in finishing the different components.

    When I started earlier this year, I had developed a bit of an Imposter syndrome . For one I wasn’t sure if I understood the full scope of the project, but I was also uncertain if I had the skill to work on it.

    Confidence came over time, when I managed to get an overview of everything that needed to be done. Everything suddenly looks much more manageable, when you understand the purpose and inner workings of each subcomponent that will be required over the way. Of course, it’s not completely straight forward. I often had to realize that I will need another component somewhere, but one thing at a time is manageable. Since I had my mentor to back me up whenever I got stuck, working on the project didn’t get frustrating.

    Blog posts

    Parallel to working on the project, we were expected to publish blog posts. Originally I was going for a weekly interval, but yea…

    I don’t think writing the blog posts helped me in any meaningful way. However, I do think writing blogs is a good habit and hope that

    1. I improved my blog writing skills
    2. The blogs will someday help someone

    Progress

    The GSoC period has already finished. See my pull request .

    • wifi_tethering open_in_new

      This post is public

      dino.im /blog/2022/11/stateless-file-sharing-source-attachment-and-wrap-up/

    • chevron_right

      Ignite Realtime Blog: Openfire 4.7.4 release

      news.movim.eu / PlanetJabber · Wednesday, 9 November, 2022 - 18:13 · 1 minute

    The Ignite Realtime Community is happy to announce the 4.7.4 release of Openfire. This release fixes a number of bugs and represents our effort to provide a stable 4.7.x series while work continues on the next feature release of Openfire.

    Notable fixes include enhancements to cluster-specific implementation of Multi-User Chat functionality, improved websocket handling and improved statistics. Additionally, the dependency on Apache Commons Text has been upgraded, to prevent statistic analyzers raising unneeded alarms with regards to its recently published CVE.

    You can find download artifacts available here with the following sha256sum values

    a6a98540e3ab6da65916f630b7b22d04e7ec125be9d09ae98121f6075ef2ef77  openfire-4.7.4-1.noarch.rpm
    5f4bd4e6390bdfe99a63e4e72b25200461854348a9f6039368cffe1c509782fa  openfire_4.7.4_all.deb
    6bebb52b4828d9564b1e22f3d0aebaeec6eefb1e5c7899549747b48bc8d6e30d  openfire_4_7_4.dmg
    142d923f0b17e4dff65b01f69d9d5885494798011157a64cfef8847063f503ee  openfire_4_7_4.exe
    9ebcb9c15d38d4f8fb528a79f0f53440179d64c214176c2d9e578b11762258dd  openfire_4_7_4.tar.gz
    ef233db999c8a18ac43edb7fd17657c7677c0ce2e29f09c9ccb53185c451ded3  openfire_4_7_4_x64.exe
    ba0fb1d992c5169da466107e7752f5eee588d79987dcf052e5b68abc101f7173  openfire_4_7_4.zip
    

    If you have any questions, please stop by our community forum or our live groupchat . We are always looking for volunteers interested in helping out with Openfire development!

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic