Difference between revisions of "GNUrc"

From ProgClub
Jump to: navigation, search
(→‎Jargon: AJAX...)
(heading levels)
Line 43: Line 43:
 
* [https://meta-refresh.me/2?u=https%3A%2F%2Fwww.gnurc.com%2F www.gnurc.com], the GNUrc developer portal
 
* [https://meta-refresh.me/2?u=https%3A%2F%2Fwww.gnurc.com%2F www.gnurc.com], the GNUrc developer portal
  
= Specifications =
+
= Jargon =
 
 
== Jargon ==
 
  
 
Following are definitions for abbreviations and acronyms that we use:
 
Following are definitions for abbreviations and acronyms that we use:
Line 83: Line 81:
 
:[https://en.wikipedia.org/wiki/Ajax_%28programming%29 Asynchronous JavaScript and XML]
 
:[https://en.wikipedia.org/wiki/Ajax_%28programming%29 Asynchronous JavaScript and XML]
  
== Functional specification ==
+
= Functional specification =
  
 
The functional specification describes what the project does.
 
The functional specification describes what the project does.
  
=== Administration dashboard ===
+
== Administration dashboard ==
  
 
The administration dashboard is an administrator's home page. From the administration dashboard an administrator can access:
 
The administration dashboard is an administrator's home page. From the administration dashboard an administrator can access:
Line 96: Line 94:
 
# Error reporting
 
# Error reporting
  
==== User administration ====
+
=== User administration ===
  
==== Language administration ====
+
=== Language administration ===
  
==== Group administration ====
+
=== Group administration ===
  
==== Error reporting ====
+
=== Error reporting ===
  
===== Error logging =====
+
==== Error logging ====
  
===== Error log testing =====
+
==== Error log testing ====
  
=== Role-based security ===
+
== Role-based security ==
  
 
We use [https://en.wikipedia.org/wiki/Role-based_access_control role-based security] to limit system functions to particular classes of users. There are three user roles and any given user can be in any combination of the roles:
 
We use [https://en.wikipedia.org/wiki/Role-based_access_control role-based security] to limit system functions to particular classes of users. There are three user roles and any given user can be in any combination of the roles:
Line 118: Line 116:
 
Administrators have access to administration functions. Non-administrators do not have access to administration functions. Translators have access to translation functions. Non-translators do not have access to translation functions. All users have access to the standard functions.
 
Administrators have access to administration functions. Non-administrators do not have access to administration functions. Translators have access to translation functions. Non-translators do not have access to translation functions. All users have access to the standard functions.
  
== Technical specification ==
+
= Technical specification =
  
 
The technical specification describes how the project works.
 
The technical specification describes how the project works.
  
=== Software layers ===
+
== Software layers ==
  
 
The GNUrc software is layered:
 
The GNUrc software is layered:
Line 166: Line 164:
 
Each level depends on (up to) all of the previous levels. So controllers use views, BOM, ORM, DAL, objects, and modules. Views use BOM, ORM, DAL, objects, and modules. The BOM uses the ORM, DAL, objects, and modules. And so on. Generally controllers should call on the services of the BOM rather than calling on the services of the DAL directly, so the BOM encapsulates business logic and mediates it into the DAL. If higher layers can encapsulate functionality in lower layers that is a good thing to do.
 
Each level depends on (up to) all of the previous levels. So controllers use views, BOM, ORM, DAL, objects, and modules. Views use BOM, ORM, DAL, objects, and modules. The BOM uses the ORM, DAL, objects, and modules. And so on. Generally controllers should call on the services of the BOM rather than calling on the services of the DAL directly, so the BOM encapsulates business logic and mediates it into the DAL. If higher layers can encapsulate functionality in lower layers that is a good thing to do.
  
=== Directory structure ===
+
== Directory structure ==
  
 
The software has the following directory structure starting in the [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol base]:
 
The software has the following directory structure starting in the [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol base]:
  
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol /] ====
+
=== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol /] ===
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol base] directory is /path/to/your/gnurc.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/?root=remotecontrol base] directory is /path/to/your/gnurc.
Line 180: Line 178:
 
*: e.g.: $ cp config.example.php config.php; vim config.php
 
*: e.g.: $ cp config.example.php config.php; vim config.php
  
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/dat/?root=remotecontrol /dat] ====
+
=== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/dat/?root=remotecontrol /dat] ===
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/dat/?root=remotecontrol /dat] directory is for data files.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/dat/?root=remotecontrol /dat] directory is for data files.
Line 187: Line 185:
 
