oSMo (oSocial Mojolicious) is a framework writen over Mojolicious,
extending Mojolicious with the functionality need to implement simple
and fast a social website.
I know, I know - I will get there.
=head2 So Far
So far oSMo is mostly adding functionality to Mojolicious, assuming some
basic functionality will be used most of the time. The basic infrastructure
for authentication and logging as described in the edeas below is already in
place, even if most of the final implementations are not yet final.
At this point oSMo makes it really easy to create sites that use
bootstrap as a design framework, but it doesn't need to be used and can
be easily replaced by creating a small set of templates in your app
that you'ld need to create anyway with Mojolicious.
In theory everything you can do with Mojo should work with oSMo, and you
get a few new things.
=head2 Working already
=item Templates and Themes
Mojolicious template system is really nice, and the only change made on
it was the support for themes - sometimes you may want to make a website
that used different themes for different - the only condition
is that when you get to the rendering the themes is already defined,
the conditions you use to define your themes are your problem.
oSMo will look for the right template first in the theme directory
and then in the main templates directory. The themes may also have their
special version of the public files - if your theme only need
a different css file, it may only have the new css, with the same name as
the file in the main public directory, and that it, you have a new look for
oSMo, with auth activated, adds some helpers, conditions and predefined
routes to your Mojo website.
oSMo adds the helpers authed(), anonymous(), user_can('permission') and
auth_form() - this can be used in your controlers or templates.
oSMo also adds the conditions authed_user, anonym_user and user_can
conditions, that you can use when defining your routes.
=item base routes
But you can also use $app->auth->anonymous_routes or
$app->auth->authed_routes as base for your routes for anonymous or
oSMo::Auth is also plugable, and you can define your own authentication
plugins for it. Unless you need a register page, you don't even need to create
any page to make your authentication work - just a list of fields you need
on login and a check_user method to verify the credential.
Some Authentication systems may need some more complex logic - and it's
part of the plan to support oAuth, Open ID, Facebook and some others
on the framework itself.
=item Menus and Snippets
Most website have menus, and often enough we need to add small snippets of
html/js/css to our pages depending on conditions - and that shouldn't mean
we need a completly new template to have those. oSMo have support to define
=item Form Validation
Validating forms is always needed - this is still a WIP, but the bases for it
are already here.
Because it was needed for the Email Registering and Authentication, and most
sites like to send emails - if nothing else from the contact us form to the
Because sessions should be server side - I think, not client side. We just
send a session Id to the user, taking advantage of Mojo::Session, and keep
everything else server side.
=item Task Queueing
oSMo implements a plugable task queueing and execution mechanism,
plugable in a similar way as most parts of Mojolicious are. Execution
of tasks on the cleanup phase of the request, using a MySQL table
and using a message queue system (RabbitMQ).
=item Message Broadcast
oSocial is a decentralized social protocol, and that means that most
of the applications using it will need to broadcast messages to other
=item User Authentication
oSMo implements a plugable authentication engine, and some basic
authication plugins, including email+password and oSocial.
Mojolicious log system was designed for developement more than
for production. It allow for quick debuging, and to automatically
disable the logs in the production systems.
But if that is specially good when creating a small system, sometimes
a lot more than that is needed. oSMo replaces the Mojolicious log system
with its own, in order to add a few more functionalities to it, and make
it more pluggable on how the log are saved and what gets logged.
Because if your site gets interesting, it will most likely need it.
=head2 Getting Started