Security Advisories (1)
CVE-2026-5083 (2026-04-08)

Ado::Sessions versions through 0.935 for Perl generates insecure session ids. The session id is generated from a SHA-1 hash seeded with the built-in rand function, the epoch time, and the PID. The PID will come from a small set of numbers, and the epoch time may be guessed, if it is not leaked from the HTTP Date header. The built-in rand function is unsuitable for cryptographic usage. Predicable session ids could allow an attacker to gain access to systems. Note that Ado is no longer maintained, and has been removed from the CPAN index. It is still available on BackPAN.

NAME

Ado::Manual::Intro - General overview

What is Ado?

Ado was started in November 2013 as a rewrite of a previous project (MYDLjE) based on Mojolicious 1.9x. MYDLjE was too monolithic. It was not possible to start with minimum features, disable some of them and re-enable them only if needed. Ado is much more modular and flexible than MYDLjE and its name is not an acronym :).

Ado's purpose is the same as of MYDLjE – to quickly put together a lightweight web application and/or site based on Mojolicious with scalability, performance and growth in mind. An Ado system starts as a minimal application that can turn into an ERP, a CMS, a CRM or all in one by just adding plugins along the way as the organization which is using it grows.

It comes with default configuration file etc/ado.conf and a model Ado::Model, loaded at "startup" in Ado by Mojolicious::Plugin::DSC. An SQLite database is bundled with the distribution at etc/ado.sqlite to get started quickly.

Ado provides additional plugins and commands, which promote RAD, good practices, and team-work. The default Ado page uses Semantic UI via Mojolicious::Plugin::SemanticUI and is a good place to get acquainted. In short, Ado can be used right away as a CMS that can be extended with plugins and commands or as a CMF on which to build many different specific applications.

Here is the directory structure. It does not contain the files for brevity. It looks much the same as a full Mojolicious application would look and as described in "Differences" in Mojolicious::Guides::Growing. One noticeable difference is that Ado has it's starter script in bin instead of in script and this is only to ease the deployment. Another one is the Ado::Control namespace instead of Ado::Controlller. We did this for brevity. The third difference is site_templates, used for putting Ado system-templates which you want to override, e.g put our own copy of templates/partials/head.html.ep in site_templates/partials/head.html.ep and modify it. This way you can create your own themes without fearing that on the next upgrade your changes may be lost.

Ado                       # Application directory
├── bin                   # Script directory
├── etc                   # Configuration files and SQLite database directory
│   ├── commands          # Commands configuration files directory (Nothing here yet)
│   └── plugins           # Plugins configuration files directory
├── lib                   # Library directory where Ado.pm resides
│   └── Ado               # Application namespace
│       ├── Command       # Commands namespace for commands such as Ado::Command::adduser
│       │   └── generate  # Generators such as Ado::Command::generate::apache2vhost are here
│       ├── Control       # Controller namespace where controller classes 
│       │                 # like Ado::Control::Users reside
│       ├── I18n          # Namespace for lexicon packages such as Ado::I18n::bg
│       ├── Manual        # Namespace for developer manuals like this very file
│       ├── Model         # Controller namespace where controller classes 
│       │                 # like Ado::Model::Users reside
│       ├── Plugin        # Ado plugins namespace, e.g. Ado::Plugin::Auth
│       └── Sessions      # Server side sessions - e.g. Ado::Sessions::Database
├── log                   # Log directory
├── public                # Static file directory (served automatically)
│   │                     # Good for generated static pages served by e.g. Apache or Nginx
│   ├── css
│   │   └── flags
│   ├── doc
│   │   ├── bg
│   │   │   └── img
│   │   └── en
│   ├── fonts
│   ├── img
│   ├── js
│   └── vendor            # Directory for putting vendor specific JavaScript libraries
│       ├── crypto-js
│       │   └── rollups
│       └── pagedown
├── site_templates        # Template directory for site specific templates, used instead
│                         # of those with the same name found in templates directory
├── t                     # Test directory
│   ├── ado
│   │   ├── etc
│   │   │   └── plugins
│   │   └── lib
│   │       └── Ado
│   │           └── Plugin
│   ├── command
│   ├── plugin
│   └── sessions
└── templates             # Template directory. Copy from here to "site_templates" and
    │                     # modify if you want to override some of the system templates
    ├── default
    ├── doc
    ├── layouts
    ├── partials
    └── test

And here is how Ado looks as building blocks:

To learn more about Ado plugins, please look at Ado::Manual::Plugins. Now that you know what additional features Ado provides, you can proceed to Ado::Manual::Installation.

SEE ALSO

Ado::Manual, Ado::Manual::Installation, Ado::Manual::Plugins, Mojolicious::Guides

COPYRIGHT AND LICENSE

Copyright 2013-2015 Красимир Беров (Krasimir Berov).

This program is free software, you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License v3 (LGPL-3.0).