* [http://svn.savannah.gnu.org/viewvc/*checkout*/branches/development/jj5-mvc/dat/lang.ser?revision=HEAD&root=remotecontrol lang.ser] -- the serialized PHP data-structure of the processed lang.dat file.
 
* [http://svn.savannah.gnu.org/viewvc/*checkout*/branches/development/jj5-mvc/dat/lang.ser?revision=HEAD&root=remotecontrol lang.ser] -- the serialized PHP data-structure of the processed lang.dat file.
  
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/?root=remotecontrol /etc] ====
+
=== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/?root=remotecontrol /etc] ===
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/?root=remotecontrol /etc] directory is for miscellaneous scripts.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/?root=remotecontrol /etc] directory is for miscellaneous scripts.
Line 193: Line 191:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/download-language-data.sh?root=remotecontrol&view=markup download-language-data.sh] -- downloads the [[#/dat|lang.dat]] file
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/etc/download-language-data.sh?root=remotecontrol&view=markup download-language-data.sh] -- downloads the [[#/dat|lang.dat]] file
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/?root=remotecontrol /etc/dbscripts] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/?root=remotecontrol /etc/dbscripts] ====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/?root=remotecontrol /etc/dbscripts] directory is an svn:externals for the database scripts:
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/?root=remotecontrol /etc/dbscripts] directory is an svn:externals for the database scripts:
Line 208: Line 206:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/make-db.sh?root=remotecontrol&view=markup make-db.sh] -- a script to create/upgrade a GNUrc database.
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/dbscripts/make-db.sh?root=remotecontrol&view=markup make-db.sh] -- a script to create/upgrade a GNUrc database.
  
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/?root=remotecontrol /src] ====
+
=== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/?root=remotecontrol /src] ===
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/?root=remotecontrol /src] directory is for most of the source code.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/?root=remotecontrol /src] directory is for most of the source code.
Line 215: Line 213:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/test.php?root=remotecontrol&view=markup test.php] -- the main include file for use by PHPUnit unit tests.
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/test.php?root=remotecontrol&view=markup test.php] -- the main include file for use by PHPUnit unit tests.
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/?root=remotecontrol /src/1-lib] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/?root=remotecontrol /src/1-lib] ====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/?root=remotecontrol /src/1-lib] directory contains function modules.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/?root=remotecontrol /src/1-lib] directory contains function modules.
Line 238: Line 236:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/99-screen.php?root=remotecontrol&view=markup 99-screen.php] -- global program logic.
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/99-screen.php?root=remotecontrol&view=markup 99-screen.php] -- global program logic.
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/?root=remotecontrol /src/2-obj] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/?root=remotecontrol /src/2-obj] ====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/?root=remotecontrol /src/2-obj] directory contains PHP classes used by GNUrc that do not fit in another category.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/?root=remotecontrol /src/2-obj] directory contains PHP classes used by GNUrc that do not fit in another category.
Line 258: Line 256:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/GrcValidation.php?root=remotecontrol&view=markup GrcValidation.php] -- an API for data validation.
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/GrcValidation.php?root=remotecontrol&view=markup GrcValidation.php] -- an API for data validation.
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/?root=remotecontrol /src/3-dal] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/?root=remotecontrol /src/3-dal] ====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/?root=remotecontrol /src/3-dal] directory contains data access layer facilities.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/?root=remotecontrol /src/3-dal] directory contains data access layer facilities.
Line 264: Line 262:
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/GrcDal.php?root=remotecontrol&view=markup GrcDal.php] -- the include file for the Data Access Layer; defaults to MySQL/PDO API.
 
* [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/GrcDal.php?root=remotecontrol&view=markup GrcDal.php] -- the include file for the Data Access Layer; defaults to MySQL/PDO API.
  
====== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/?root=remotecontrol /src/3-dal/mysql-pdo] ======
+
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/?root=remotecontrol /src/3-dal/mysql-pdo] =====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/?root=remotecontrol /src/3-dal/mysql-pdo] directory contains data access layer facilities for the MySQL/PDO database connectivity.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/?root=remotecontrol /src/3-dal/mysql-pdo] directory contains data access layer facilities for the MySQL/PDO database connectivity.
  
====== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/feature/?root=remotecontrol /src/3-dal/*/feature] ======
+
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/feature/?root=remotecontrol /src/3-dal/*/feature] =====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/feature/?root=remotecontrol /src/3-dal/*/feature] directories contain DAL [[#Software features|features]].
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/3-dal/mysql-pdo/feature/?root=remotecontrol /src/3-dal/*/feature] directories contain DAL [[#Software features|features]].
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/4-orm/?root=remotecontrol /src/4-orm] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/4-orm/?root=remotecontrol /src/4-orm] ====
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/5-bom/?root=remotecontrol /src/5-bom] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/5-bom/?root=remotecontrol /src/5-bom] ====
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/6-view/?root=remotecontrol /src/6-view] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/6-view/?root=remotecontrol /src/6-view] ====
  
===== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/7-ajax/?root=remotecontrol /src/7-ajax] =====
+
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/7-ajax/?root=remotecontrol /src/7-ajax] ====
  
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/7-ajax/?root=remotecontrol /src/7-ajax] directory contains AJAX controllers.
 
