The development of this feature is considered complete (of course, some features are never really complete, but we have to put a certain number of boundaries...)

The feature is expected to be bug free and is likely so. However, other features that you use may have side effects that makes such a feature "bogus" even though this feature itself is perfect and really others generate the bug.

See a complete list of features sorted by Snap! Websites Development Status

Some of our packages offer additional installation scripts, which, in general, you can use in your postinst or postrm scripts of your project.

For example, the snaplogger is used to manage the logs of other projects using services. When such other projects are created, they are expected to run as a user other than root. This means they will not have enough permissions to create log files or write to log files unless the logs are created with their user and/or group name. This is accomplished using a postinst script which makes sure that the location where logs are created is writable by the ...

Detect Ad Blocker

This feature detects whether the client is running an ad blocker add-on. If so, sending that user code for ads (such as AdSense) is going to be useless... however, you may have a way to advertise with a simple picture from your website, which should not get blocked.

This specific plugin only determines whether an ad blocker is running or not and saves the information for later so we can avoid sending ad code which won't work with such clients.

The flag can be checked on the client side (with JavaScript) or the server side (in C++) and your plugins can depend on this one and react ...

The European Union decided that it would be best if websites were to tell you that they are using cookies. This is important for many people who want to protect their freedom.

Unfortunately, without cookies many things cannot be achieved in a website. However, you may have a clear policy that spells out what you do with cookies (i.e. cook them, eat them, market them...) and that way people can decide to use your website further or not.

This is done by displaying a very clear pop-up, most often at the bottom of the screen, which gives the user a way to go to the page describing your cookie ...

The inter-process signalling system is a server that can be communicated with via TCP/IP streams and UDP packets. This is very similar to an RPC system, only extremely specialized for Snap!

When starting Snap! you run snapinit. That process creates the snapcommunicator process which is the signalling server. Once the server is up and running, the other processes are started.

The snapcommunicator process is a server that accepts four types of connections:

  • Quick UDP signals, in most cases those are used to ping a process so it immediately starts a task in the background.
  • ...

Editor: Hidden Widget

The Hidden widget is used to include data in a form that has to be hidden. The concept is pretty simple, it allows us to have a session identifier in forms without having to show that identifier to the end users. The form session identifier is necessary to allow the saving of the data in the form. Otherwise we assum that a hacker is trying to send spam to the server.

In standard HTML forms, one can use an input typed "hidden". Many people make use of those to carry data on the client side instead of the server side. We strongly suggest that you instead make use of the user session ...

C-like Expressions

The snapwebsites library includes a parser (yacc like tool) which can be used to generate grammars and thus support different mini-languages that are used internally by the Snap! system to enhance the capabilities by letting end users enter really advanced expressions or definitions.

For example, the domain and website definitions make use of a mini language that allows for a set of domains, a set of websites and each include a set of parameters with optional data.

One extension that is part of the library is support for advanced C-like expressions that are linked to the Cassandra database. ...

What is the Session Random Number?

Each time a user access Snap! Websites pages, he receives a cookie. That cookie include a session identifier and a session random number defined as:

<session identifier>/<session random number>

The session identifier does not change between accesses unless something goes wrong. The session random number changes on each access. This allows us to prevent the use of a session by a hacker for more than one page access if both the hacker and the user being hacked both use the site at the same time. Figure 1 shows a normal session with a ...

Introduction (implemented)

Snap! Websites make use of sessions to track the user and react accordingly.

There are currently three types of sessions:

  • Form Sessions
  • User Sessions
  • Secure Sessions

The following describes their use. Note that the basic type of a session does not automatically mean it is used by a plugin of that name. It is viewed as a security level for the session rather than the owner of the session.

Form Sessions

To avoid a lot of website spam, forms have to be protected. This is done by creating a session for the form. The form is then given a ...

In order to implement the layout selection we setup the QtScript instead of using our own scripting language since it's already working. At some point we'll want to switch to our own version for speed (i.e. pre-compiled byte code.)

The QtScript is plain JavaScript without any special extensions, however only the system will generate code so we're safe on that end.

The script is expected to return the name of the column defining the layout to use, or an empty string. If empty, then the process is repeated with the page type and its parents (see Layout feature [core]) This column name is ...

Links between rows

All the data in our system is linked one way or another. It is important in order to organize the data in a tree and to categorize it (to not say tag it).

The data starts with a Root node and everything is defined under that root node. The linkage is done using the name of each node and the name of the category being used (a category is itself a node of content, so for example the User category is a node defined under the Root node and a user account is defined as a child of the User category. Thus to find users, you start from the Root, go down to the User category, and then list all the ...

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly