gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

README.md (31134B)


      1 [![HUGE, formerly "php-login" logo](_pictures/huge-logo.png)](http://www.php-login.net)
      2 
      3 # HUGE
      4 
      5 [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/panique/huge/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/panique/huge/?branch=master)
      6 [![Code Climate](https://codeclimate.com/github/panique/huge/badges/gpa.svg)](https://codeclimate.com/github/panique/huge)
      7 [![Travis CI](https://travis-ci.org/panique/huge.svg?branch=master)](https://travis-ci.org/panique/huge)
      8 [![Dependency Status](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010)
      9 
     10 Just a simple user authentication solution inside a super-simple framework skeleton that works out-of-the-box
     11 (and comes with an auto-installer), using the future-proof official bcrypt password hashing/salting implementation of 
     12 PHP 5.5+, plus some nice features that will speed up the time from idea to first usable prototype application 
     13 dramatically. Nothing more. This project has its focus on hardcore simplicity. Everything is as simple as possible, 
     14 made for smaller projects, typical agency work and quick pitch drafts. If you want to build massive corporate 
     15 applications with all the features modern frameworks have, then have a look at [Laravel](http://laravel.com), 
     16 [Symfony](http://symfony.com) or [Yii](http://www.yiiframework.com), but if you just want to quickly create something
     17 that just works, then this script might be interesting for you.
     18 
     19 HUGE's simple-as-possible architecture was inspired by several conference talks, slides and articles about huge 
     20 applications that - surprisingly and intentionally - go back to the basics of programming, using procedural programming, 
     21 static classes, extremely simple constructs, not-totally-DRY code etc. while keeping the code extremely readable 
     22 ([StackOverflow](http://www.dev-metal.com/architecture-stackoverflow/), Wikipedia, SoundCloud).
     23 
     24 Some interesting Buzzwords in this context: [KISS](http://en.wikipedia.org/wiki/KISS_principle), 
     25 [YAGNI](http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it), [Feature Creep](https://en.wikipedia.org/wiki/Feature_creep),
     26 [Minimum viable product](https://en.wikipedia.org/wiki/Minimum_viable_product).
     27 
     28 #### Current releases
     29 
     30 * stable [v3.1](https://github.com/panique/huge/releases/tag/v3.1),
     31 * public beta branch: [master-branch](https://github.com/panique/huge)
     32 * public in-development branch (please commit new code here): [develop](https://github.com/panique/huge/tree/develop)
     33 
     34 #### Quick-Index 
     35 
     36 + [Features](#features)
     37 + [Live-Demo](#live-demo)
     38 + [Support](#support)
     39 + [Follow the project](#follow)
     40 + [License](#license)
     41 + [Requirements](#requirements)
     42 + [Auto-Installation](#auto-installation)
     43     - [Auto-Installation in Vagrant](#auto-installation-vagrant) (also useful for 100% reproducible installation of HUGE)
     44     - [Auto-Installation in Ubuntu 14.04 LTS server](#auto-installation-ubuntu)
     45 + [Installation (Ubuntu 14.04 LTS)](#installation)
     46     - [Quick Installation](#quick-installation)
     47     - [Detailed Installation](#detailed-installation)
     48     - [NGINX setup](#nginx-setup)
     49 + [Documentation](#documentation)  
     50 + [Community-provided features & feature discussions](#community)
     51 + [Potential features for the future (or your forks)](#future)
     52 + [Why is there no support forum anymore ?](#why-no-support-forum)
     53 + [Zero tolerance for idiots, trolls and vandals](#zero-tolerance)
     54 + [Contribute](#contribute)
     55 + [Code-Quality scanner links](#code-quality)
     56 + [Report a bug](#bug-report)
     57 
     58 ### The History of HUGE
     59 
     60 Back in 2010/2011 there were no useful login solutions in the PHP world, at least not for non-experts. So I did the worst 
     61 mistake every young developer does: Trying to build something by myself without having any clue about security basics.
     62 What made it even worse was: The web was (and is) full of totally broken tutorials about building user authentication 
     63 systems, even the biggest companies in the world did this completely wrong (we are talking about SONY, LinkedIn and
     64 Adobe here), and also lots of major framework in all big programming languages (!) used totally outdated and insecure
     65 password saving technologies.
     66 
     67 However, in 2012 security expert [Anthony Ferrara](https://github.com/ircmaxell) published a [little PHP library](https://github.com/ircmaxell/password_compat),
     68 allowing extremely secure, modern and correct hashing of passwords in PHP 5.3 and 5.4, usable by every developer without any stress and without any knowledge
     69 about security internals. The script was so awesome that it was written into the core of PHP 5.5, it's the de-facto standard these days.
     70 
     71 When this came out I tried to use this naked library to build a fully working out-of-the-box login system for several private and commercial projects,
     72 and put the code on GitHub. Lots of people found this useful, contributed and bugfixed the project, made forks, smaller and larger versions.
     73 The result is this project.
     74  
     75 Please note: Now, in 2015, most major frameworks have excellent user authentication logic embedded by default. This was 
     76 not the case years ago. So, from today's perspective it might be smarter to chose Laravel, Yii or Symfony for serious
     77 projects. But feel free to try out HUGE, the auto-installer will spin up a fully working installation within minutes and
     78 without any configuration.
     79 
     80 And why the name "HUGE" ? It's a nice combination to 
     81 [TINY](https://github.com/panique/tiny), 
     82 [MINI](https://github.com/panique/mini) and 
     83 [MINI2](https://github.com/panique/mini2), some of my other older projects. :)
     84 
     85 ### Features <a name="features"></a>
     86 * built with the official PHP password hashing functions, fitting the most modern password hashing/salting web standards
     87 * proper security features, like CSRF blocking (via form tokens), encryption of cookie contents etc.
     88 * users can register, login, logout (with username, email, password)
     89 * password-forget / reset
     90 * remember-me (login via cookie)
     91 * account verification via mail
     92 * captcha
     93 * failed-login-throttling
     94 * user profiles
     95 * account upgrade / downgrade
     96 * simple user types (type 1, type 2, admin)
     97 * supports local avatars and remote Gravatars
     98 * supports native mail and SMTP sending (via PHPMailer and other tools)
     99 * uses PDO for database access for sure, has nice DatabaseFactory (in case your project goes big) 
    100 * uses URL rewriting ("beautiful URLs")
    101 * proper split of application and public files (requests only go into /public)
    102 * uses Composer to load external dependencies (PHPMailer, Captcha-Generator, etc.) for sure
    103 * fits PSR-0/1/2/4 coding guidelines
    104 * uses [Post-Redirect-Get pattern](https://en.wikipedia.org/wiki/Post/Redirect/Get) for nice application flow
    105 * masses of comments
    106 * is actively developed, maintained and bug-fixed
    107 
    108 ### Planned features
    109 
    110 * A real documentation (currently there's none, but the code is well commented)
    111   
    112 ### Live-Demo <a name="live-demo"></a>
    113 
    114 See a [live demo of older 3.0 version here](http://demo-huge.php-login.net) and [the server's phpinfo() here](http://demo-huge.php-login.net/info.php).
    115 
    116 ### Support the project <a name="support"></a>
    117 
    118 There is a lot of work behind this project. I might save you hundreds, maybe thousands of hours of work (calculate that
    119 in developer costs). So when you are earning money by using HUGE, be fair and give something back to open-source.
    120 HUGE is totally free to private and commercial use.
    121 
    122 [![Support via affiliate](_pictures/support-via-host1plus.png)](https://affiliates.host1plus.com/ref/devmetal/36f4d828.html)
    123 
    124 Support the project by renting a server at [Host1Plus](https://affiliates.host1plus.com/ref/devmetal/36f4d828.html) or
    125 or [DigitalOcean](https://www.digitalocean.com/?refcode=40d978532a20). Thanks! :)
    126 
    127 Also feel free to contribute to this project.
    128 
    129 ### License <a name="license"></a>
    130 
    131 Licensed under [MIT](http://www.opensource.org/licenses/mit-license.php). 
    132 Totally free for private or commercial projects.
    133 
    134 ### Requirements <a name="requirements"></a>
    135 
    136 Make sure you know the basics of object-oriented programming and MVC, are able to use the command line and have
    137 used Composer before. This script is not for beginners.
    138 
    139 * **PHP 5.5+**
    140 * **MySQL 5** database (better use versions 5.5+ as very old versions have a [PDO injection bug](http://stackoverflow.com/q/134099/1114320)
    141 * installed PHP extensions: pdo, gd, openssl (the install guideline shows how to do)
    142 * installed tools on your server: git, curl, composer (the install guideline shows how to do)
    143 * for professional mail sending: an SMTP account (I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal))
    144 * activated mod_rewrite on your server (the install guideline shows how to do)
    145 
    146 ### Auto-Installations <a name="auto-installation"></a>
    147 
    148 Yo, fully automatic. Why ? Because I always hated it to spend days trying to find out how to install a thing.
    149 This will save you masses of time and nerves. Donate a coffee if you like it.
    150 
    151 #### Auto-Installation (in Vagrant) <a name="auto-installation-vagrant"></a>
    152 
    153 If you are using Vagrant for your development, then simply 
    154 
    155 1. Add the official Ubuntu 14.04 LTS box to your Vagrant: `vagrant box add ubuntu/trusty64`
    156 2. Move *Vagrantfile* and *bootstrap.sh* (from *_one-click-installation* folder) to a folder where you want to initialize your project.
    157 3. Do `vagrant up` in that folder.
    158 
    159 5 minutes later you'll have a fully installed HUGE inside Ubuntu 14.04 LTS. The full code will be auto-synced with
    160 the current folder. MySQL root password and the PHPMyAdmin root password are set to *12345678*. By default
    161 192.168.33.111 is the IP of your new box.
    162 
    163 #### Auto-Installation in a naked Ubuntu 14.04 LTS server <a name="auto-installation-ubuntu"></a>
    164 
    165 Extremely simple installation in a fresh and naked typical Ubuntu 14.04 LTS server:
    166 
    167 Download the installer script
    168 ```bash
    169 wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh
    170 ```
    171 
    172 Make it executable
    173 ```bash
    174 chmod +x bootstrap.sh
    175 ```
    176 
    177 Run it! Give it some minutes to perform all the tasks. And yes, you can thank me later :)
    178 ```bash
    179 sudo ./bootstrap.sh
    180 ```
    181 ### Installation <a name="installation"></a>
    182 
    183 This script is very fresh, so the install guidelines are not perfect yet. 
    184 
    185 #### Quick guide: <a name="quick-installation"></a>
    186 
    187 0. Make sure you have Apache, PHP, MySQL installed. [Tutorial](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). 
    188 1. Clone the repo to a folder on your server
    189 2. Activate mod_rewrite, route all traffic to application's /public folder. [Tutorial](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/).
    190 3. Edit application/config: Set your database credentials
    191 4. Execute SQL statements from application/_installation to setup database tables
    192 5. [Install Composer](http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/),
    193    run `Composer install` on application's root folder to install dependencies
    194 6. Make avatar folder (application/public/avatars) writable
    195 7. For proper email usage: Set SMTP credentials in config file, set EMAIL_USE_SMTP to true
    196 
    197 "Email does not work" ? See the troubleshooting below. TODO
    198 
    199 #### Detailed guide (Ubuntu 14.04 LTS): <a name="detailed-installation"></a>
    200 
    201 This is just a quick guideline for easy setup of a development environment!
    202 
    203 Make sure you have Apache, PHP 5.5+ and MySQL installed. [Tutorial here](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). 
    204 Nginx will work for sure too, but no install guidelines are available yet. 
    205 
    206 Edit vhost to make clean URLs possible and route all traffic to /public folder of your project:
    207 ```bash
    208 sudo nano /etc/apache2/sites-available/000-default.conf
    209 ```
    210 
    211 and make the file look like
    212 ```
    213 <VirtualHost *:80>
    214     DocumentRoot "/var/www/html/public"
    215     <Directory "/var/www/html/public">
    216         AllowOverride All
    217         Require all granted
    218     </Directory>
    219 </VirtualHost>
    220 ```
    221 
    222 Enable mod_rewrite and restart apache.
    223 ```bash
    224 sudo a2enmod rewrite
    225 service apache2 restart
    226 ```
    227 
    228 Install curl (needed to use git), openssl (needed to clone from GitHub, as github is https only),
    229 PHP GD, the graphic lib (we create captchas and avatars), and git.
    230 ```bash
    231 sudo apt-get -y install curl
    232 sudo apt-get -y install php5-curl
    233 sudo apt-get -y install openssl
    234 sudo apt-get -y install php5-gd
    235 sudo apt-get -y install git
    236 ```
    237 
    238 git clone HUGE
    239 ```bash
    240 sudo git clone https://github.com/panique/huge "/var/www/html"
    241 ```
    242 
    243 Install Composer
    244 ```bash
    245 curl -s https://getcomposer.org/installer | php
    246 mv composer.phar /usr/local/bin/composer
    247 ```
    248 
    249 Go to project folder, load Composer packages (--dev is optional, you know the deal)
    250 ```bash
    251 cd /var/www/html
    252 composer install --dev
    253 ```
    254 
    255 Execute the SQL statements. Via phpmyadmin or via the command line for example. 12345678 is the example password.
    256 Note that this is written without a space.
    257 ```bash
    258 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/01-create-database.sql"
    259 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/02-create-table-users.sql"
    260 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/03-create-table-notes.sql"
    261 ```
    262 
    263 Make avatar folder writable
    264 ```bash
    265 sudo chmod 0777 -R "/var/www/html/public/avatars"
    266 ```
    267 
    268 Remove Apache's default demo file
    269 ```bash
    270 sudo rm "/var/www/html/index.html"
    271 ```
    272 
    273 Edit the application's config in application/config.development.php and put in your database credentials.
    274 
    275 Last part (not needed for a first test): Set your SMTP credentials in the same file and set EMAIL_USE_SMTP to true, so
    276 you can send proper emails. It's highly recommended to use SMTP for mail sending! Native sending via PHP's mail() will
    277 not work in nearly every case (spam blocking). I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal).
    278 
    279 Then check your server's IP / domain. Everything should work fine.
    280 
    281 #### NGINX setup: <a name="nginx-setup"></a>
    282 
    283 This is an untested NGINX setup. Please comment [on the ticket](https://github.com/panique/huge/issues/622) if you see 
    284 issues.
    285  
    286 ```
    287 server {
    288     # your listening port
    289     listen 80;
    290 
    291     # your server name
    292     server_name example.com;
    293 
    294     # your path to access log files
    295     access_log /srv/www/example.com/logs/access.log;
    296     error_log /srv/www/example.com/logs/error.log;
    297 
    298     # your root
    299     root /srv/www/example.com/public_html;
    300 
    301     # huge
    302     index index.php;
    303 
    304     # huge
    305     location / {
    306         try_files $uri /index.php?url=$uri&$args;
    307     }
    308 
    309     # your PHP config
    310     location ~ \.php$ {
    311         try_files $uri  = 401;
    312         include /etc/nginx/fastcgi_params;
    313         fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
    314         fastcgi_index index.php;
    315         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    316     }
    317 }
    318 ```
    319 
    320 #### Testing with demo users
    321 
    322 By default there are two demo users, a normal user and an admin user. For more info on that please have a look on the
    323 user role part of the small documentation block inside this readme.
    324  
    325 Normal user: Username is `demo2`, password is `12345678`. The user is already activated.
    326 Admin user (can delete and suspend other users): Username is `demo`, password is `12345678`. The user is already activated.
    327 
    328 ### What the hell are .travis.yml, .scrutinizer.yml etc. ?
    329 
    330 There are several files in the root folder of the project that might be irritating:
    331 
    332  - *.htaccess* (optionally) routes all traffic to /public/index.php! If you installed this project correctly, then this
    333    file is not necessary, but as lots of people have problems setting up the vhost correctly, .htaccess it still there
    334    to increase security, even on partly-broken-installations.
    335  - *.scrutinizer.yml* (can be deleted): Configs for the external code quality analyzer Scrutinizer, just used here on
    336    GitHub, you don't need this for your project.
    337  - *.travis.yml* (can be deleted): Same like above. Travis is an external service that creates installations of this
    338    repo after each code change to make sure everything runs fine. Also runs the unit tests. You don't need this inside
    339    your project.
    340  - *composer.json* (important): You should know what this does. ;) This file says what external dependencies are used.  
    341  - *travis-ci-apache* (can be deleted): Config file for Travis, see above, so Travis knows how to setup the Apache.    
    342     
    343 *README* and *CHANGELOG* are self-explaining.
    344 
    345 ### Documentation <a name="documentation"></a>
    346 
    347 A real documentation is in the making. Until then, please have a look at the code and use your IDE's code completion 
    348 features to get an idea how things work, it's quite obvious when you look at the controller files, the model files and
    349 how data is shown in the view files. A big sorry that there's no documentation yet, but time is rare :)
    350  
    351  - TODO: Full documentation
    352  - TODO: Basic examples on how to do things
    353  
    354 #### The different user roles
    355 
    356 Currently there are two types of users: Normal users and admins. There are exactly the same, but...
    357  
    358 1. Admin users can delete and suspend other users, they have an additional button "admin" in the navigation. Admin users
    359 have a value of `7` inside the database table field `user_account_type`. They cannot upgrade or downgrade their accounts 
    360 (as this wouldn't make sense).
    361 
    362 2. Normal users don't have admin features for sure. But they can upgrade and downgrade their accounts (try it out via
    363 /login/changeUserRole), which is basically a super-simple implementation of the basic-user / premium-user concept. 
    364 Normal users have a value of `1` or `2` inside the database table field `user_account_type`. By default all new 
    365 registered users are normal users with user role 1 for sure.
    366 
    367 See the "Testing with demo users" section of this readme for more info.
    368 
    369 #### An introduction into the CSRF features
    370  
    371 To prevent [CSRF attacks](https://en.wikipedia.org/wiki/Cross-site_request_forgery), HUGE does this in the most common 
    372 way, by using a security *token* when the user submits critical forms. This means: When PHP renders a form for the user, 
    373 the application puts a "random string" inside the form (as a hidden input field), generated via Csrf::makeToken() 
    374 (application/core/Csrf.php), which also saves this token to the session. When the form is submitted, the application 
    375 checks if the POST request contains exactly the form token that is inside the session.
    376   
    377 This CSRF prevention feature is currently implemented on the login form process (see *application/view/login/index.php*)
    378 and user name change form process (see *application/view/login/editUsername.php*), most other forms are not security-
    379 critical and should stay as simple as possible.
    380 
    381 A big thanks to OmarElGabry for implementing this!
    382 
    383 #### Troubleshooting & Glitches
    384 
    385 * In 3.0 and 3.1 a user could log into the application from different devices / browsers / locations. This was intended
    386   behaviour as this is standard in most web applications these days. In 3.2 still feature is "missing" by default, a 
    387   user will only be able to log in from one browser at the same time. This is a security improvement, but for sure not 
    388   optimal for many developers. The plan is to implement a config switch that will allow / disallow logins from multiple 
    389   browsers.
    390 * Using this on a sub-domain ? You might get problems with the cookies in IE11. Fix this by replacing "/" with "./" of 
    391   the cookie location COOKIE_PATH inside application/config/config.xxx.php! 
    392   Check [ticket #733](https://github.com/panique/huge/issues/733) for more info. Thanks to jahbiuabft for figuring this
    393   out. Update: There's another ticket focusing on the same issue: [ticket #681](https://github.com/panique/huge/issues/681)
    394  
    395 ### Community-provided features & feature discussions <a name="community"></a>
    396 
    397 There are some awesome features or feature ideas build by awesome people, but these features are too special-interest
    398 to go into the main version of HUGE, but have a look into these tickets if you are interested:
    399 
    400  - [Caching system](https://github.com/panique/huge/issues/643)
    401  - [ReCaptcha as captcha](https://github.com/panique/huge/issues/665)
    402  - [Internationalization feature](https://github.com/panique/huge/issues/582)
    403  - [Using controller A inside controller B](https://github.com/panique/huge/issues/706)
    404  - [HTML mails](https://github.com/panique/huge/issues/738)
    405  
    406 ### Future of the project: As simple as possible! <a name="future"></a>
    407  
    408 The idea of this project was to provide a super-simple barebone application with a full user authentication
    409 system inside. For future development it might be cool to avoid feature hell and overbloated code, so please let's keep
    410 this project simple, clean and minimal with these few "rules" (and more on this inside this ticket: 
    411 [Keep the project as simple as possible](https://github.com/panique/huge/issues/664).): 
    412 
    413 1. Reduce features to the bare minimum.
    414 2. Don't implement features that are not needed by most users.
    415 3. Only build everything for the most common use case (like MySQL, not PostGre, NoSQL etc).
    416  
    417 #### List of feature ideas
    418 
    419 Open-source is a great thing, and projects live from community-contributed feature for sure. As this project is highly
    420 security-related and mainly just a free-time one-man show, new features mean a lot of work, reviewing, testing, 
    421 corrections, and making sure it runs perfectly in every possible scenario. As I simply don't have the time to do this, 
    422 I would kindly ask you **not** to commit new features when they are not really basic, very small and well-written,
    423 and if you miss a feature, then please try to write this on your own and commit it to the project.
    424 
    425 To avoid unnecessary work for all of us I would kindly recommend everybody to use HUGE for simple project that only
    426 need the features that already exist, and if you really need a RESTful architecture, migrations, routing, 2FA etc,
    427 then it's easier, cleaner and faster to simply use Laravel, Symfony or Zend.
    428 
    429 However, here are the community-suggested possible features, taken from lots of tickets. Feel free to implement them
    430 into your forks of the project: 
    431 
    432 * OAuth2 implementation (let your users create accounts and login via 3rd party auth, like Facebook, Twitter, GitHub, 
    433   etc). As this is a lot of work and would make the project much more complicated it might make sense to do this in a 
    434   fork or totally skip it. (see [Ticket #528](https://github.com/panique/huge/issues/528))
    435 * Router (map all URLs to according controller-methods inside one file), [Ticket 727](https://github.com/panique/huge/issues/727)
    436 * RESTful architecture (see [ticket #488](https://github.com/panique/huge/issues/488) for discussion)
    437 * Horizontal MySQL scaling (see [ticket #423](https://github.com/panique/huge/issues/423) for discussion)
    438 * Modules / middleware
    439 * Logging
    440 * Two-Factor-Authentication (see [ticket #732](https://github.com/panique/huge/issues/732))
    441 * Controller-less URLs (see [ticket #704](https://github.com/panique/huge/issues/704))
    442 * Email-re-validation after email change (see [ticket #705](https://github.com/panique/huge/issues/705))
    443 * Connect to multiple databases (see [ticket #702](https://github.com/panique/huge/issues/702))
    444 * A deeper user role system (see [ticket #701](https://github.com/panique/huge/issues/701), 
    445 [pull-request #691](https://github.com/panique/huge/pull/691)), 
    446 [ticket #603](https://github.com/panique/huge/issues/603)
    447 
    448 ### Why is there no support forum (anymore) ? <a name="why-no-support-forum"></a>
    449 
    450 There were two (!) support forums for v1 and v2 of this project (HUGE is v3), and both were vandalized by people who
    451 didn't even read the readme and / or the install guidelines. Most asked question was "script does not work plz help"
    452 without giving any useful information (like code or server setup or even the version used). While I'm writing these 
    453 lines somebody just asked via Twitter "how to install without Composer". You know what I mean :) - 99% of the questions 
    454 were not necessary if the people would had read the guidelines, do a minimal research on their own or would stop making 
    455 things so unnecessarily complicated. And even when writing detailed answers most of them still messed it up, resulting 
    456 in rants and complaints (for free support for a free software!). It was just frustrating to deal with this every day, 
    457 especially when people take it for totally granted that *it's the duty* of open-source developers to give detailed, 
    458 free and personal support for every "plz help"-request.
    459  
    460 So I decided to completely stop any free support. For serious questions about real problems inside the script please
    461 use the GitHub issues feature.
    462 
    463 ### Zero tolerance for idiots, trolls and vandals! <a name="zero-tolerance"></a>
    464 
    465 Harsh words, but as basically every public internet project gets harassed, vandalized and trolled these days by very 
    466 strange people it's necessary: Some simple rules. 
    467 
    468 1. Respect that this is just a simple script written by unpaid volunteers in their free-time. 
    469    This is NOT business-software you've bought for $10.000.
    470    There's no reason to complain (!) about free open-source software. The attitude against free software
    471    is really frustrating these days, people take everything for granted without realizing the work behind it, and the
    472    fact that they get serious software totally for free, saving thousands of dollars. If you don't like it, then don't 
    473    use it. If you want a feature, try to take part in the process, maybe even build it by yourself and add it to the 
    474    project! Be nice and respectful. Constructive criticism is for sure always welcome!
    475    
    476 2. Don't bash, don't hate, don't spam, don't vandalize. Please don't ask for personal free support, don't ask if 
    477    somebody could do your work for you. Before you ask something, make sure you've read the README, followed every 
    478    tutorial, double-checked the code and tried to solve the problem by yourself.
    479 
    480 Trolls and very annoying people will get a permanent ban / block. GitHub has a very powerful anti-abuse team.
    481 
    482 ### Contribute <a name="contribute"></a>
    483 
    484 Please commit only in *develop* branch. The *master* branch will always contain the stable version.
    485 
    486 ### Code-Quality scanner links <a name="code-quality"></a>
    487 
    488 [Scrutinizer (master branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=master),
    489 [Scrutinizer (develop branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=develop),
    490 [Code Climate](https://codeclimate.com/github/panique/huge),
    491 [Codacy](https://www.codacy.com/public/panique/phplogin/dashboard?bid=789836), 
    492 [SensioLabs Insight](https://insight.sensiolabs.com/projects/d4f4e3c0-1445-4245-8cb2-d75026c11fa7/analyses/2).
    493 
    494 ### Found a bug (Responsible Disclosure) ? <a name="bug-report"></a>
    495 
    496 Due to the possible consequences when publishing a bug on a public open-source project I'd kindly ask you to send really
    497 big bugs to my email address, not posting this here. If the bug is not interesting for attackers: Feel free to create
    498 an normal GitHub issue.
    499 
    500 ### Current and further development
    501 
    502 See active issues and requested features here:
    503 https://github.com/panique/huge/issues?state=open
    504 
    505 ### Why you should use a favicon.ico in your project :)
    506 
    507 Interesting issue: When a user hits your website, the user's browser will also request one or more (!) favicons 
    508 (different sizes). If these static files don't exist, your application will start to generate a 404 response and a 404 
    509 page for each file. This wastes a lot of server power and is also useless, therefore make sure you always have favicons
    510 or handle this from Apache/nginx level.
    511 
    512 HUGE tries to handle this by sending an empty image in the head of the view/_templates/header.php !
    513 
    514 More inside this ticket: [Return proper 404 for missing favicon.ico, missing images etc.](https://github.com/panique/huge/issues/530)
    515 
    516 More here on Stackflow: [How to prevent favicon.ico requests?](http://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests),
    517 [Isn't it silly that a tiny favicon requires yet another HTTP request? How to make favicon go into a sprite?](http://stackoverflow.com/questions/5199902/isnt-it-silly-that-a-tiny-favicon-requires-yet-another-http-request-how-to-mak?lq=1).
    518 
    519 ### Useful links
    520 
    521 - [How to use PDO](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)
    522 - [A short guideline on how to use the PHP 5.5 password hashing functions and its PHP 5.3 & 5.4 implementations](http://www.dev-metal.com/use-php-5-5-password-hashing-functions/)
    523 - [How to setup latest version of PHP 5.5 on Ubuntu 12.04 LTS](http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/)
    524 - [How to setup latest version of PHP 5.5 on Debian Wheezy 7.0/7.1 (and how to fix the GPG key error)](http://www.dev-metal.com/setup-latest-version-php-5-5-debian-wheezy-7-07-1-fix-gpg-key-error/)
    525 - [Notes on password & hashing salting in upcoming PHP versions (PHP 5.5.x & 5.6 etc.)](https://github.com/panique/huge/wiki/Notes-on-password-&-hashing-salting-in-upcoming-PHP-versions-%28PHP-5.5.x-&-5.6-etc.%29)
    526 - [Some basic "benchmarks" of all PHP hash/salt algorithms](https://github.com/panique/huge/wiki/Which-hashing-&-salting-algorithm-should-be-used-%3F)
    527 - [How to prevent PHP sessions being shared between different apache vhosts / different applications](http://www.dev-metal.com/prevent-php-sessions-shared-different-apache-vhosts-different-applications/)
    528 
    529 ## Interesting links regarding user authentication and application security
    530 
    531 - [interesting article about password resets (by Troy Hunt, security expert)](http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html)
    532 - Password-Free Email Logins: [Ticket & discussion](https://github.com/panique/huge/issues/674), [article](http://techcrunch.com/2015/06/30/blogging-site-medium-rolls-out-password-free-email-logins/?ref=webdesignernews.com)
    533 - Logging in via QR code: [Ticket & discussion](https://github.com/panique/huge/issues/290), [english article](https://www.grc.com/sqrl/sqrl.htm), 
    534   [german article](http://www.phpgangsta.de/sesam-oeffne-dich-sicher-einloggen-im-internetcafe), 
    535   [repo](https://github.com/PHPGangsta/Sesame), [live-demo](http://sesame.phpgangsta.de/). Big thanks to *PHPGangsta* for writing this!
    536 
    537 ### Side-facts
    538 
    539 1. Weird! When I renamed php-login to HUGE (to get rid off the too generic project name and to make it fitting nicely
    540    to MINI, TINY and MINI2, my other projects) I had a research if the word "huge" is already used in the php world for 
    541    sure. Nothing came up. Then, weeks later, I stumbled upon this: https://github.com/ffremont/HugeRest
    542    I nice little framework in PHP, but it has only 1 star on Github, so it's obviously not so widely used. Looks very 
    543    professional, too. Hmm.... The guy behind published the entire readme etc. in pure french (!), so it's hard to use 
    544    for non-french-speaking people. However, I'm not related to him in any way, this is pure coincidence.
    545    
    546 ### My blog
    547 
    548 I'm also blogging at **[Dev Metal](http://www.dev-metal.com)**, have a visit if you like. Mostly PHP stuff, conference 
    549 talks and general IT issues.