This commit is contained in:
alcalbg
2022-10-12 11:05:22 +00:00
parent 21497025de
commit efe06fe8d4
232 changed files with 3409 additions and 49122 deletions

249
configuration/auth.html Normal file
View File

@@ -0,0 +1,249 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="default-auth-service">Default Auth service</h2>
<p>By default, users are stored in json file. For some use-cases, this is enough. It also makes this app lightweight since no database is required.</p>
<p>Default handler accepts only file name parameter. This file should be writable by the web server.</p>
<pre><code> 'Filegator\Services\Auth\AuthInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Auth\Adapters\JsonFile',
'config' =&gt; [
'file' =&gt; __DIR__.'/private/users.json',
],
],
</code></pre>
<h2 id="configuring-auth-service-to-use-database">Configuring Auth service to use database</h2>
<p>You can use mysql database to store your users.</p>
<p>First, create a table <code>users</code> with this sql query:</p>
<pre><code>CREATE TABLE `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`role` varchar(20) NOT NULL,
`permissions` varchar(200) NOT NULL,
`homedir` varchar(2000) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `username` (`username`)
) CHARSET=utf8 COLLATE=utf8_bin;</code></pre>
<p>Then, import default users with sql query:</p>
<pre><code>INSERT INTO `users` (`username`, `name`, `role`, `permissions`, `homedir`, `password`)
VALUES
('guest', 'Guest', 'guest', '', '/', ''),
('admin', 'Admin', 'admin', 'read|write|upload|download|batchdownload|zip', '/', '$2y$10$Nu35w4pteLfc7BDCIkDPkecjw8wsH8Y2GMfIewUbXLT7zzW6WOxwq');</code></pre>
<p>At the end, open <code>configuration.php</code> and update AuthInterface handler to reflect your database settings:</p>
<pre><code> 'Filegator\Services\Auth\AuthInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Auth\Adapters\Database',
'config' =&gt; [
'driver' =&gt; 'mysqli',
'host' =&gt; 'localhost',
'username' =&gt; 'root',
'password' =&gt; 'password',
'database' =&gt; 'filegator',
],
],</code></pre>
<h2 id="configuring-auth-service-to-use-wordpress">Configuring Auth service to use WordPress</h2>
<p>Replace your current Auth handler in <code>configuration.php</code> file like this:</p>
<pre><code> 'Filegator\Services\Auth\AuthInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Auth\Adapters\WPAuth',
'config' =&gt; [
'wp_dir' =&gt; '/var/www/my_wordpress_site/',
'permissions' =&gt; ['read', 'write', 'upload', 'download', 'batchdownload', 'zip'],
'private_repos' =&gt; false,
],
],</code></pre>
<p>Adjust in the config above:</p>
<ul>
<li><code>wp_dir</code> should be the directory path of your wordpress installation</li>
<li><code>permissions</code> is the array of permissions given to each user</li>
<li><code>private_repos</code> each user will have its own sub folder, admin will see everything (false/true)</li>
</ul>
<p>Note: With more recent versions of FileGator you can set <code>guest_redirection</code> in your <code>configuration.php</code> to redirect logged-out users back to your WP site:</p>
<pre><code>'frontend_config' =&gt; [
...
'guest_redirection' =&gt; 'http://example.com/wp-admin/',
...
]</code></pre>
<h2 id="configuring-auth-service-to-use-ldap">Configuring Auth service to use LDAP</h2>
<p>Replace your current Auth handler in <code>configuration.php</code> file like this:</p>
<pre><code> 'Filegator\Services\Auth\AuthInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Auth\Adapters\LDAP',
'config' =&gt; [
'private_repos' =&gt; false,
'ldap_server'=&gt;'ldap://192.168.1.1',
'ldap_bindDN'=&gt;'uid=ldapbinduser,cn=users,dc=ldap,dc=example,dc=com',
'ldap_bindPass'=&gt;'ldapbinduser-password',
'ldap_baseDN'=&gt;'cn=users,dc=ldap,dc=example,dc=com',
'ldap_filter'=&gt;'(uid=*)', //ex: 'ldap_filter'=&gt;'(&amp;(uid=*)(memberOf=cn=administrators,cn=groups,dc=ldap,dc=example,dc=com))',
'ldap_attributes' =&gt; ["uid","cn","dn"],
'ldap_userFieldMapping'=&gt; [
'username' =&gt;'uid',
'username_AddDomain' =&gt;'@example.com',
'username_RemoveDomains' =&gt;['@department1.example.com', '@department2.example.com'],
'name' =&gt;'cn',
'userDN' =&gt;'dn',
'default_permissions' =&gt; 'read|write|upload|download|batchdownload|zip',
'admin_usernames' =&gt;['user1', 'user2'],
],
],
],</code></pre>
<h2 id="custom-authentication-using-3rd-party">Custom Authentication using 3rd party</h2>
<p>If you want to use FileGator as a part of another application, you probably already have users stored somewhere else. What you need in this case is to build a new custom Auth adapter that matches the <a href="https://github.com/filegator/filegator/blob/master/backend/Services/Auth/AuthInterface.php">AuthInterface</a> to connect those two. This new adapter will try to authenticate users in your application and translate each user into filegator <a href="https://github.com/filegator/filegator/blob/master/backend/Services/Auth/User.php">User</a> object.</p>
<h2 id="api-authentication">API authentication</h2>
<p>Front-end will use session based authentication to authenticate and consume the back-end.</p>
<p>Note: The application will not work if you disable cookies.</p>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

216
configuration/basic.html Normal file
View File

@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="active">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="basic">Basic</h2>
<p>All services are set with reasonable defaults. For regular users there is no need to change anything. The script should work out of the box.</p>
<p>You can edit <code>configuration.php</code> file to change the basic things like logo image, title, language and upload restrictions.</p>
<p>Note: if you've made a mistake in configuration file (forgot to close a quote?) the script will fail to load or throw an error. Please use provided default <code>configuration_sample.php</code> to put everything back to normal.</p>
<pre><code> 'frontend_config' =&gt; [
'app_name' =&gt; 'FileGator',
'app_version' =&gt; APP_VERSION,
'language' =&gt; 'english',
'logo' =&gt; 'https://filegator.io/filegator_logo.svg',
'upload_max_size' =&gt; 100 * 1024 * 1024, // 100MB
'upload_chunk_size' =&gt; 1 * 1024 * 1024, // 1MB
'upload_simultaneous' =&gt; 3,
'default_archive_name' =&gt; 'archive.zip',
'editable' =&gt; ['.txt', '.css', '.js', '.ts', '.html', '.php', '.json', '.md'],
'date_format' =&gt; 'YY/MM/DD hh:mm:ss', // see: https://momentjs.com/docs/#/displaying/format/
'guest_redirection' =&gt; '', // useful for external auth adapters
'search_simultaneous' =&gt; 5, // how many simultaneous getdirs to spawn when searching
// filter starts with separator =&gt; full path has to match, example: '/all/one/filegator/demo.txt'
// filter ends with separator =&gt; filter only folders (a file with the same name will be shown), example: '.git/'
// neither of above =&gt; it is a file and could be in every folder, example: '.htaccess'
// both of above =&gt; full folder path has to match, example: '/homes/web/filegator/.npm/'
'filter_entries' =&gt; ['Recycle.bin/', 'File System Information/', '.DS_Store', '@eaDir/', '#recycle/'],
],</code></pre>
<h2 id="additional-html">Additional HTML</h2>
<p>You can add additional html to the head and body like this:</p>
<pre><code> 'Filegator\Services\View\ViewInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\View\Adapters\Vuejs',
'config' =&gt; [
'add_to_head' =&gt; '&lt;meta name="author" content="something"&gt;',
'add_to_body' =&gt; '&lt;script src="http://example.com/analytics.js"&gt;&lt;/script&gt;',
],
],</code></pre>
<h2 id="frontend-tweaks">Frontend tweaks</h2>
<p>To change default color scheme and other options, edit <code>frontend/App.vue</code> When you're done, recompile with <code>npm run build</code> like described <a href="/development.html">here</a></p>
<pre><code>// Primary color
$primary: #34B891;
$primary-invert: findColorInvert($primary);
$colors: (
"primary": ($primary, $primary-invert),
"info": ($info, $info-invert),
"success": ($success, $success-invert),
"warning": ($warning, $warning-invert),
"danger": ($danger, $danger-invert),
);
// Links
$link: $primary;
$link-invert: $primary-invert;
$link-focus-border: $primary;
// Disable the widescreen breakpoint
$widescreen-enabled: false;
// Disable the fullhd breakpoint
$fullhd-enabled: false;</code></pre>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

176
configuration/logging.html Normal file
View File

@@ -0,0 +1,176 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="configuring-logging-service">Configuring Logging service</h2>
<p>Logging is provided trough the powerful <a href="https://github.com/Seldaek/monolog">Monolog</a> library. Please check their docs for more info.</p>
<p>Default handler will use simple <code>private/logs/app.log</code> file to store application logs and errors.</p>
<pre><code> 'Filegator\Services\Logger\LoggerInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Logger\Adapters\MonoLogger',
'config' =&gt; [
'monolog_handlers' =&gt; [
function () {
return new \Monolog\Handler\StreamHandler(
__DIR__.'/private/logs/app.log',
\Monolog\Logger::DEBUG
);
},
],
],
],</code></pre>
<p>There are many different handlers you can add on top of the stack (monolog_handlers array). Some of them are listed <a href="https://github.com/Seldaek/monolog#documentation">here</a>.</p>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

194
configuration/router.html Normal file
View File

@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="router-service">Router service</h2>
<p>Router service is using well-known <a href="https://github.com/nikic/FastRoute">FastRoute</a> library. There is no need to change this service unless you're extending the script.</p>
<p>The router uses unique query parameter <code>?r=</code> to pass the route info. Because of this feature, this (single-page) application does not require rewrite rules, .htaccess or similar tweaks.</p>
<p>Example routes:</p>
<ul>
<li><code>http://example.com/?r=/some/route&amp;param1=val1&amp;param2=val2</code></li>
<li><code>http://example.com/?r=/user/{user_id}&amp;param1=val1</code></li>
</ul>
<h2 id="routes-file">Routes file</h2>
<p>Routes file is located here <code>backend/Controllers/routes.php</code> Each route in the routes array looks like this:</p>
<pre><code> [
'route' =&gt; [
'GET', '/download/{path_encoded}', '\Filegator\Controllers\DownloadController@download',
],
'roles' =&gt; [
'guest', 'user', 'admin',
],
'permissions' =&gt; [
'download',
],
],</code></pre>
<p>As you can see in the example, you can assign required user roles and permissions for each route.</p>
<h2 id="controllers">Controllers</h2>
<p>Since FileGator is using an awesome dependency injection <a href="https://github.com/PHP-DI/PHP-DI">container</a> you can type-hint dependencies directly in your controllers. </p>
<p>You can also mix route parameters and dependencies in any order like in this example:</p>
<pre><code>
public function __construct(Config $config, Session $session, AuthInterface $auth, Filesystem $storage)
{
// ...
}
public function download($path_encoded, Request $request, Response $response, StreamedResponse $streamedResponse)
{
// ...
}</code></pre>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

179
configuration/security.html Normal file
View File

@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="configuring-security-service">Configuring Security service</h2>
<p>Simple security service is included in the script by default. This service provides:</p>
<ul>
<li>Basic session-based <a href="https://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF</a> protection</li>
<li>IP allow list</li>
<li>IP deny list</li>
</ul>
<pre><code> 'Filegator\Services\Security\Security' =&gt; [
'handler' =&gt; '\Filegator\Services\Security\Security',
'config' =&gt; [
'csrf_protection' =&gt; true,
'csrf_key' =&gt; "123456", // randomize this
'ip_allowlist' =&gt; [],
'ip_denylist' =&gt; [
'172.16.1.2',
'172.16.3.4',
],
],
],</code></pre>
<p>If you set <code>ip_allowlist</code> then only users coming from listed IP addresses will be able to use the script.</p>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

229
configuration/session.html Normal file
View File

@@ -0,0 +1,229 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="default-session-handler">Default Session handler</h2>
<p>Session handling is provided through the Symfony's <a href="https://symfony.com/doc/4.4/components/http_foundation.html">HttpFoundation</a> component. Please check their docs for more info.</p>
<p>Default session handler will user PHP's built in file storage. You can also specify your own <code>$save_path</code> to store session files.</p>
<pre><code> 'Filegator\Services\Session\SessionStorageInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Session\Adapters\SessionStorage',
'config' =&gt; [
'handler' =&gt; function () {
$save_path = null; // use default system path
//$save_path = __DIR__.'/private/sessions';
$handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler($save_path);
return new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([], $handler);
},
],
],</code></pre>
<h2 id="configuring-session-service-to-use-database">Configuring Session service to use database</h2>
<p>First, create a table <code>sessions</code> with this sql:</p>
<pre><code>CREATE TABLE `sessions` (
`sess_id` varbinary(128) NOT NULL,
`sess_data` blob NOT NULL,
`sess_lifetime` mediumint(9) NOT NULL,
`sess_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`sess_id`)
) CHARSET=utf8 COLLATE=utf8_bin;</code></pre>
<p>Then, open <code>configuration.php</code> and update Session handler to:</p>
<pre><code> 'Filegator\Services\Session\SessionStorageInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Session\Adapters\SessionStorage',
'config' =&gt; [
'handler' =&gt; function () {
$handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler(
'mysql://root:password@localhost:3306/filegator'
);
return new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([], $handler);
},
],
],
</code></pre>
<p>Don't forget to enter correct database details.</p>
<h2 id="configuring-session-service-to-use-redis">Configuring Session service to use Redis</h2>
<p>You must require additional <a href="https://github.com/nrk/predis/">predis</a> library <code>composer require predis/predis</code></p>
<pre><code> 'Filegator\Services\Session\SessionStorageInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Session\Adapters\SessionStorage',
'config' =&gt; [
'handler' =&gt; function () {
$predis = new \Predis\Client('tcp://127.0.0.1:6379');
$handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler($predis);
return new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([], $handler);
},
],
],</code></pre>
<h2 id="tweaking-session-options">Tweaking session options</h2>
<p>The underying <a href="https://github.com/symfony/symfony/blob/4.4/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php">session component</a> accepts array of options.
For example you can pass <code>cookie_lifetime</code> parameter to extend default session lifetime:</p>
<pre><code> 'Filegator\Services\Session\SessionStorageInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Session\Adapters\SessionStorage',
'config' =&gt; [
'handler' =&gt; function () {
$handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler(
'mysql://root:password@localhost:3306/filegator'
);
return new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([
'cookie_lifetime' =&gt; 365 * 24 * 60 * 60, // one year
], $handler);
},
],
],
</code></pre>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

