Snap! Websites
An Open Source CMS System in C++
An alpha version is available. Alpha Versions are likely to still be buggy, but should offer part of the feature as it would otherwise be expected.
See a complete list of features sorted by Snap! Websites Development Status
The PAD File format was defined by the Association of Software Professionals. Only that format has many limitations making it pretty much unusable with software that has a very broad or non Microsoft Windows oriented type of software. For that reason, we also include our own Snap format called SNSD (Snap Software Description). Both formats make use of XML, only the SNSD format includes a REST API allowing applications to easily navigate a large number of software offering without having to search an entire website to find a few SNSD Files.
At this time we have all ...
Quite often, the system has to present some data to the end user.
This data is generally saved in a form that is common to anyone in the world: a number saved as an integer, a date saved as a Unix timestamp, a currency saved as a floating point, etc.
To display that information to the end user, the default format may not be adequat. For example a date may be writen in any one of the following formats:
26.11.2014 Europe 11.26.2014 US 2014.11.26 Japan
Similarly, the separator of digits in a number may be a comma, a period, a space...
(123) 555-1212 US Phone number US ...
A page of content (and remember that pretty much everything in Snap! is a page) can be cloned.
Pages are defined using a URI such as:
/journal/20141019/about-the-snap-trashcan
Cloning allows you to create a duplicate of that page. Maybe you wanted to copy it to:
/favorite/about-the-snap-trashcan
Having a copy would allow you to not lose the previous version and new edits on either one do not affect the other. This could also be used when writing a book and a page is quite similar (i.e. the copyright page.)
The clone process copies all the data in the pages, data ...
The URLs found in a page are added to the links table (a specific content type) so we can manage all the links.
Whenever a user is attempting to read way more data than expected in a really short period of time, one is quickly marked as a hacker and if the behavior lasts a little too long (i.e. the hacker's robot doesn't follow our requests to slow down its requests) then we block one's IP address using snapfirewall.
Our Snap! Websites implementation counts HTML pages and all the various attachments (images, JS, CSS, etc.) as two separate groups. Each access is logged using Cassandra using the HTTP status, date, type, and URI of each hit. This way we can use the count() functions of ...
We want means to select a layout based on all sorts of criteria such as the domain used to access the website, the device (iPhone, Desktop...), whether the user is logged in or not, depending on the path, the page, the browser in use, etc.
At this point, we have a Page Layout which actually is used to indicate how the contents of the page is to be placed on the screen. That Page Layout can also be a full page layout in which case that page is set (i.e. it has priority over any other selection.)
The layout should be selectable on a per path basis. For example, if you create a set of pages ...
To avoid security problems on websites, you need to have different level of filtering of the data posted by the website users.
This generally comes down to something similar to this:
* The owner of a website can write anything they want on any page, including HTML, JavaScript, IFRAME, etc.
* An editor may be able to add IFRAMEs or OBJECTs, but no JavaScript.
* An author is able to enter anything on a page except IFRAME, OBJECT and JavaScript code.
* A registered user can insert images and format his text (left, right, bold, etc.)
* A simple visitor can only write text.
The filter can do ...
Snap! Websites
An Open Source CMS System in C++