Create gh-pages branch via GitHub
This commit is contained in:
commit
a33ea22bb2
12 changed files with 1612 additions and 0 deletions
BIN
images/body-bg.jpg
Normal file
BIN
images/body-bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
images/download-button.png
Normal file
BIN
images/download-button.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
BIN
images/github-button.png
Normal file
BIN
images/github-button.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
images/header-bg.jpg
Normal file
BIN
images/header-bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
BIN
images/highlight-bg.jpg
Normal file
BIN
images/highlight-bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
images/sidebar-bg.jpg
Normal file
BIN
images/sidebar-bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
372
index.html
Normal file
372
index.html
Normal file
|
@ -0,0 +1,372 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8'>
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link href='https://fonts.googleapis.com/css?family=Architects+Daughter' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print">
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<title>Webmum by ohartl</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<div class="inner">
|
||||
<h1>Webmum</h1>
|
||||
<h2>Web Mailsystem User Manager</h2>
|
||||
<a href="https://github.com/ohartl/webmum" class="button"><small>View project on</small> GitHub</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="content-wrapper">
|
||||
<div class="inner clearfix">
|
||||
<section id="main-content">
|
||||
<h1>
|
||||
<a id="webmum---web-mailserver-user-manager" class="anchor" href="#webmum---web-mailserver-user-manager" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>WebMUM - Web Mailserver User Manager</h1>
|
||||
|
||||
<p><a href="https://travis-ci.org/ohartl/webmum"><img src="https://travis-ci.org/ohartl/webmum.svg" alt="Build Status"></a></p>
|
||||
|
||||
<p><strong><em>WebMUM is not compatible with the <a href="https://thomas-leister.de/allgemein/sicherer-mailserver-dovecot-postfix-virtuellen-benutzern-mysql-ubuntu-server-xenial/">new Mailserver-HowTo</a>!,</em></strong> but we will try to implement the changes for the release of version 1.0.0.</p>
|
||||
|
||||
<p>WebMUM is a web frontend based on PHP which helps you to manage e-mail server via MySQL. This software is licensed under the MIT license.</p>
|
||||
|
||||
<p>This project is currently developed and managed by <a href="https://github.com/ohartl">ohartl</a> and together with the <a href="https://github.com/ohartl/webmum/graphs/contributors">contributes</a>.
|
||||
Founder of this project is <a href="https://github.com/ThomasLeister">ThomasLeister</a>, a passionate <a href="https://thomas-leister.de/">blogger</a> specialized topics like linux, open-source, servers etc.</p>
|
||||
|
||||
<p>Feel free to send in issues and pull requests, your support for this project is much appreciated!</p>
|
||||
|
||||
<h2>
|
||||
<a id="installation" class="anchor" href="#installation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Installation</h2>
|
||||
|
||||
<p>Clone the WebMUM Repository to your webserver's virtual host root directory:</p>
|
||||
|
||||
<div class="highlight highlight-source-shell"><pre>git clone https://github.com/ohartl/webmum</pre></div>
|
||||
|
||||
<p>A update / upgrade guide can be found <a href="#update--upgrade-webmum">here</a>.</p>
|
||||
|
||||
<h3>
|
||||
<a id="webserver" class="anchor" href="#webserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Webserver</h3>
|
||||
|
||||
<p>Now configure your webserver. URL rewriting to index.php is required.</p>
|
||||
|
||||
<h4>
|
||||
<a id="nginx" class="anchor" href="#nginx" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Nginx</h4>
|
||||
|
||||
<p>Nginx config examples following, but you still need to change domain and path in config as explained <a href="#paths">here</a>.</p>
|
||||
|
||||
<p>With subdirectory <code>webmum/</code> in URL (e.g. <code>http://mydomain.tld/webmum/</code>):</p>
|
||||
|
||||
<div class="highlight highlight-source-nginx"><pre><span class="pl-k">server</span> {
|
||||
<span class="pl-k">listen</span> <span class="pl-s">80</span>;
|
||||
<span class="pl-k">server_name</span> mydomain.tld;
|
||||
|
||||
<span class="pl-k">root</span> /var/www;
|
||||
<span class="pl-k">index</span> index.html index.php;
|
||||
|
||||
<span class="pl-k">location</span> ~ <span class="pl-sr">\.php$ </span>{
|
||||
<span class="pl-k">fastcgi_pass</span> 127.0.0.1:9000;
|
||||
<span class="pl-k">fastcgi_index</span> index.php;
|
||||
<span class="pl-k">fastcgi_param</span> SCRIPT_FILENAME <span class="pl-smi">$document_root$fastcgi_script_name</span>;
|
||||
<span class="pl-k">include</span> fastcgi_params;
|
||||
}
|
||||
|
||||
<span class="pl-k">location</span> <span class="pl-en">/webmum </span>{
|
||||
<span class="pl-k">try_files</span> <span class="pl-smi">$uri</span> <span class="pl-smi">$uri</span>/ /webmum/index.php?<span class="pl-smi">$args</span>;
|
||||
}
|
||||
|
||||
<span class="pl-c"># protect the codebase by denying direct access</span>
|
||||
<span class="pl-k">location</span> ^~ <span class="pl-sr">/webmum/include/php </span>{
|
||||
<span class="pl-k">deny</span><span class="pl-c1"> all</span>;
|
||||
<span class="pl-c1">return</span> <span class="pl-s">403</span>;
|
||||
}
|
||||
<span class="pl-k">location</span> ^~ <span class="pl-sr">/webmum/config </span>{
|
||||
<span class="pl-k">deny</span><span class="pl-c1"> all</span>;
|
||||
<span class="pl-c1">return</span> <span class="pl-s">403</span>;
|
||||
}
|
||||
}</pre></div>
|
||||
|
||||
<p>Without subdirectory in URL (e.g. <code>http://webmum.mydomain.tld/</code>):</p>
|
||||
|
||||
<div class="highlight highlight-source-nginx"><pre><span class="pl-k">server</span> {
|
||||
<span class="pl-k">listen</span> <span class="pl-s">80</span>;
|
||||
<span class="pl-k">server_name</span> webmum.mydomain.tld;
|
||||
|
||||
<span class="pl-k">root</span> /var/www/webmum;
|
||||
<span class="pl-k">index</span> index.html index.php;
|
||||
|
||||
<span class="pl-k">location</span> ~ <span class="pl-sr">\.php$ </span>{
|
||||
<span class="pl-k">fastcgi_pass</span> 127.0.0.1:9000;
|
||||
<span class="pl-k">fastcgi_index</span> index.php;
|
||||
<span class="pl-k">fastcgi_param</span> SCRIPT_FILENAME <span class="pl-smi">$document_root$fastcgi_script_name</span>;
|
||||
<span class="pl-k">include</span> fastcgi_params;
|
||||
}
|
||||
|
||||
<span class="pl-k">location</span> <span class="pl-en">/ </span>{
|
||||
<span class="pl-k">try_files</span> <span class="pl-smi">$uri</span> <span class="pl-smi">$uri</span>/ /index.php?<span class="pl-smi">$args</span>;
|
||||
}
|
||||
|
||||
<span class="pl-c"># protect the codebase by denying direct access</span>
|
||||
<span class="pl-k">location</span> ^~ <span class="pl-sr">/include/php </span>{
|
||||
<span class="pl-k">deny</span><span class="pl-c1"> all</span>;
|
||||
<span class="pl-c1">return</span> <span class="pl-s">403</span>;
|
||||
}
|
||||
<span class="pl-k">location</span> ^~ <span class="pl-sr">/config </span>{
|
||||
<span class="pl-k">deny</span><span class="pl-c1"> all</span>;
|
||||
<span class="pl-c1">return</span> <span class="pl-s">403</span>;
|
||||
}
|
||||
}</pre></div>
|
||||
|
||||
<h4>
|
||||
<a id="apache" class="anchor" href="#apache" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Apache</h4>
|
||||
|
||||
<p>Apache config examples following, but you still need to change domain and path in config as explained <a href="#paths">here</a>.</p>
|
||||
|
||||
<p>Please note: mod_rewrite must be enabled for URL rewriting:</p>
|
||||
|
||||
<div class="highlight highlight-source-shell"><pre>sudo a2enmod rewrite</pre></div>
|
||||
|
||||
<p>With subdirectory <code>webmum/</code> in URL (e.g. <code>http://mydomain.tld/webmum/</code>):</p>
|
||||
|
||||
<div class="highlight highlight-source-apache-config"><pre><<span class="pl-ent">VirtualHost</span> *:80>
|
||||
<span class="pl-c1">ServerName</span> domain.tld
|
||||
<span class="pl-c1">DocumentRoot</span> /var/www/domain.tld
|
||||
|
||||
<span class="pl-c1">RewriteEngine</span> on
|
||||
<span class="pl-c1">RewriteCond</span> <span class="pl-c1">%{REQUEST_FILENAME}</span> <span class="pl-s">!-d</span>
|
||||
<span class="pl-c1">RewriteCond</span> <span class="pl-c1">%{REQUEST_FILENAME}</span> <span class="pl-s">!-f</span>
|
||||
<span class="pl-c1">RewriteRule</span> <span class="pl-sr">^\/webmum/(.*)\.css$</span> <span class="pl-s">/webmum/$1.css</span> <span class="pl-sr">[L]</span>
|
||||
<span class="pl-c1">RewriteRule</span> <span class="pl-sr">^\/webmum/(.*)$</span> <span class="pl-s">/webmum/index.php</span> <span class="pl-sr">[L,QSA]</span>
|
||||
</<span class="pl-ent">VirtualHost</span>></pre></div>
|
||||
|
||||
<p>Without subdirectory in URL (e.g. <code>http://webmum.mydomain.tld/</code>):</p>
|
||||
|
||||
<div class="highlight highlight-source-apache-config"><pre><<span class="pl-ent">VirtualHost</span> *:80>
|
||||
<span class="pl-c1">ServerName</span> webmum.domain.tld
|
||||
<span class="pl-c1">DocumentRoot</span> /var/www/domain.tld/webmum
|
||||
|
||||
<span class="pl-c1">RewriteEngine</span> on
|
||||
<span class="pl-c1">RewriteCond</span> <span class="pl-c1">%{REQUEST_FILENAME}</span> <span class="pl-s">!-d</span>
|
||||
<span class="pl-c1">RewriteCond</span> <span class="pl-c1">%{REQUEST_FILENAME}</span> <span class="pl-s">!-f</span>
|
||||
<span class="pl-c1">RewriteRule</span> <span class="pl-sr">(.*)\.css$</span> <span class="pl-s">$1.css</span> <span class="pl-sr">[L]</span>
|
||||
<span class="pl-c1">RewriteRule</span> <span class="pl-sr">^(.*)$</span> <span class="pl-s">/index.php</span> <span class="pl-sr">[L,QSA]</span>
|
||||
</<span class="pl-ent">VirtualHost</span>></pre></div>
|
||||
|
||||
<p>Access to the codebase is denied with a <code>.htaccess</code> file, that can be found in <code>/include/php</code>.</p>
|
||||
|
||||
<h2>
|
||||
<a id="webmum-configuration" class="anchor" href="#webmum-configuration" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>WebMUM Configuration</h2>
|
||||
|
||||
<p>Configure WebMUM via the configuration file at <code>config/config.inc.php</code>.</p>
|
||||
|
||||
<h3>
|
||||
<a id="mysql" class="anchor" href="#mysql" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>MySQL</h3>
|
||||
|
||||
<p>At first the database access has to be configured under the config key <code>mysql</code>.</p>
|
||||
|
||||
<p>Check if you've got the same database schema as configured in the config key <code>schema</code>.</p>
|
||||
|
||||
<h3>
|
||||
<a id="mailbox-limit-optional" class="anchor" href="#mailbox-limit-optional" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Mailbox limit (Optional)</h3>
|
||||
|
||||
<p>If you want to use your "mailbox_limit" column to limit the size of your users' mailboxes, just enable mailbox limit in the options.</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>enable_mailbox_limits<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<p>WebMUM will then show a new field "Mailbox limit" in the frontend.</p>
|
||||
|
||||
<h3>
|
||||
<a id="multiple-source-redirect-support-optional" class="anchor" href="#multiple-source-redirect-support-optional" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Multiple source redirect support (Optional)</h3>
|
||||
|
||||
<p>As mailservers can only process a single source address for redirects the database table for aliases / redirects can only hold a single source address in a row.
|
||||
WebMum will, if you enabled the multiple source redirect support, do some magic so there is only a single address in a row even though multiple addresses where entered.
|
||||
To make this work another column in the database table is required, which holds an identifier for the list of source addresses, so they can be edited like normal redirects.</p>
|
||||
|
||||
<p>By default you can only redirect a single address to a single or multiple destinations.
|
||||
If you want to enable support for redirecting multiple source addresses to a destination, just enable it in the options:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>enable_multi_source_redirects<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<p>And add the following column to your database table for aliases / redirects:</p>
|
||||
|
||||
<div class="highlight highlight-source-sql"><pre><span class="pl-k">ALTER</span> <span class="pl-k">TABLE</span> <span class="pl-s"><span class="pl-pds">`</span>aliases<span class="pl-pds">`</span></span> ADD COLUMN <span class="pl-s"><span class="pl-pds">`</span>multi_source<span class="pl-pds">`</span></span> <span class="pl-k">VARCHAR</span>(<span class="pl-c1">32</span>) <span class="pl-k">NULL</span> DEFAULT <span class="pl-k">NULL</span>;</pre></div>
|
||||
|
||||
<p>WebMUM will then show a larger field for source addresses in the frontend and you can not list emails in source field.</p>
|
||||
|
||||
<h3>
|
||||
<a id="admin-domain-limits-optional" class="anchor" href="#admin-domain-limits-optional" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Admin domain limits (Optional)</h3>
|
||||
|
||||
<p>If you share your mailserver with others, host their domains and they should be able to manage their domains, but not all domains on that mailserver then this is the right option for you.
|
||||
You have to add that user to the <code>admins</code> array in your configuration and enable admin domain limits in the options:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>enable_admin_domain_limits<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<p>also you have to make an entry in the <code>admin_domain_limits</code> array, for example <code>peter@his.tld</code> should be able to manage his domains <code>his.tld</code> and <code>his-company.tld</code> then configure the following:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>admin_domain_limits<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>peter@his.tld<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>his.tld<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>his-company.tld<span class="pl-pds">'</span></span>),</span>
|
||||
<span class="pl-s1">);</span></pre></div>
|
||||
|
||||
<p>Admins that have been listed in <code>admin_domain_limits</code> don't have access to the "Manage domains" pages, otherwise they could delete domains they are managing, but maybe someone else owns.</p>
|
||||
|
||||
<h3>
|
||||
<a id="paths" class="anchor" href="#paths" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Paths</h3>
|
||||
|
||||
<p>The <code>base_url</code> is the URL your WebMUM installation is accessible from outside, this also includes subdirectories if you installed it in a subdirectory for that specific domain.</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>base_url<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>http://localhost/webmum<span class="pl-pds">'</span></span>,</span></pre></div>
|
||||
|
||||
<p>In the example above, WebMUM is located in a subdirectory named "webmum/". If your WebMUM installation is directly accessible from a domain (has its own domain), then set the <code>FRONTEND_BASE_PATH</code> to something like this:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>base_url<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>http://webmum.mydomain.tld<span class="pl-pds">'</span></span>,</span></pre></div>
|
||||
|
||||
<h3>
|
||||
<a id="admin-e-mail-address" class="anchor" href="#admin-e-mail-address" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Admin e-mail address</h3>
|
||||
|
||||
<p>Only users with one of the specified email addresses will have access to the administrator's dashboard and will be able to create, edit and delete users, domains and redirects.</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>admins<span class="pl-pds">'</span></span> <span class="pl-k">=</span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>admin@domain.tld<span class="pl-pds">'</span></span>,</span>
|
||||
<span class="pl-s1">);</span></pre></div>
|
||||
|
||||
<p>Admin email accounts must exist in the virtual user database on your own server. (=> an e-mail account on a foreign server won't give you access!). You can then login into the admin dashboard with that e-mail address and the corresponding password.</p>
|
||||
|
||||
<h3>
|
||||
<a id="minimal-required-password-length" class="anchor" href="#minimal-required-password-length" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Minimal required password length</h3>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>password<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>min_length<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">8</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<h3>
|
||||
<a id="logfile" class="anchor" href="#logfile" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Logfile</h3>
|
||||
|
||||
<p>When logging is enabled, WebMUM will write messages into a file "webmum.log" in a specified directory (e.g. when a login attempt fails).</p>
|
||||
|
||||
<p>Enable logging by setting it to enabled in the options:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>enable_logging<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<p>... and set a log path where the PHP user has permission to write the log file:</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>log_path<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>/var/www/webmum/log/<span class="pl-pds">'</span></span>,</span></pre></div>
|
||||
|
||||
<p>"Login-failed-messages" have the following scheme:</p>
|
||||
|
||||
<pre><code>Dec 19 13:00:19: WebMUM login failed for IP 127.0.0.1
|
||||
</code></pre>
|
||||
|
||||
<h4>
|
||||
<a id="fail2ban-support" class="anchor" href="#fail2ban-support" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fail2Ban support</h4>
|
||||
|
||||
<p>If you want to use <strong>Fail2Ban</strong> with WebMUM, the filter has to be:</p>
|
||||
|
||||
<pre><code>[Definition]
|
||||
failregex = ^(.*)\: WebMUM login failed for IP <HOST>$
|
||||
</code></pre>
|
||||
|
||||
<h3>
|
||||
<a id="validate-that-source-addresses-of-redirects-must-be-from-the-managed-domains-only" class="anchor" href="#validate-that-source-addresses-of-redirects-must-be-from-the-managed-domains-only" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Validate that source addresses of redirects must be from the managed domains only</h3>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>enable_validate_aliases_source_domain<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>,</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<h3>
|
||||
<a id="frontend-options" class="anchor" href="#frontend-options" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Frontend options</h3>
|
||||
|
||||
<p>Choose delimiter between multiple email addresses: comma, semicolon or new line separated.</p>
|
||||
|
||||
<p><strong>Tip:</strong> new line is helpful for long lists of addresses.</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>frontend_options<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-c">// Separator for email lists</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>email_separator_text<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>, <span class="pl-pds">'</span></span>, <span class="pl-c">// possible values: ', ' (default), '; ', PHP_EOL (newline)</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>email_separator_form<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>,<span class="pl-pds">'</span></span>, <span class="pl-c">// possible values: ',' (default), ';', PHP_EOL (newline)</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<p>The input for addresses can be separated by <code>,</code>, <code>;</code>, <code>:</code>, <code>|</code>, <code>newline</code> and combinations since all of them will result in a valid list of addresses in database, magic.</p>
|
||||
|
||||
<h2>
|
||||
<a id="update--upgrade-webmum" class="anchor" href="#update--upgrade-webmum" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Update / Upgrade WebMUM</h2>
|
||||
|
||||
<p>If you cloned WebMUM into your filesystem via <code>git clone https://github.com/ohartl/webmum</code>:</p>
|
||||
|
||||
<div class="highlight highlight-source-shell"><pre>git stash
|
||||
git pull origin master
|
||||
git stash pop</pre></div>
|
||||
|
||||
<p>... and you are ready to go. Git might complain about conflicting files - you will have to resolve the merge conflict manually then.</p>
|
||||
|
||||
<p>If you downloaded WebMUM as a ZIP package, you have to update WebMUM manually.</p>
|
||||
|
||||
<p><strong>After every update:</strong>
|
||||
Please check if your config.inc.php fits the current requirements by comparing your version of the file with the config.inc.php in the repository.</p>
|
||||
|
||||
<h2>
|
||||
<a id="faq" class="anchor" href="#faq" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>FAQ</h2>
|
||||
|
||||
<h3>
|
||||
<a id="which-password-hash-algorithm-does-webmum-use" class="anchor" href="#which-password-hash-algorithm-does-webmum-use" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Which password hash algorithm does WebMUM use?</h3>
|
||||
|
||||
<p>By default WebMUM uses the <code>SHA-512</code> hash algorithm for passwords. You can also choose between the alternatives <code>SHA-256</code> or <code>BLOWFISH</code> in the config.</p>
|
||||
|
||||
<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-s"><span class="pl-pds">'</span>password<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">array</span>(</span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1"> <span class="pl-s"><span class="pl-pds">'</span>hash_algorithm<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>SHA-512<span class="pl-pds">'</span></span>, <span class="pl-c">// Supported algorithms: SHA-512, SHA-256, BLOWFISH</span></span>
|
||||
<span class="pl-s1"> <span class="pl-k">...</span></span>
|
||||
<span class="pl-s1">),</span></pre></div>
|
||||
|
||||
<h3>
|
||||
<a id="login-cannot-be-found" class="anchor" href="#login-cannot-be-found" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>"login/ cannot be found"</h3>
|
||||
|
||||
<p>Webserver rewrites have to be enabled on your server, because WebMUM does not use real URLs for the frontend, but virtual URLs based on URL rewriting.
|
||||
When rewriting fails, you receive a 404 error message.</p>
|
||||
</section>
|
||||
|
||||
<aside id="sidebar">
|
||||
<a href="https://github.com/ohartl/webmum/zipball/master" class="button">
|
||||
<small>Download</small>
|
||||
.zip file
|
||||
</a>
|
||||
<a href="https://github.com/ohartl/webmum/tarball/master" class="button">
|
||||
<small>Download</small>
|
||||
.tar.gz file
|
||||
</a>
|
||||
|
||||
<p class="repo-owner"><a href="https://github.com/ohartl/webmum"></a> is maintained by <a href="https://github.com/ohartl">ohartl</a>.</p>
|
||||
|
||||
<p>This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the Architect theme by <a href="https://twitter.com/jasonlong">Jason Long</a>.</p>
|
||||
</aside>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
1
javascripts/main.js
Normal file
1
javascripts/main.js
Normal file
|
@ -0,0 +1 @@
|
|||
console.log('This would be the main JS file.');
|
6
params.json
Normal file
6
params.json
Normal file
File diff suppressed because one or more lines are too long
124
stylesheets/github-light.css
Normal file
124
stylesheets/github-light.css
Normal file
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 GitHub, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
.pl-c /* comment */ {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
|
||||
.pl-s .pl-v /* string variable */ {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.pl-e /* entity */,
|
||||
.pl-en /* entity.name */ {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.pl-s .pl-s1 /* string source */,
|
||||
.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.pl-ent /* entity.name.tag */ {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.pl-k /* keyword, storage, storage.type */ {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
|
||||
.pl-s /* string */,
|
||||
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
|
||||
.pl-sr /* string.regexp */,
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
|
||||
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
|
||||
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
|
||||
color: #183691;
|
||||
}
|
||||
|
||||
.pl-v /* variable */ {
|
||||
color: #ed6a43;
|
||||
}
|
||||
|
||||
.pl-id /* invalid.deprecated */ {
|
||||
color: #b52a1d;
|
||||
}
|
||||
|
||||
.pl-ii /* invalid.illegal */ {
|
||||
background-color: #b52a1d;
|
||||
color: #f8f8f8;
|
||||
}
|
||||
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
|
||||
color: #63a35c;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.pl-ml /* markup.list */ {
|
||||
color: #693a17;
|
||||
}
|
||||
|
||||
.pl-mh /* markup.heading */,
|
||||
.pl-mh .pl-en /* markup.heading entity.name */,
|
||||
.pl-ms /* meta.separator */ {
|
||||
color: #1d3e81;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.pl-mq /* markup.quote */ {
|
||||
color: #008080;
|
||||
}
|
||||
|
||||
.pl-mi /* markup.italic */ {
|
||||
color: #333;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.pl-mb /* markup.bold */ {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
|
||||
background-color: #ffecec;
|
||||
color: #bd2c00;
|
||||
}
|
||||
|
||||
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
|
||||
background-color: #eaffea;
|
||||
color: #55a532;
|
||||
}
|
||||
|
||||
.pl-mdr /* meta.diff.range */ {
|
||||
color: #795da3;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.pl-mo /* meta.output */ {
|
||||
color: #1d3e81;
|
||||
}
|
||||
|
228
stylesheets/print.css
Normal file
228
stylesheets/print.css
Normal file
|
@ -0,0 +1,228 @@
|
|||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font: inherit;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
border: 0;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
body {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 13px;
|
||||
line-height: 1.5;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
color: #d5000d;
|
||||
}
|
||||
|
||||
header {
|
||||
padding-top: 35px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
line-height: 1.2;
|
||||
color: #303030;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
header h2 {
|
||||
font-size: 24px;
|
||||
font-weight: normal;
|
||||
line-height: 1.3;
|
||||
color: #aaa;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
#downloads {
|
||||
display: none;
|
||||
}
|
||||
#main_content {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
margin-bottom: 30px;
|
||||
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
|
||||
font-size: 12px;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0 3px;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 20px;
|
||||
overflow: auto;
|
||||
border: solid 1px #ddd;
|
||||
}
|
||||
pre code {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul, ol, dl {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* COMMON STYLES */
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border: 1px solid #ebebeb;
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
td {
|
||||
font-weight: 300;
|
||||
text-align: center;
|
||||
border: 1px solid #ebebeb;
|
||||
}
|
||||
|
||||
form {
|
||||
padding: 20px;
|
||||
background: #f2f2f2;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* GENERAL ELEMENT TYPE STYLES */
|
||||
|
||||
h1 {
|
||||
font-size: 2.8em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 8px;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-bottom: 8px;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #d5000d;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1em;
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: .8em;
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p a {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding: 0 0 0 30px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.6em;
|
||||
border-left: 10px solid #e9e9e9;
|
||||
}
|
||||
|
||||
ul li {
|
||||
padding-left: 20px;
|
||||
list-style-position: inside;
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
ol li {
|
||||
padding-left: 3px;
|
||||
list-style-position: inside;
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
dl dd {
|
||||
font-style: italic;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 30px;
|
||||
margin-top: 40px;
|
||||
font-size: 13px;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* MISC */
|
||||
.clearfix:after {
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
content: '.';
|
||||
}
|
||||
|
||||
.clearfix {display: inline-block;}
|
||||
* html .clearfix {height: 1%;}
|
||||
.clearfix {display: block;}
|
881
stylesheets/stylesheet.css
Normal file
881
stylesheets/stylesheet.css
Normal file
|
@ -0,0 +1,881 @@
|
|||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
margin: 0.67em 0;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
color: #000;
|
||||
background: #ff0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
height: 0;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
margin: 0; /* 3 */
|
||||
font: inherit; /* 2 */
|
||||
color: inherit; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
margin: 0 2px;
|
||||
border: 1px solid #c0c0c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
padding: 0; /* 2 */
|
||||
border: 0; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* LAYOUT STYLES */
|
||||
body {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 15px;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #666;
|
||||
background: #fafafa url(../images/body-bg.jpg) 0 0 repeat;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #2879d0;
|
||||
}
|
||||
a:hover {
|
||||
color: #2268b2;
|
||||
}
|
||||
|
||||
header {
|
||||
padding-top: 40px;
|
||||
padding-bottom: 40px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
background: #2e7bcf url(../images/header-bg.jpg) 0 0 repeat-x;
|
||||
border-bottom: solid 1px #275da1;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
width: 540px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.2em;
|
||||
font-size: 72px;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
color: #fff;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
header h2 {
|
||||
width: 540px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-size: 26px;
|
||||
font-weight: normal;
|
||||
line-height: 1.3;
|
||||
color: #9ddcff;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.inner {
|
||||
position: relative;
|
||||
width: 940px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#content-wrapper {
|
||||
padding-top: 30px;
|
||||
border-top: solid 1px #fff;
|
||||
}
|
||||
|
||||
#main-content {
|
||||
float: left;
|
||||
width: 690px;
|
||||
}
|
||||
|
||||
#main-content img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
aside#sidebar {
|
||||
float: right;
|
||||
width: 200px;
|
||||
min-height: 504px;
|
||||
padding-left: 20px;
|
||||
font-size: 12px;
|
||||
line-height: 1.3;
|
||||
background: transparent url(../images/sidebar-bg.jpg) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
aside#sidebar p.repo-owner,
|
||||
aside#sidebar p.repo-owner a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#downloads {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
a.button {
|
||||
width: 134px;
|
||||
height: 58px;
|
||||
padding-top: 22px;
|
||||
padding-left: 68px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 23px;
|
||||
line-height: 1.2;
|
||||
color: #fff;
|
||||
}
|
||||
a.button small {
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
}
|
||||
header a.button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
background: transparent url(../images/github-button.png) 0 0 no-repeat;
|
||||
}
|
||||
aside a.button {
|
||||
display: block;
|
||||
width: 138px;
|
||||
padding-left: 64px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 21px;
|
||||
background: transparent url(../images/download-button.png) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
margin-bottom: 30px;
|
||||
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
|
||||
font-size: 13px;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0 3px;
|
||||
background-color: #f2f8fc;
|
||||
border: solid 1px #dbe7f3;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 20px;
|
||||
overflow: auto;
|
||||
text-shadow: none;
|
||||
background: #fff;
|
||||
border: solid 1px #f2f2f2;
|
||||
}
|
||||
pre code {
|
||||
padding: 0;
|
||||
color: #2879d0;
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
ul, ol, dl {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* COMMON STYLES */
|
||||
|
||||
hr {
|
||||
height: 0;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
border: 0;
|
||||
border-top: solid 1px #ddd;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border: 1px solid #ebebeb;
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
td {
|
||||
font-weight: 300;
|
||||
text-align: center;
|
||||
border: 1px solid #ebebeb;
|
||||
}
|
||||
|
||||
form {
|
||||
padding: 20px;
|
||||
background: #f2f2f2;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* GENERAL ELEMENT TYPE STYLES */
|
||||
|
||||
#main-content h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 2.8em;
|
||||
font-weight: normal;
|
||||
color: #474747;
|
||||
text-indent: 6px;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
#main-content h1:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -0.9em;
|
||||
color: #9ddcff;
|
||||
content: "/";
|
||||
}
|
||||
|
||||
#main-content h2 {
|
||||
margin-bottom: 8px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #474747;
|
||||
text-indent: 4px;
|
||||
}
|
||||
#main-content h2:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -1.5em;
|
||||
content: "//";
|
||||
color: #9ddcff;
|
||||
}
|
||||
|
||||
#main-content h3 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 8px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #474747;
|
||||
text-indent: 3px;
|
||||
}
|
||||
|
||||
#main-content h3:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -2em;
|
||||
content: "///";
|
||||
color: #9ddcff;
|
||||
}
|
||||
|
||||
#main-content h4 {
|
||||
margin-bottom: 8px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #474747;
|
||||
text-indent: 3px;
|
||||
}
|
||||
|
||||
h4:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -2.8em;
|
||||
content: "////";
|
||||
color: #9ddcff;
|
||||
}
|
||||
|
||||
#main-content h5 {
|
||||
margin-bottom: 8px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: 14px;
|
||||
color: #474747;
|
||||
text-indent: 3px;
|
||||
}
|
||||
h5:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -3.2em;
|
||||
content: "/////";
|
||||
color: #9ddcff;
|
||||
}
|
||||
|
||||
#main-content h6 {
|
||||
margin-bottom: 8px;
|
||||
font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif;
|
||||
font-size: .8em;
|
||||
color: #474747;
|
||||
text-indent: 3px;
|
||||
}
|
||||
h6:before {
|
||||
padding-right: 0.3em;
|
||||
margin-left: -3.7em;
|
||||
content: "//////";
|
||||
color: #9ddcff;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p a {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding: 0 0 0 30px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.6em;
|
||||
border-left: 10px solid #e9e9e9;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-position: inside;
|
||||
list-style: disc;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-position: inside;
|
||||
list-style: decimal;
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
dl dd {
|
||||
font-style: italic;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 30px;
|
||||
margin-top: 40px;
|
||||
font-size: 13px;
|
||||
color: #aaa;
|
||||
background: transparent url('../images/hr.png') 0 0 no-repeat;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: #666;
|
||||
}
|
||||
footer a:hover {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
/* MISC */
|
||||
.clearfix:after {
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
content: '.';
|
||||
}
|
||||
|
||||
.clearfix {display: inline-block;}
|
||||
* html .clearfix {height: 1%;}
|
||||
.clearfix {display: block;}
|
||||
|
||||
/* #Media Queries
|
||||
================================================== */
|
||||
|
||||
/* Smaller than standard 960 (devices and browsers) */
|
||||
@media only screen and (max-width: 959px) { }
|
||||
|
||||
/* Tablet Portrait size to standard 960 (devices and browsers) */
|
||||
@media only screen and (min-width: 768px) and (max-width: 959px) {
|
||||
.inner {
|
||||
width: 740px;
|
||||
}
|
||||
header h1, header h2 {
|
||||
width: 340px;
|
||||
}
|
||||
header h1 {
|
||||
font-size: 60px;
|
||||
}
|
||||
header h2 {
|
||||
font-size: 30px;
|
||||
}
|
||||
#main-content {
|
||||
width: 490px;
|
||||
}
|
||||
#main-content h1:before,
|
||||
#main-content h2:before,
|
||||
#main-content h3:before,
|
||||
#main-content h4:before,
|
||||
#main-content h5:before,
|
||||
#main-content h6:before {
|
||||
padding-right: 0;
|
||||
margin-left: 0;
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* All Mobile Sizes (devices and browser) */
|
||||
@media only screen and (max-width: 767px) {
|
||||
.inner {
|
||||
width: 93%;
|
||||
}
|
||||
header {
|
||||
padding: 20px 0;
|
||||
}
|
||||
header .inner {
|
||||
position: relative;
|
||||
}
|
||||
header h1, header h2 {
|
||||
width: 100%;
|
||||
}
|
||||
header h1 {
|
||||
font-size: 48px;
|
||||
}
|
||||
header h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
header a.button {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
height: auto;
|
||||
padding: 5px 10px;
|
||||
margin-top: 15px;
|
||||
font-size: 13px;
|
||||
line-height: 1;
|
||||
color: #2879d0;
|
||||
text-align: center;
|
||||
background-color: #9ddcff;
|
||||
background-image: none;
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
header a.button small {
|
||||
display: inline;
|
||||
font-size: 13px;
|
||||
}
|
||||
#main-content,
|
||||
aside#sidebar {
|
||||
float: none;
|
||||
width: 100% ! important;
|
||||
}
|
||||
aside#sidebar {
|
||||
min-height: 0;
|
||||
padding: 20px 0;
|
||||
margin-top: 20px;
|
||||
background-image: none;
|
||||
border-top: solid 1px #ddd;
|
||||
}
|
||||
aside#sidebar a.button {
|
||||
display: none;
|
||||
}
|
||||
#main-content h1:before,
|
||||
#main-content h2:before,
|
||||
#main-content h3:before,
|
||||
#main-content h4:before,
|
||||
#main-content h5:before,
|
||||
#main-content h6:before {
|
||||
padding-right: 0;
|
||||
margin-left: 0;
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
|
||||
@media only screen and (min-width: 480px) and (max-width: 767px) { }
|
||||
|
||||
/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
|
||||
@media only screen and (max-width: 479px) { }
|
||||
|
Loading…
Add table
Reference in a new issue