337
configuration/storage.html Normal file
View File

@@ -0,0 +1,337 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="adapters">Adapters</h2>
<p>Different storage adapters are provided through the awesome <a href="https://github.com/thephpleague/flysystem">Flysystem</a> library.</p>
<p>You can use local filesystem (default), FTP, SFTP, Amazon S3, DigitalOcean Spaces, Microsoft Azure Blob, Dropbox and many others.</p>
<p>Please check the Flysystem <a href="https://flysystem.thephpleague.com/v1/docs/">docs</a> for the exact setup required for each adapter.</p>
<p>Notes: Some adapters do not support folder operations or their support is limited.
Requiring additional libraries with <a href="https://getcomposer.org/download/">composer</a> requires root access.</p>
<h2 id="default-local-disk-adapter">Default Local Disk Adapter</h2>
<p>With default adapter you just need to configure where your <code>repository</code> folder is. This folder will serve as a root for everything else.</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
return new \League\Flysystem\Adapter\Local(
__DIR__.'/repository'
);
},
],
],
</code></pre>
<h2 id="ftp-adapter">FTP Adapter</h2>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/ftp/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
return new \League\Flysystem\Adapter\Ftp([
'host' =&gt; 'example.com',
'username' =&gt; 'demo',
'password' =&gt; 'password',
'port' =&gt; 21,
'timeout' =&gt; 10,
]);
},
],
],
</code></pre>
<h2 id="sftp-adapter">SFTP Adapter</h2>
<p>You must require additional library <code>composer require league/flysystem-sftp:^1.0 -W</code></p>
<p>For more advanced options like using your private key or changing the document root see official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/sftp/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
return new \League\Flysystem\Sftp\SftpAdapter([
'host' =&gt; 'example.com',
'port' =&gt; 22,
'username' =&gt; 'demo',
'password' =&gt; 'password',
'timeout' =&gt; 10,
]);
},
],
],
</code></pre>
<h2 id="dropbox-adapter">Dropbox Adapter</h2>
<p>You must require additional library <code>composer require spatie/flysystem-dropbox</code></p>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/dropbox/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [
'case_sensitive' =&gt; false,
],
'adapter' =&gt; function () {
$authorizationToken = '1234';
$client = new \Spatie\Dropbox\Client($authorizationToken);
return new \Spatie\FlysystemDropbox\DropboxAdapter($client);
},
],
],
</code></pre>
<h2 id="amazon-s3-adapter-v3">Amazon S3 Adapter (v3)</h2>
<p>You must require additional library <code>composer require league/flysystem-aws-s3-v3:^1.0 -W</code></p>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/aws-s3-v3/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
$client = new \Aws\S3\S3Client([
'credentials' =&gt; [
'key' =&gt; '123456',
'secret' =&gt; 'secret123456',
],
'region' =&gt; 'us-east-1',
'version' =&gt; 'latest',
]);
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
},
],
],
</code></pre>
<h2 id="digitalocean-spaces">DigitalOcean Spaces</h2>
<p>You must require additional library <code>composer require league/flysystem-aws-s3-v3:^1.0 -W</code></p>
<p>The DigitalOcean Spaces API are compatible with those of S3.</p>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/digitalocean-spaces/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
$client = new \Aws\S3\S3Client([
'credentials' =&gt; [
'key' =&gt; '123456',
'secret' =&gt; 'secret123456',
],
'region' =&gt; 'us-east-1',
'version' =&gt; 'latest',
'endpoint' =&gt; 'https://nyc3.digitaloceanspaces.com',
]);
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
},
],
],
</code></pre>
<h2 id="microsoft-azure-blob-storage">Microsoft Azure Blob Storage</h2>
<p>You must require additional library <code>composer require league/flysystem-azure-blob-storage:^1.0 -W</code></p>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/azure/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [],
'adapter' =&gt; function () {
$accountName = 'your_storage_account_name';
$accountKey = '123456';
$containerName = 'my_container';
$client = \MicrosoftAzure\Storage\Blob\BlobRestProxy::createBlobService(
"DefaultEndpointsProtocol=https;AccountName=${accountName};AccountKey=${accountKey};"
);
return new \League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter($client, $containerName);
},
],
],</code></pre>
<h2 id="replicate-adapter">Replicate Adapter</h2>
<p>You must require additional library <code>composer require league/flysystem-replicate-adapter</code></p>
<p>The ReplicateAdapter facilitates smooth transitions between adapters, allowing an application to stay functional and migrate its files from one adapter to another. The adapter takes two other adapters, a source and a replica. Every change is delegated to both adapters, while all the read operations are passed onto the source only.</p>
<p>See official <a href="https://flysystem.thephpleague.com/v1/docs/adapter/replicate/">documentation</a>.</p>
<p>Sample configuration:</p>
<pre><code> 'Filegator\Services\Storage\Filesystem' =&gt; [
'handler' =&gt; '\Filegator\Services\Storage\Filesystem',
'config' =&gt; [
'separator' =&gt; '/',
'config' =&gt; [
'case_sensitive' =&gt; false,
],
'adapter' =&gt; function () {
$authorizationToken = '1234';
$client = new \Spatie\Dropbox\Client($authorizationToken);
$source = new \Spatie\FlysystemDropbox\DropboxAdapter($client);
$replica = new \League\Flysystem\Adapter\Local(__DIR__.'/repository');
return new League\Flysystem\Replicate\ReplicateAdapter($source, $replica);
},
],
],
</code></pre>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>