The [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/7-ajax/?root=remotecontrol /src/7-ajax] directory contains AJAX controllers.
  
==== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/web/?root=remotecontrol /web] ====
+
=== [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/web/?root=remotecontrol /web] ===
  
=== Managing errors ===
+
== Managing errors ==
  
 
The error management subsystem is comprised of the [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/GrcError.php?root=remotecontrol&view=markup /src/2-obj/GrcError.php] class and the 'err' and 'Error' functions in [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/01-api.php?root=remotecontrol&view=markup /src/1-lib/01-api.php 01-api.php].
 
The error management subsystem is comprised of the [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/2-obj/GrcError.php?root=remotecontrol&view=markup /src/2-obj/GrcError.php] class and the 'err' and 'Error' functions in [http://svn.savannah.gnu.org/viewvc/branches/development/jj5-mvc/src/1-lib/01-api.php?root=remotecontrol&view=markup /src/1-lib/01-api.php 01-api.php].
Line 290: Line 288:
 
Errors are managed in to modes. First they are 'declared' and second they are 'raised'.
 
Errors are managed in to modes. First they are 'declared' and second they are 'raised'.
  
==== Declaring error numbers ====
+
=== Declaring error numbers ===
  
 
To declare a possible error call the err()->define function. The first argument is the name of the error known as the error const. The error const has up to 6 parts separated by double-underscore:
 
To declare a possible error call the err()->define function. The first argument is the name of the error known as the error const. The error const has up to 6 parts separated by double-underscore:
Line 303: Line 301:
 
The second argument is the error message. The error messages will be translated if necessary and can include variables using the '%variable%' notation of the i18n subsystem.
 
The second argument is the error message. The error messages will be translated if necessary and can include variables using the '%variable%' notation of the i18n subsystem.
  
==== Raising particular errors ====
+
=== Raising particular errors ===
  
 
After you have declared an error like this:
 
After you have declared an error like this:
Line 315: Line 313:
 
where intl_context is an i18n translation context and previous_exception is a previous exception if any.
 
where intl_context is an i18n translation context and previous_exception is a previous exception if any.
  
=== Security features ===
+
== Security features ==
  
 
In addition to [[#Role-based security|role-based security]] we protect from [[#XSRF_protection|XSRF]] and [[#SQL-injection_protection|SQL-injection]] attacks.
 
In addition to [[#Role-based security|role-based security]] we protect from [[#XSRF_protection|XSRF]] and [[#SQL-injection_protection|SQL-injection]] attacks.
  
==== XSRF protection ====
+
=== XSRF protection ===
  
 
To prevent [https://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF] attacks we configure a session token that must be included in all HTTP POST submissions.
 
To prevent [https://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF] attacks we configure a session token that must be included in all HTTP POST submissions.
  
==== SQL-injection protection ====
+
=== SQL-injection protection ===
  
 
To prevent [https://en.wikipedia.org/wiki/SQL_injection SQL injection] attacks we take care to escape inputs when building SQL strings and/or use parameters with our database API.
 
To prevent [https://en.wikipedia.org/wiki/SQL_injection SQL injection] attacks we take care to escape inputs when building SQL strings and/or use parameters with our database API.
  
=== Web interface ===
+
== Web interface ==
  
==== admin-home.php ====
+
=== admin-home.php ===
  
 
The admin-home.php
 
The admin-home.php

Revision as of 22:18, 9 April 2015

GNUrc is the GNU Remote Control software. That's the software that aids in the maintenance of your thermostats. For other projects see projects.

Status

v1.1 released, v2.0 under development.

Motivation

To seek operational efficiencies in air-conditioners thereby saving electricity and improving comfort.

Administration

Contributors

Members who have contributed to this project. Newest on top.

All contributors have agreed to the terms of the Contributor License Agreement. This excludes any upstream contributors who tend to have different administrative frameworks.

Upstream (GNU) contributors: GNU Remote Control Contributors

Copyright

Copyright 2015, Contributors.

License

Licensed under the AGPL.

Resources

Downloads

See the home page for downloads.

Source code

See the home page for source code.

Links

Jargon

Following are definitions for abbreviations and acronyms that we use:

svn
Subversion version control software
i18n
intl
Internationalization/translation
SQL
Structured Query Language
API
Application Programming Interface
MVC
Model/View/Controller
ORM
Object/Relational Mapping
BOM
Business Object Model
HTML
HyperText Markup Language
HTTP
Hypertext Transfer Protocol
XSRF
Cross-Site Request Forgery
AJAX
Asynchronous JavaScript and XML

Functional specification

The functional specification describes what the project does.

Administration dashboard

The administration dashboard is an administrator's home page. From the administration dashboard an administrator can access:

  1. User administration
  2. Language administration
  3. Group administration
  4. Error reporting

User administration

Language administration

Group administration

Error reporting

Error logging

Error log testing

Role-based security

We use role-based security to limit system functions to particular classes of users. There are three user roles and any given user can be in any combination of the roles:

  1. Administrator
  2. Translator
  3. Standard

Administrators have access to administration functions. Non-administrators do not have access to administration functions. Translators have access to translation functions. Non-translators do not have access to translation functions. All users have access to the standard functions.

Technical specification

The technical specification describes how the project works.

Software layers

The GNUrc software is layered:

Layer Directory MVC role
modules /src/1-lib function libraries
objects /src/2-obj Model
Data Access Layer (DAL) /src/3-dal Model
Object/Relational Mapping (ORM) /src/4-orm Model
Business Object Model (BOM) /src/5-bom Model
views /src/6-view View
ajax /src/7-ajax Controller
controllers /web Controller

Each level depends on (up to) all of the previous levels. So controllers use views, BOM, ORM, DAL, objects, and modules. Views use BOM, ORM, DAL, objects, and modules. The BOM uses the ORM, DAL, objects, and modules. And so on. Generally controllers should call on the services of the BOM rather than calling on the services of the DAL directly, so the BOM encapsulates business logic and mediates it into the DAL. If higher layers can encapsulate functionality in lower layers that is a good thing to do.

Directory structure

The software has the following directory structure starting in the base:

/

The base directory is /path/to/your/gnurc.

  • .svn-ignore -- files for Subversion (svn) to ignore
    e.g.: $ svn propset svn:ignore -RF .svn-ignore .
  • config.example.php -- an example config file
  • config.php -- the production config file
    e.g.: $ cp config.example.php config.php; vim config.php

/dat

The /dat directory is for data files.

/etc

The /etc directory is for miscellaneous scripts.

/etc/dbscripts

The /etc/dbscripts directory is an svn:externals for the database scripts:

svn://svn.sv.gnu.org/remotecontrol/branches/development/dbscripts

/src

The /src directory is for most of the source code.

  • include.php -- the main include file for loading the GNUrc software components.
  • test.php -- the main include file for use by PHPUnit unit tests.

/src/1-lib

The /src/1-lib directory contains function modules.

/src/2-obj

The /src/2-obj directory contains PHP classes used by GNUrc that do not fit in another category.

/src/3-dal

The /src/3-dal directory contains data access layer facilities.

  • GrcDal.php -- the include file for the Data Access Layer; defaults to MySQL/PDO API.
/src/3-dal/mysql-pdo

The /src/3-dal/mysql-pdo directory contains data access layer facilities for the MySQL/PDO database connectivity.

/src/3-dal/*/feature

The /src/3-dal/*/feature directories contain DAL features.

/src/4-orm

/src/5-bom

/src/6-view

/src/7-ajax

The /src/7-ajax directory contains AJAX controllers.

/web

Managing errors

The error management subsystem is comprised of the /src/2-obj/GrcError.php class and the 'err' and 'Error' functions in /src/1-lib/01-api.php 01-api.php.

Errors are managed in to modes. First they are 'declared' and second they are 'raised'.

Declaring error numbers

To declare a possible error call the err()->define function. The first argument is the name of the error known as the error const. The error const has up to 6 parts separated by double-underscore:

  1. 'ERROR'
  2. type (e.g. 'LIB', 'OBJ', etc.)
  3. module/class (e.g. 'API', 'VALIDATION')
  4. function name
  5. variable name
  6. state (e.g. 'NOT_NULL', 'INVALID')

The second argument is the error message. The error messages will be translated if necessary and can include variables using the '%variable%' notation of the i18n subsystem.

Raising particular errors

After you have declared an error like this:

err()->define( 'ERROR__LIB__EXAMPLE', 'An error with %param% occurred.' );

you can raise it like this:

throw Error( ERROR__LIB__EXAMPLE, 'param', 'value', intl_context, previous_exception );

where intl_context is an i18n translation context and previous_exception is a previous exception if any.

Security features

In addition to role-based security we protect from XSRF and SQL-injection attacks.

XSRF protection

To prevent XSRF attacks we configure a session token that must be included in all HTTP POST submissions.

SQL-injection protection

To prevent SQL injection attacks we take care to escape inputs when building SQL strings and/or use parameters with our database API.

Web interface

admin-home.php

The admin-home.php

Notes

Notes for implementers

If you are interested in incorporating this software into your project, here's what you need to know:

Notes for developers

If you're looking to set up a development environment for this project here's what you need to know:

Tasks

TODO

Things to do, in rough order of priority:

  • Document system design
  • Generate task list
  • Allocate tasks to developers

Done

Stuff that's done. Latest stuff on top.

  • JE 2015-04-01: created project page