### This is the forum board source, this is the assembled version of the forum, ### this git will be used to work the themes without having to worries about having to assemble it. https://is.privy.ws # What is PRiVY? > PRiVY is a mixed bag of acquaintances. > We build Communication network for modern hackers security needs. > We strongly believes in the right to share and right to privacy. > PRiVY will always be fully transparent and open towards people using our services *PRiVYBB is an unique bulletin board / forum, written entirely in assembly language (FASM) and not WASM and using SQLEET(sSQLITE) as a forum database engine. It is designed to be extremely portables and easy to deploy. * The main and major change in this release is the support for encrypted forum database. The great SQLite plugin SQLeet is used. According to the specification it supports: > PBKDF2-HMAC-SHA256 key derivation with a 16-byte salt and 12345 iterations. > > ChaCha20 stream cipher with one-time keys. > > Poly1305 authentication tags. ## ## PRiVY template engine reference ## Overview The source of the template engine is located in the file PRiVY/source/render2.asm The function of the template engine is to render the text template file containing random text, mixed with template commands into a result text. In fact, it is kind of text editor. The procedure is defined following way: ``` proc RenderTemplate, .pText, .hTemplate, .sqlite_statement, .pSpecial ``` # Arguments: > > .pText - pointer to TText data structure. If [.pText] == 0, a new TText structure will be created and returned. If [.hTemplate] <> 0, the template named in [.hTemplate] is appended at the end of the [.pText] structure and then rendererd. If [.hTemplate] == 0 then is assumed that the template is already loaded in the TText structure and the structure will be processed from the beginning. > > .hTemplate - handle or pointer to the template name. This argument must specify only the filename, not the path. The template is loaded from the path templates/SKIN_NAME/TEMPLATE_NAME - where the SKIN_NAME is determined depending on the current user preferences, the default forum setting, and the user browser (mobile or desktop browser). > > .sqlite_statement - this is a handler to a SQLite statement. The statement must to be prepared, executed and must contain a valid row of data. The render engine can insert data from this row into the template text. The SQL statement depends on the specific template. > > .pSpecial - pointer to the TSpecialParams for the current HTTP request. Can't be 0 Return value: > The procedure returns the TText structure (possibly reallocated) in the register EAX. > Template symbols escape > > There are 4 special characters used in the template commands that must to be escaped in the template text that is not command. These characters are: [, ], | and ^. > > The escaped characters should be prefixed by the escape character ^ when used as a part of the text. I.e. ^[, ^], ^| and ^^. > Template database fields > > The database fields from the passed SQLite statement can be inserted in the template text by simply enclosing the field name in square brackets: > > For example: > > The user [UserName] has been banned! > > The field names are case insensitive. > > The content of the field is always rendered as a text (if the field is NULL, then it is rendered as an empty string) and the content is HTML encoded. > > In order to include a database field not HTML encoded (for example, it it already contains HTML code) it need to be nested in a [html:] command (read bellow): # For example: This is my HTML formatted [html:[signature]]. But notice, that such constructions can be not safe. PRiVY does not use such HTML formatted fields. Template commands The general command syntax is: ``` [COMMAND:SOME_NESTED_TEMPLATE_TEXT] COMMAND is the command name. SOME_NESTED_TEMPLATE_TEXT is template text. It can contain nested template commands and field names. The rendering of the nested commands is almost always (except the [case:] command - see below) inside out, from the most nested command/field to the least nested command. [case:] - conditional processing. The command [case:] has the following syntax: [case:VALUE|CASE_TEXT0|CASE_TEXT1|...|CASE_TEXTN] Depending on the value of VALUE it returns the text CASE_TEXT0, CASE_TEXT1 and so on up to CASE_TEXTN. Notice that the last text CASE_TEXTN is returned for all values greater or equal to N. I.e. the command works with "saturation". The case texts can contains nested template commands as any other command, but the processing is a little bit different. The command [case:] has the greatest priority and is processed before any nesting template commands or SQL query fields, including the nested [case:] commands. The value of VALUE is computed a little bit unusual. All whitespace characters are ignored. If it contains digits, they are interpreted as a decimal number. Every other than digit character increments VALUE by the number of bytes in the character (UTF-8 encoding!). In the below example, the VALUE will be computed as equal to 126: 123 (as number) + 3 (for the characters A, B and C). [case: 1A2B3C |case = 0|case = 1|case >= 2] ... and will be rendered as case >= 2 [special:PARAM_NAME] - returns special information related to the internal engine variables and data structures. This command inserts some information, depending on PARAM_NAME into the template. The possible PARAM_NAME values are: The command name "special" is named after the TSpecialParams structure used for storage internal engine context during the request processing and it returns some fields from this structure, but also it can return other engine/database internal data. visitors - returns a table with users that has been active online for the last 5 minutes. version - return the current version of the engine. sqliteversion - returns the current version of SQLite cmdtype - returns value, depending on the current command detected in the URL of the request: 0 = no command 1 = prefix command. Example /!avatar/atmos 2 = suffix command. Example /the-PRiVY-template-engine-specification.272/15792/!edit_thread stats - returns an informational html block about the current forum statistics. The value is actually the rendered template statistics.tpl. timestamp - the time, passed after the start of the request. The time is in milliseconds with microseconds resolution. This value is used as a benchmark and should be used at the end of the page. title - returns the needed value that to be included in the HTML element, depending on the current page rendered. header - this returns the html that have to be put in the forum header. This value is contained in the database and is set by the forum administrator from the forum settings panel. tagprefix - returns a web site specific unique prefix that to be used for creating globally unique IDs for the Atom feeds. Tag URI scheme is used. hostroot - returns the root part of the forum URLs - for example: "https://is.privy.ws" for this very site. allstyles - returns all CSS styles used until this moment in the templates (see the command [css:] bellow) Depending on the forum settings it returns the CSS in a form of set of tags, or as a