176
configuration/tmpfs.html Normal file
View File

@@ -0,0 +1,176 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FileGator - Documentation</title>
<link rel="stylesheet" href="https://docs.filegator.io/css/bootstrap.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/font-awesome.min.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/highlight.tomorrow-night.css">
<link rel="stylesheet" href="https://docs.filegator.io/css/main.css">
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top">
<a class="navbar-brand" href="https://docs.filegator.io/">
FileGator
<small class="hidden-xs hidden-sm">
Documentation
</small>
</a>
<a href="https://github.com/filegator/filegator">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
</a>
</header>
<main class="container-fluid">
<div class="row">
<nav id="sidebar" class="col-sm-3 col-lg-2" role="navigation">
<p class="text-muted">
Getting Started
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/index.html">
What is FileGator
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/install.html">
Installation
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/accounts.html">
Users
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/development.html">
Development
</a>
</li>
</ul>
<p class="text-muted">
Configuration
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/configuration/basic.html">
Basic
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/auth.html">
Auth
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/session.html">
Session
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/storage.html">
Storage
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/logging.html">
Logging
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/security.html">
Security
</a>
</li>
<li class="">
<a href="https://docs.filegator.io/configuration/router.html">
Router
</a>
</li>
<li class="active">
<a href="https://docs.filegator.io/configuration/tmpfs.html">
Tmpfs
</a>
</li>
</ul>
<p class="text-muted">
Languages
</p>
<ul class="nav nav-pills nav-stacked">
<li class="">
<a href="https://docs.filegator.io/translations/default.html">
Translations
</a>
</li>
</ul>
</nav>
<section class="col-sm-offset-3 col-lg-offset-2 col-sm-9 col-lg-10">
<h2 id="temporary-file-system-service">Temporary file system service</h2>
<p>This service is responsible for managing temporary files. TMP files are created:</p>
<ul>
<li>When uploading files, chunks are stored in the TMP folder before merging and moving to the final storage destination</li>
<li>When creating and extracting archives (zip files)</li>
<li>When downloading multiple files, they are copied into TMP folder before zipping</li>
</ul>
<p>Tmp files are usually removed immediately after the use. For expired files, configurable garbage collection is used:</p>
<pre><code> 'Filegator\Services\Tmpfs\TmpfsInterface' =&gt; [
'handler' =&gt; '\Filegator\Services\Tmpfs\Adapters\Tmpfs',
'config' =&gt; [
'path' =&gt; __DIR__.'/private/tmp/',
'gc_probability_perc' =&gt; 10,
'gc_older_than' =&gt; 60 * 60 * 24 * 2, // 2 days
],
],</code></pre>
<p>Note: if you want to use this script as a stateless app or in any kind of multi-node environment, you must mount a single shared TMP folder for all the instances. You can solve this problem with <a href="https://aws.amazon.com/efs/">Amazon Elastic File System</a> or similar approach.</p>
</section>
</div>
</main>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>
$(function() {
$("section>h1").wrap('<div class="page-header" />');
// Syntax highlighting
hljs.initHighlightingOnLoad();
});
</script>
<!-- Ticksel analytics v1.0 -->
<script type="text/javascript">
var _tcfg = _tcfg || [];
(function() {
_tcfg.push(["tags", "filegator-io,filegator-io-docs"]);
var u="https://a.interactive32.com/js/safetick.js"; _tcfg.push(["account_id", 8348834]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.src=u; g.setAttribute("crossorigin", "anonymous");
s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><img src="https://a.interactive32.com/beam?account_id=8348834&referrer=&tags=filegator-io,filegator-io-docs" style="border:0;" width="0" height="0" alt="" /></noscript>
<!-- End Ticksel Code -->
</body>
</html>