Compare commits

..

65 commits

Author SHA1 Message Date
Sergio Brighenti
a00fd5a5e2
Merge pull request #579 from weblate/weblate-xbackbone-xbackbone
Translations update from Hosted Weblate
2024-08-15 15:10:15 +02:00
Oğuz Ersen
0fe1748077
Translated using Weblate (Turkish)
Currently translated at 100.0% (162 of 162 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/tr/
2024-08-04 20:28:59 +00:00
Hani Rouatbi
c58a114ac9
Translated using Weblate (Arabic)
Currently translated at 100.0% (162 of 162 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/ar/
2024-08-04 20:28:58 +00:00
Sectly
23f6b18ffe
Translated using Weblate (Dutch)
Currently translated at 100.0% (162 of 162 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/nl/
2024-08-04 20:28:58 +00:00
bittin1ddc447d824349b2
4ad4b20762
Translated using Weblate (Swedish)
Currently translated at 100.0% (162 of 162 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/sv/
2024-08-04 20:28:57 +00:00
gallegonovato
1c2801e2f0
Translated using Weblate (Spanish)
Currently translated at 100.0% (162 of 162 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/es/
2024-08-04 20:28:56 +00:00
Sergio Brighenti
a918c95a56
Merge pull request #578 from sergix44/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-08-04 22:28:51 +02:00
Sergio Brighenti
fa85310d1d
Merge pull request #586 from samrzhevsky/master
Fix page count calculation
2024-08-04 22:28:21 +02:00
samrzhevsky
8fabc57f04
Fix page count calculation 2024-07-27 23:39:38 +03:00
dependabot[bot]
cd28fe11af
Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-16 14:57:30 +00:00
Sergio Brighenti
687c503efd
Merge pull request #561 from weblate/weblate-xbackbone-xbackbone
Translations update from Hosted Weblate
2024-06-15 21:59:26 +02:00
Vin
c6f087e092
Translated using Weblate (Russian)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/ru/
2024-06-15 21:57:04 +02:00
tabby
4718d8a0b1
Translated using Weblate (Korean)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/ko/
2024-06-15 21:57:04 +02:00
ssantos
bb97621041
Translated using Weblate (Portuguese)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/pt/
2024-06-15 21:57:04 +02:00
Eryk Michalak
49e3110273
Translated using Weblate (Polish)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/pl/
2024-06-15 21:57:04 +02:00
Mikachu
41b26f45b7
Translated using Weblate (Dutch)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/nl/
2024-06-15 21:57:04 +02:00
Gaming Tibor
f2ae33bcd7
Translated using Weblate (Hungarian)
Currently translated at 99.3% (160 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/hu/
2024-06-15 21:57:04 +02:00
LeonMtn05
96972b8222
Translated using Weblate (German)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/de/
2024-06-15 21:57:04 +02:00
Sergio Brighenti
06562d194b
Merge pull request #572 from lsgd/master
Enable upload from clipboard
2024-06-15 21:57:01 +02:00
Lukas Schulze
a600a21753 Add link to remove tags filter 2024-04-30 16:15:41 +02:00
lsgd
1193c96966
Merge branch 'sergix44:master' into master 2024-04-30 15:49:54 +02:00
Lukas Schulze
4946750beb enable upload via clipboard paste 2024-04-30 15:49:01 +02:00
Sergio Brighenti
cc8ed75ec6 Update changelog 2024-01-14 14:24:40 +01:00
Sergio Brighenti
9dbf1400f6 Update lock 2024-01-14 14:16:56 +01:00
Sergio Brighenti
dd5e30abe2 Update list preview icon color 2024-01-14 14:15:16 +01:00
Sergio Brighenti
59c6691585
Merge pull request #553 from lsgd/master
Add link to file preview which opens the file itself
2024-01-14 14:04:28 +01:00
Sergio Brighenti
bd3ca55e20
Merge pull request #556 from sergix44/dependabot/composer/aws/aws-sdk-php-3.294.5
Bump aws/aws-sdk-php from 3.271.3 to 3.294.5
2024-01-04 00:06:30 +01:00
Sergio Brighenti
04a6770f19
Merge pull request #546 from weblate/weblate-xbackbone-xbackbone
Translations update from Hosted Weblate
2024-01-04 00:05:25 +01:00
ssantos
a8f26558a6
Translated using Weblate (Portuguese)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/pt/
2024-01-04 00:04:44 +01:00
Oğuz Ersen
853ed10e1c
Translated using Weblate (Turkish)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/tr/
2024-01-04 00:04:44 +01:00
Xin Mu
25ed553ed1
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/zh_Hans/
2024-01-04 00:04:44 +01:00
Kalle Laine
ab211c571a
Translated using Weblate (Finnish)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/fi/
2024-01-04 00:04:44 +01:00
Reza Almanda
3f9bc8ae7c
Translated using Weblate (Indonesian)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/id/
2024-01-04 00:04:44 +01:00
Caspar Coen Graafstal
2c33f19785
Translated using Weblate (Dutch)
Currently translated at 98.7% (159 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/nl/
2024-01-04 00:04:44 +01:00
春末丶冬初
57a66f83bd
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.1% (158 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/zh_Hans/
2024-01-04 00:04:44 +01:00
J. Lavoie
41870dce76
Translated using Weblate (French (Canada))
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/fr_CA/
2024-01-04 00:04:44 +01:00
J. Lavoie
f5fba276fd
Translated using Weblate (French)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/fr/
2024-01-04 00:04:44 +01:00
J. Lavoie
b2403baf0b
Translated using Weblate (German)
Currently translated at 99.3% (160 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/de/
2024-01-04 00:04:44 +01:00
J. Lavoie
634d301e80
Translated using Weblate (Italian)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/it/
2024-01-04 00:04:44 +01:00
a
a0f82ae4ab
Translated using Weblate (Russian)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/ru/
2024-01-04 00:04:44 +01:00
Luna Jernberg
a5e63dcd33
Translated using Weblate (Swedish)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/sv/
2024-01-04 00:04:44 +01:00
gallegonovato
8cda536340
Translated using Weblate (Spanish)
Currently translated at 100.0% (161 of 161 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/es/
2024-01-04 00:04:44 +01:00
Sergio Brighenti
5d99a96f84
Merge pull request #554 from SrS2225a/master
Add support for kde integration
2024-01-04 00:04:40 +01:00
dependabot[bot]
68a428b33f
Bump aws/aws-sdk-php from 3.271.3 to 3.294.5
Bumps [aws/aws-sdk-php](https://github.com/aws/aws-sdk-php) from 3.271.3 to 3.294.5.
- [Release notes](https://github.com/aws/aws-sdk-php/releases)
- [Commits](https://github.com/aws/aws-sdk-php/compare/3.271.3...3.294.5)

---
updated-dependencies:
- dependency-name: aws/aws-sdk-php
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-22 00:11:25 +00:00
SrS2225a
76eecb298b added support for kde intergration 2023-12-17 13:44:29 -08:00
Sergio Brighenti
903f87e693
Merge pull request #547 from samrzhevsky/master
LDAP fixes
2023-12-17 10:45:49 +01:00
Lukas Schulze
eee497669e Add link to file preview which opens the file itself 2023-12-10 20:22:49 +01:00
samrzhevsky
e7a0a99fe6
LDAP fixes
1. Changed `ldap_connect` error handling. `ldap_error` expects `LDAP\Connection`, and `ldap_connect` returns `false` if the syntax check fails
2. Fixed deprecation: passing null to parameter (`$ignore`) of type string
3. Fixed PHPDoc types for compatibility with PHP 8.1+
2023-08-28 00:31:22 +03:00
Sergio Brighenti
ee55a9ea3a
Merge pull request #539 from weblate/weblate-xbackbone-xbackbone
Translations update from Hosted Weblate
2023-08-14 22:46:06 +02:00
Sergio Brighenti
7f07ecdfad
Merge pull request #507 from SrS2225a/master
Support For Vanity Urls
2023-08-14 22:45:48 +02:00
SrS2225a
a11a9307ea corrected styleCI issues for sql querys 2023-08-13 23:40:06 -07:00
SrS2225a
32b8a16c40 readded missing function createVanity 2023-08-13 23:29:41 -07:00
SrS2225a
c8c540ff50 fixed grunt conflicts and corrected the lang key 2023-08-13 22:45:37 -07:00
SrS2225a
c8fac0a578 Merge branch 'master' of https://github.com/SergiX44/XBackBone
# Conflicts:
#	app/Controllers/MediaController.php
2023-08-13 22:00:19 -07:00
J. Lavoie
35a2e59c6c
Translated using Weblate (French (Canada))
Currently translated at 100.0% (160 of 160 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/fr_CA/
2023-06-29 23:49:23 +02:00
J. Lavoie
95b4435e6f
Translated using Weblate (Italian)
Currently translated at 100.0% (160 of 160 strings)

Translation: XBackBone/XBackBone
Translate-URL: https://hosted.weblate.org/projects/xbackbone/xbackbone/it/
2023-06-29 23:49:22 +02:00
Sergio Brighenti
0951638dc8
Merge pull request #533 from cursey/feature/upload-response-raw-url 2023-05-31 09:54:11 +02:00
cursey
d3fde3e298
Upload: Response now includes raw_url as well 2023-05-29 21:57:55 -07:00
SrS2225a
69d6ae298e style ci fix 2023-01-17 21:39:40 -08:00
SrS2225a
acaceea3f1 added fixes per request by author 2023-01-17 21:17:52 -08:00
SrS2225a
58744bd092 fixed code styling issues 2022-12-30 21:44:51 -08:00
SrS2225a
4deedda3b6 bug fixes for vanity links 2022-12-19 19:42:08 -08:00
SrS2225a
d6dce885d2 added support for vanity links 2022-12-18 21:54:18 -08:00
SrS2225a
d823230c35 Merge branch 'master' of https://github.com/SrS2225a/XBackBone 2022-12-18 21:53:08 -08:00
SrS2225a
634956cb2d added support for vanity links 2022-12-18 21:22:15 -08:00
37 changed files with 842 additions and 401 deletions

View file

@ -5,6 +5,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## Unreleased
## [3.7.0] - 2024-01-14
### Added
- Added support for vanity urls.
- Added KDE integration for linux script.
### Changed
- Updated translations.
- File preview is now clickable to open the file.
### Fixed
- Fixes for LDAP authentication.
## [3.6.3] - 2023-05-27
### Fixed
- Fix LDAP for php >= 8.1

View file

@ -27,7 +27,7 @@ abstract class AuthController extends Controller
/**
* Connects to LDAP server and logs in with service account (if configured)
* @return resource|false
* @return \LDAP\Connection|resource|false
*/
public function ldapConnect()
{
@ -39,7 +39,7 @@ abstract class AuthController extends Controller
$ldapSchema=(@is_string($this->config['ldap']['schema'])) ?
strtolower($this->config['ldap']['schema']) : 'ldap';
$ldapURI="$ldapSchema://".$this->config['ldap']['host'].':'.$this->config['ldap']['port'];
// Connecting to LDAP server
$this->logger->debug("Connecting to $ldapURI");
$server = ldap_connect($ldapURI);
@ -48,18 +48,18 @@ abstract class AuthController extends Controller
ldap_set_option($server, LDAP_OPT_REFERRALS, 0);
ldap_set_option($server, LDAP_OPT_NETWORK_TIMEOUT, 10);
} else {
$this->logger->error(ldap_error($server));
$this->logger->error('LDAP-URI was not parseable');
return false;
}
// Upgrade to StartTLS
$useStartTLS = @is_bool($this->config['ldap']['useStartTLS']) ? $this->config['ldap']['useStartTLS'] : false;
if (($useStartTLS === true) && (ldap_start_tls($server) === false)) {
$this->logger-debug(ldap_error($server));
$this->logger->debug(ldap_error($server));
$this->logger->error("Failed to establish secure LDAP swith StartTLS");
return false;
}
// Authenticating LDAP service account (if configured)
$serviceAccountFQDN= (@is_string($this->config['ldap']['service_account_dn'])) ?
$this->config['ldap']['service_account_dn'] : null;
@ -77,7 +77,7 @@ abstract class AuthController extends Controller
/**
* Returns User's LDAP DN
* @param string $username
* @param resource $server LDAP Server Resource
* @param \LDAP\Connection|resource $server LDAP Server Resource
* @return string|null
*/
protected function getLdapRdn(string $username, $server)
@ -85,7 +85,7 @@ abstract class AuthController extends Controller
//Dynamic LDAP User Binding
if (@is_string($this->config['ldap']['search_filter'])) {
//Replace ???? with username
$searchFilter = str_replace('????', ldap_escape($username, null, LDAP_ESCAPE_FILTER), $this->config['ldap']['search_filter']);
$searchFilter = str_replace('????', ldap_escape($username, '', LDAP_ESCAPE_FILTER), $this->config['ldap']['search_filter']);
$ldapAddributes = array('dn');
$this->logger->debug("LDAP Search filter: $searchFilter");
$ldapSearchResp = ldap_search(
@ -112,7 +112,7 @@ abstract class AuthController extends Controller
if ($this->config['ldap']['user_domain'] !== null) {
$bindString .= ','.$this->config['ldap']['user_domain'];
}
if ($this->config['ldap']['base_domain'] !== null) {
$bindString .= ','.$this->config['ldap']['base_domain'];
}

View file

@ -114,4 +114,35 @@ class ClientController extends Controller
]
);
}
/**
* @param Request $request
* @param Response $response
* @param int $id
*
* @return Response
* @throws \Twig\Error\LoaderError
* @throws \Twig\Error\RuntimeError
* @throws \Twig\Error\SyntaxError
*/
public function getKDEScript(Request $request, Response $response, int $id): Response
{
$user = make(UserRepository::class)->get($request, $id, true);
if (!$user->token) {
$this->session->alert(lang('no_upload_token'), 'danger');
return redirect($response, $request->getHeaderLine('Referer'));
}
return view()->render(
$response->withHeader('Content-Disposition', 'attachment;filename="xbackbone_uploader_'.$user->username.'.sh"'),
'scripts/xbackbone_kde_uploader.sh.twig',
[
'username' => $user->username,
'upload_url' => route('upload'),
'token' => $user->token,
]
);
}
}

View file

@ -188,6 +188,43 @@ class MediaController extends Controller
return $this->streamMedia($request, $response, $this->storage, $media, 'attachment');
}
/**
* @param Request $request
* @param Response $response
* @param string $vanity
* @param string $id
*
* @return Response
* @throws HttpNotFoundException
* @throws HttpBadRequestException
*/
public function createVanity(Request $request, Response $response, int $id): Response
{
$media = $this->database->query('SELECT * FROM `uploads` WHERE `id` = ? LIMIT 1', $id)->fetch();
$vanity = param($request, 'vanity');
$vanity = preg_replace('/[^a-z0-9]+/', '-', strtolower($vanity));
//handle collisions
$collision = $this->database->query('SELECT * FROM `uploads` WHERE `code` = ? AND `id` != ? LIMIT 1', [$vanity, $id])->fetch();
if (!$media) {
throw new HttpNotFoundException($request);
}
if ($vanity === '' || $collision) {
throw new HttpBadRequestException($request);
}
$this->database->query('UPDATE `uploads` SET `code` = ? WHERE `id` = ?', [$vanity, $media->id]);
$media->code = $vanity;
$response->getBody()->write(json_encode($media));
$this->logger->info('User '.$this->session->get('username').' created a vanity link for media '.$media->id);
return $response;
}
/**
* @param Request $request
* @param Response $response

View file

@ -208,6 +208,7 @@ class UploadController extends Controller
$this->json['message'] = 'OK';
$this->json['url'] = urlFor("/{$user->user_code}/{$code}.{$fileInfo['extension']}");
$this->json['raw_url'] = urlFor("/{$user->user_code}/{$code}/raw.{$fileInfo['extension']}");
$this->logger->info("User $user->username uploaded new media.", [$mediaId]);

View file

@ -208,21 +208,38 @@ class MediaRepository
array_multisort(array_column($files, 'size'), $this->buildOrderBy(), SORT_NUMERIC, $files);
$params = [];
$queryPagesParams = [];
if ($this->text !== null) {
if ($this->isAdmin) {
[$queryMedia,] = $this->buildAdminQueries();
[$queryMedia, $queryPages] = $this->buildAdminQueries();
} else {
[$queryMedia,] = $this->buildUserQueries();
[$queryMedia, $queryPages] = $this->buildUserQueries();
$params[] = $this->userId;
}
$params[] = '%'.htmlentities($this->text).'%';
$queryPagesParams = $params;
$paths = array_column($files, 'path');
} elseif ($this->tagId !== null) {
if ($this->isAdmin) {
[, $queryPages] = $this->buildAdminQueries();
} else {
[, $queryPages] = $this->buildUserQueries();
$queryPagesParams[] = $this->userId;
}
$paths = array_column($files, 'path');
$ids = $this->getMediaIdsByTagId($this->tagId);
$queryMedia = 'SELECT `uploads`.*, `users`.`user_code`, `users`.`username` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id` WHERE `uploads`.`storage_path` IN ("'.implode('","', $paths).'") AND `uploads`.`id` IN ('.implode(',', $ids).')';
} else {
if ($this->isAdmin) {
[, $queryPages] = $this->buildAdminQueries();
} else {
[, $queryPages] = $this->buildUserQueries();
$queryPagesParams[] = $this->userId;
}
$files = array_slice($files, $offset, $limit, true);
$paths = array_column($files, 'path');
$queryMedia = 'SELECT `uploads`.*, `users`.`user_code`, `users`.`username` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id` WHERE `uploads`.`storage_path` IN ("'.implode('","', $paths).'")';
@ -253,7 +270,7 @@ class MediaRepository
}
}
$this->pages = count($this->media) / $limit;
$this->pages = $this->db->query($queryPages, $queryPagesParams)->fetch()->count / $limit;
if ($this->text !== null || $this->tagId !== null) {
$this->media = array_slice($this->media, $offset, $limit, true);

2
app/routes.php Normal file → Executable file
View file

@ -57,11 +57,13 @@ $app->group('', function (RouteCollectorProxy $group) {
$group->post('/user/{id}/refreshToken', [UserController::class, 'refreshToken'])->setName('refreshToken');
$group->get('/user/{id}/config/sharex', [ClientController::class, 'getShareXConfig'])->setName('config.sharex');
$group->get('/user/{id}/config/script', [ClientController::class, 'getBashScript'])->setName('config.script');
$group->get('/user/{id}/config/kde_script', [ClientController::class, 'getKDEScript'])->setName('kde_config.script');
$group->get('/user/{id}/export', [ExportController::class, 'downloadData'])->setName('export.data');
$group->post('/upload/{id}/publish', [MediaController::class, 'togglePublish'])->setName('upload.publish');
$group->post('/upload/{id}/unpublish', [MediaController::class, 'togglePublish'])->setName('upload.unpublish');
$group->post('/upload/{id}/vanity', [MediaController::class, 'createVanity'])->setName('upload.vanity');
$group->get('/upload/{id}/raw', [MediaController::class, 'getRawById'])->add(AdminMiddleware::class)->setName('upload.raw');
$group->map(['GET', 'POST'], '/upload/{id}/delete', [MediaController::class, 'delete'])->setName('upload.delete');

View file

@ -1,7 +1,7 @@
{
"name": "sergix44/xbackbone",
"license": "AGPL-3.0-only",
"version": "3.6.3",
"version": "3.7.0",
"description": "A lightweight ShareX PHP backend",
"type": "project",
"require": {

781
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,18 @@ nav_order: 9
---
# Changelog
## [3.7.0] - 2024-01-14
### Added
- Added support for vanity urls.
- Added KDE integration for linux script.
### Changed
- Updated translations.
- File preview is now clickable to open the file.
### Fixed
- Fixes for LDAP authentication.
## [3.6.3] - 2023-05-27
### Fixed
- Fix LDAP for php >= 8.1

28
package-lock.json generated
View file

@ -339,12 +339,12 @@
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@ -805,9 +805,9 @@
"dev": true
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@ -3216,12 +3216,12 @@
}
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
"fill-range": "^7.1.1"
}
},
"buffer": {
@ -3609,9 +3609,9 @@
"dev": true
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"

View file

@ -17,9 +17,9 @@ return [
'pager.next' => 'التالي',
'pager.previous' => 'السابق',
'copy_link' => 'نسخ الرابط',
'public.telegram' => 'مشاركة عبر تلغرام',
'public.delete_text' => 'هل تريد بالتأكيد حذف هذا العنصر؟ سيحذف نهائيا!',
'preview' => 'السابق',
'public.telegram' => 'شارك على تيليجرام',
'public.delete_text' => 'هل أنت متأكد من أنك تريد حذف هذا العنصر؟ لن تتمكن من استعادته',
'preview' => 'استعراض',
'filename' => 'اسم الملف',
'size' => 'حجم',
'public' => 'عام',
@ -59,13 +59,13 @@ return [
'account_disabled' => 'حسابك معطل.',
'welcome' => 'مرحبا، %s!',
'goodbye' => 'وداعا!',
'email_required' => 'البريد الإلكتروني مطلوب.',
'email_taken' => 'البريد الإلكتروني قيد الاستخدام.',
'email_required' => 'عنوان البريد الإلكتروني مطلوب.',
'email_taken' => 'عنوان البريد الإلكتروني قيد الاستخدام بالفعل.',
'username_required' => 'اسم المستخدم مطلوب.',
'username_taken' => 'اسم المستخدم قيد الاستخدام.',
'password_required' => 'كلمة المرور مطلوبة.',
'user_created' => 'المستخدم "%s" أنشئ!',
'user_updated' => 'المستخدم "%s" تم تحديثه!',
'user_created' => 'تم إنشاء المستخدم "٪s"!',
'user_updated' => 'تم تحديث المستخدم "%s"!',
'profile_updated' => 'تم تحديث الملف الشخصي بنجاح!',
'user_deleted' => 'تم حذف المستخدم.',
'cannot_delete' => 'لا يمكنك حذف نفسك.',
@ -73,8 +73,8 @@ return [
'switch_to' => 'تبديل إلى',
'gallery' => 'معرض',
'table' => 'جدول',
'dotted_search' => 'بحث...',
'order_by' => 'ترتيب حسب...',
'dotted_search' => 'بحث',
'order_by' => 'ترتيب حسب',
'time' => 'وقت',
'name' => 'اسم',
'maintenance' => 'صيانة',
@ -88,7 +88,7 @@ return [
'updates' => 'تحديثات',
'cancel' => 'إلغاء',
'auto_set' => 'حدد تلقائيا',
'prerelease_channel' => 'قناة إصدار تجريبي',
'prerelease_channel' => 'قناة ما قبل الإصدار',
'drop_to_upload' => 'انقر أو اسحب ملفاتك هنا للرفع.',
'donation' => 'تبرع',
'remember_me' => 'تذكرني',
@ -101,7 +101,7 @@ return [
'password_recovery' => 'استعادة كلمة المرور',
'no_account' => 'لا تملك حسابا؟',
'register' => 'تسجيل',
'register_success' => 'تم إنشاء الحساب، تم إرسال رسالة تأكيد إلكترونية.',
'register_success' => 'تم إنشاء الحساب، تم إرسال رسالة تأكيد عبر البريد الإلكتروني.',
'mail.activate_account' => '%s - تفعيل الحساب',
'mail.recover_password' => '%s - استعادة كلمة المرور',
'recover_email_sent' => 'إن وجد، سيتم إرسال رسالة إلكترونية لاستعادة كلمة المرور إلى الحساب المحدد.',
@ -115,8 +115,51 @@ return [
'clear_account' => 'مسح الحساب',
'account_media_deleted' => 'كل الوسائط في الحساب تم حذفها.',
'danger_zone' => 'منطقة خطرة',
'send_notification' => 'إرسال رسالة إشعار إلكترونية',
'send_notification' => 'إرسال إشعار بالبريد الإلكتروني',
'mail.new_account' => '%s - إنشاء حساب جديد',
'php_info' => 'معلومات PHP',
'enforce_language' => 'اللغة الافتراضية',
'php_info' => 'معلومات الPHP',
'enforce_language' => 'فرض اللغة',
'image_embeds' => 'تضمين الصور',
'token_not_found' => 'لم يتم العثور على الرمز المميز المحدد.',
'clean_orphaned_uploads' => 'تنظيف التحميلات المعزولة',
'show_all_tags' => 'إظهار جميع العلامات',
'cannot_demote' => 'لا يمكنك تخفيض رتبتك.',
'recaptcha_secret_key' => 'المفتاح السري reCAPTCHA',
'recaptcha_failed' => 'فشل reCAPTCHA',
'recaptcha_enabled' => 'تم تفعيل reCAPTCHA',
'default_user_quota' => 'الحصة الافتراضية للمستخدم',
'invalid_quota' => 'قيم غير صالحة كحصة مستخدم افتراضية.',
'copy_url_behavior' => 'نسخ وضع الرابط',
'token' => 'الرمز المميز',
'vanity_url' => 'رابط مخصص',
'orphaned_files' => 'الملفات المعزولة',
'copied' => 'تم النسخ إلى الحافظة!',
'client_config' => 'إعدادات العميل',
'deleted_orphans' => 'تم حذف %d من الملفات المعزولة بنجاح.',
'maintenance_in_progress' => 'المنصة تحت الصيانة، حاول مرة أخرى لاحقاً…',
'default_lang_behavior' => 'سيحاول XBackBone مطابقة لغة المتصفح افتراضيا (الاحتياطي هو الإنجليزية).',
'no_upload_token' => 'ليس لديك رمز مميز شخصي للتحميل. (قم بإنشاء واحد وحاول مرة أخرى.)',
'donate_text' => 'إذا كنت تحب XBackBone، ففكر في التبرع لدعم التطوير!',
'custom_head_html' => 'محتوى رأس HTML مخصص',
'custom_head_html_hint' => 'ستتم إضافة هذا المحتوى عند علامة <head> في كل صفحة.',
'custom_head_set' => 'تم تطبيق رأس HTML المخصص.',
'max_user_quota' => 'الحد الأقصى لحصة المستخدم',
'quota_enabled' => 'تفعيل حصة المستخدم',
'recalculate_user_quota' => 'إعادة حساب حصة المستخدم من القرص',
'mail.activate_text' => 'مرحبًا %s!<br>شكرًا لك على إنشاء حسابك على %s (<a href="%s">%s</a>)، انقر على الرابط التالي لتفعيله:<br><br><a href="%s">%s</a>',
'quota_recalculated' => 'تمت إعادة حساب حصة المستخدم من القرص بنجاح.',
'only_recaptcha_v3' => 'يتم دعم reCAPTCHA v3 فقط.',
'recaptcha_site_key' => 'مفتاح موقع reCAPTCHA',
'ldap_cant_connect' => 'لا يمكن الاتصال بخادم مصادقة LDAP.',
'upload_max_file_size' => 'الحد الأقصى لحجم الملف حاليًا هو %s.',
'zip_ext_not_loaded' => 'لم يتم تحميل الامتداد "zip" المطلوب',
'no_tags' => 'لم تتم إضافة أي علامات',
'changelog' => 'سجل التغيير',
'show_changelog' => 'عرض سجل التغيير',
'auto_tagging' => 'تحميل العلامات تلقائيًا',
'recaptcha_keys_required' => 'جميع مفاتيح reCAPTCHA مطلوبة.',
'user_create_password' => 'إذا تركت فارغة، فقد تحتاج إلى إرسال إعلام إلى عنوان البريد الإلكتروني للمستخدم.',
'mail.recover_text' => 'مرحبًا %s،<br>لقد تم طلب إعادة تعيين كلمة المرور لحسابك. لإكمال الإجراء انقر على الرابط التالي:<br><br><a href="%s">%s</a><br><br>إذا لم تكن أنت من طلب إعادة تعيين كلمة المرور، فما عليك سوى تجاهل هذا البريد الإلكتروني.',
'mail.new_account_text_with_reset' => 'مرحبًا %s!<br>تم إنشاء حساب جديد لك على %s (<a href="%s">%s</a>)، انقر على الرابط التالي لتعيين كلمة مرور وتنشيطها:<br ><br><a href="%s">%s</a>',
'mail.new_account_text_with_pw' => 'مرحبًا %s!<br>تم إنشاء حساب جديد لك على %s (<a href="%s">%s</a>)، باستخدام بيانات الاعتماد التالية:<br><br>اسم المستخدم: %s <br>كلمة المرور: %s<br><br>انقر على الرابط التالي للانتقال إلى صفحة تسجيل الدخول:<br><a href="%s">%s</a>',
];

View file

@ -54,7 +54,7 @@ return [
'reg_date' => 'Registrierungsdatum',
'none' => 'keine',
'open' => 'Öffnen',
'confirm' => 'Bestätigung',
'confirm' => 'Bestätigen',
'confirm_string' => 'Bist du sicher?',
'installed' => 'Installation erfolgreich abgeschlossen!',
'bad_login' => 'Falsche Anmeldeinformationen.',
@ -153,6 +153,7 @@ return [
'mail.new_account' => '%s Erstellung von Konto',
'user_create_password' => 'Wenn das leer bleibt, wollen Sie vielleicht eine Benachrichtigung an die Benutzer per E-Mail senden.',
'no_tags' => 'Keine Tags hinzugefügt',
'show_all_tags' => 'Alle Tags anzeigen',
'upload_max_file_size' => 'Die maximale Dateigröße beträgt derzeit %s.',
'ldap_cant_connect' => 'Es kann keine Verbindung zum LDAP-Auth-Server hergestellt werden.',
'zip_ext_not_loaded' => 'Die zip-Erweiterung ist erforderlich',
@ -165,4 +166,5 @@ return [
'changelog' => 'Änderungsprotokoll',
'copied' => 'In Zwischenablage kopiert!',
'image_embeds' => 'Bilder einbetten',
'vanity_url' => 'Benutzerdefinierte URL',
];

4
resources/lang/en.lang.php Normal file → Executable file
View file

@ -30,6 +30,8 @@ return [
'download' => 'Download',
'upload' => 'Upload',
'delete' => 'Delete',
'confirm' => 'Confirm',
'vanity_url' => 'Custom URL',
'publish' => 'Publish',
'hide' => 'Hide',
'files' => 'Files',
@ -58,7 +60,6 @@ return [
'reg_date' => 'Registration Date',
'none' => 'None',
'open' => 'Open',
'confirm' => 'Confirmation',
'confirm_string' => 'Are you sure?',
'installed' => 'Installation completed successfully!',
'bad_login' => 'Wrong credentials.',
@ -155,6 +156,7 @@ return [
'ldap_cant_connect' => 'Can\'t connect to the LDAP auth server.',
'upload_max_file_size' => 'The max file size is currently %s.',
'no_tags' => 'No tags added',
'show_all_tags' => 'Show all tags',
'auto_tagging' => 'Auto upload tagging',
'zip_ext_not_loaded' => 'The required "zip" extension is not loaded',
'changelog' => 'Changelog',

View file

@ -54,7 +54,7 @@ return [
'reg_date' => 'Fecha de Registración',
'none' => 'Ninguno',
'open' => 'Abrir',
'confirm' => 'Confirmación',
'confirm' => 'Confirmar',
'confirm_string' => '¿Está seguro?',
'installed' => '¡Instalación completa!',
'bad_login' => 'Credenciales incorrectas.',
@ -129,8 +129,8 @@ return [
'upload_max_file_size' => 'El tamaño máximo del archivo es actualmente %s.',
'ldap_cant_connect' => 'No se puede conectar con el servidor de autentificación LDAP.',
'user_create_password' => 'Si se deja vacío, es posible que desee enviar una notificación a la dirección de correo electrónico del usuario.',
'mail.new_account_text_with_pw' => 'Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
'mail.new_account_text_with_reset' => 'Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
'mail.new_account_text_with_pw' => '¡Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
'mail.new_account_text_with_reset' => '¡Hola, %s!<br>Se creó una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br ><br><a href="%s">%s</a>',
'recaptcha_enabled' => 'reCAPTCHA activado',
'account_media_deleted' => 'Se han eliminado todos los archivos de la cuenta.',
'clear_account' => 'Limpiar cuenta',
@ -165,4 +165,6 @@ return [
'recaptcha_site_key' => 'Clave del sitio reCAPTCHA',
'only_recaptcha_v3' => 'Solo reCAPTCHA v3 está soportado.',
'custom_head_set' => 'Cabecera HTML personalizada aplicada.',
'vanity_url' => 'URL personalizada',
'show_all_tags' => 'Mostrar todas las etiquetas',
];

View file

@ -35,7 +35,7 @@ return [
'bad_login' => 'Väärät kirjautumistiedot.',
'installed' => 'Asennus suoritettu loppuun onnistuneesti!',
'confirm_string' => 'Oletko varma?',
'confirm' => 'Vahvistus',
'confirm' => 'Vahvista',
'open' => 'Auki',
'none' => 'Ei mitään',
'reg_date' => 'Rekisteröitymis päivä',
@ -160,4 +160,5 @@ return [
'invalid_quota' => 'Virheelliset arvot oletuskäyttäjäkiintiönä.',
'mail.recover_text' => 'Hei %s, <br>tilillesi on pyydetty salasanan palautusta. Suorita toimenpide napsauttamalla seuraavaa linkkiä:<br><br><a href="%s">%s</a><br><br>Jos et ollut sinä, joka pyysit salasanan vaihtamista, ohita tämä sähköposti.',
'quota_enabled' => 'Käyttäjäkiintiön ottaminen käyttöön',
'vanity_url' => 'Mukautettu URL',
];

View file

@ -54,7 +54,7 @@ return [
'reg_date' => 'Date d\'inscription',
'none' => 'Aucun',
'open' => 'Ouvrir',
'confirm' => 'Confirmation',
'confirm' => 'Confirmer',
'confirm_string' => 'Êtes-vous sûr·e ?',
'installed' => 'L\'installation s\'est déroulée avec succès!',
'bad_login' => 'Identifiant ou mot de passe incorrect.',
@ -162,4 +162,5 @@ return [
'zip_ext_not_loaded' => 'L\'extension zip requise n\'est pas chargée',
'copied' => 'Copié dans le presse-papier !',
'image_embeds' => 'Intégrer des images',
'vanity_url' => 'URL personnalisée',
];

View file

@ -64,7 +64,7 @@ return [
'cancel' => 'Annuler',
'maintenance_in_progress' => 'Plateforme en maintenance, réessayez plus tard…',
'updates' => 'Mises à jour',
'upgrade' => 'Mettre à jour',
'upgrade' => 'Mettre à niveau',
'check_for_updates' => 'Vérifier les mises à jour',
'file_size_no_match' => 'Le fichier téléchargé n\'a pas la taille correcte.',
'cannot_retrieve_file' => 'Impossible de retrouver le fichier.',
@ -107,7 +107,7 @@ return [
'lang' => 'Français (Canada)',
'mail.new_account_text_with_pw' => 'Bonjour %s! <br> un nouveau compte a été créé pour vous sur %s (<a href="%s">% s</a>), avec les informations d\'identification suivantes : <br> <br> Nom d\'utilisateur :%s <br> Mot de passe :%s <br> <br> Cliquez sur le lien suivant pour accéder à la page de connexion : <br> <a href="%s">%s </a>',
'maintenance' => 'Maintenance',
'confirm' => 'Confirmation',
'confirm' => 'Confirmer',
'user_create_password' => 'Si laissé vide, vous souhaiterez peut-être envoyer une notification à l\'utilisateur par courriel.',
'mail.new_account' => '%s Création d\'un nouveau compte',
'mail.recover_password' => '%s Récupération de mot de passe',
@ -160,4 +160,5 @@ return [
'enforce_language' => 'Forcer la langue',
'copied' => 'Copié dans le presse-papier!',
'image_embeds' => 'Intégrer des images',
'vanity_url' => 'URL personnalisée',
];

View file

@ -158,6 +158,7 @@ return [
'no' => 'Nem',
'yes' => 'Igen',
'enforce_language' => 'A nyelv érvényesítése',
'lang' => 'Angol',
'lang' => 'Magyar',
'image_embeds' => 'Képek beágyazása',
'vanity_url' => 'Egyedi URL',
];

View file

@ -160,4 +160,5 @@ return [
'custom_head_set' => 'Head HTML khusus diterapkan.',
'path_not_writable' => 'Destinasi berkas tidak dapat ditulis.',
'image_embeds' => 'Sematkan gambar',
'vanity_url' => 'URL kostum',
];

View file

@ -39,10 +39,10 @@ return [
'save' => 'Salva',
'used' => 'Usato',
'system_info' => 'Informazioni di Sistema',
'user.create' => 'Crea Utente',
'user.edit' => 'Modifica Utente',
'is_active' => 'Attivo',
'is_admin' => 'Amministratore',
'user.create' => 'Crea utente',
'user.edit' => 'Modifica utente',
'is_active' => 'È attivo',
'is_admin' => 'È amministratore',
'your_profile' => 'Il tuo profilo',
'token' => 'Token',
'copy' => 'Copia',
@ -162,4 +162,5 @@ return [
'show_changelog' => 'Mostra registro dei cambiamenti',
'copied' => 'Copiato negli appunti!',
'image_embeds' => 'Incorpora immagini',
'vanity_url' => 'URL personalizzato',
];

View file

@ -101,7 +101,7 @@ return [
'account_disabled' => '당신의 계정은 비활성 상태입니다.',
'bad_login' => '잘못된 자격증명입니다.',
'installed' => '설치가 완료되었어요!',
'confirm' => '확인',
'confirm' => '확인',
'confirm_string' => '확실한가요?',
'open' => '열기',
'none' => '없음',
@ -160,4 +160,5 @@ return [
'yes' => '확인',
'enforce_language' => '언어 설정',
'lang' => 'Korean',
'vanity_url' => '사용자 정의 URL',
];

View file

@ -54,7 +54,7 @@ return [
'reg_date' => 'Registratiedatum',
'none' => 'Geen',
'open' => 'Open',
'confirm' => 'Bevestiging',
'confirm' => 'Bevestig',
'confirm_string' => 'Weet je het zeker?',
'installed' => 'Installatie succesvol voltooid!',
'bad_login' => 'Verkeerde verificatiegegevens.',
@ -101,9 +101,9 @@ return [
'lang_name' => 'Taal',
'default_lang_behavior' => 'XBackBone probeert standaard de taal van de browser te matchen (fallback is Engels).',
'lang_set' => 'Systeemtaal "%s" afgedwongen',
'show_changelog' => 'Changelog weergeven',
'changelog' => 'Changelog',
'zip_ext_not_loaded' => 'De vereiste zip extensie is niet geladen',
'show_changelog' => 'Wijzigingslog weergeven',
'changelog' => 'Wijzigingslog',
'zip_ext_not_loaded' => 'De vereiste "zip" extensie is niet geladen',
'auto_tagging' => 'Automatisch tags aanmaken',
'no_tags' => 'Geen tags toegevoegd',
'upload_max_file_size' => 'De maximale bestandsgrootte is momenteel %s.',
@ -164,4 +164,7 @@ return [
'php_info' => 'PHP Informatie',
'upload' => 'Uploaden',
'copied' => 'Gekopieerd naar klembord!',
'vanity_url' => 'Eigen URL',
'image_embeds' => 'Afbeeldingen insluiten',
'show_all_tags' => 'Toon alle tags',
];

View file

@ -38,7 +38,7 @@ return [
'admin' => 'Admin',
'reg_date' => 'Data rejestracji',
'open' => 'Otwórz',
'confirm' => 'Potwierdzenie',
'confirm' => 'Potwierdź',
'confirm_string' => 'Jesteś pewien?',
'installed' => 'Instalacja zakończona pomyślnie!',
'welcome' => 'Witaj, %s!',
@ -162,4 +162,5 @@ return [
'mail.activate_text' => 'Cześć %s!<br>dziękuję za utworzenie konta na %s (<a href="%s">%s</a>), kliknij w poniższy link, aby je aktywować:<br><br><a href="%s">%s</a>',
'image_embeds' => 'Osadź obrazy',
'copied' => 'Skopiowano!',
'vanity_url' => 'Niestandardowy adres URL',
];

View file

@ -26,7 +26,7 @@ return [
'owner' => 'Dono',
'date' => 'Data',
'raw' => 'Mostrar raw',
'download' => 'Transferir',
'download' => 'Descarregar',
'delete' => 'Apagar',
'publish' => 'Publicar',
'hide' => 'Esconder',
@ -54,7 +54,7 @@ return [
'reg_date' => 'Data de registo',
'none' => 'Nenhum',
'open' => 'Abrir',
'confirm' => 'Confirmação',
'confirm' => 'Confirmar',
'confirm_string' => 'Tem a certeza?',
'installed' => 'Instalação completa com sucesso!',
'bad_login' => 'Login inválido.',
@ -161,4 +161,5 @@ return [
'register' => 'Registar',
'settings_saved' => 'Definições de sistema guardadas!',
'image_embeds' => 'Embutir imagens',
'vanity_url' => 'URL personalizado',
];

View file

@ -45,16 +45,16 @@ return [
'your_profile' => 'Ваш профиль',
'token' => 'Ключ',
'copy' => 'Копировать',
'update' => 'Обновить',
'update' => 'Обновление',
'edit' => 'Редактировать',
'client_config' => 'Конфигурация клиента',
'user_code' => 'Код пользователя',
'active' => 'Активен',
'active' => 'Активный',
'admin' => 'Админ',
'reg_date' => 'Дата регистрации',
'none' => 'Нет',
'none' => 'Никак',
'open' => 'Открыть',
'confirm' => 'Подтверждение',
'confirm' => 'Потвердить',
'confirm_string' => 'Вы уверены?',
'installed' => 'Установка успешно завершена!',
'bad_login' => 'Неверные учетные данные.',
@ -163,6 +163,7 @@ return [
'copied' => 'Скопировано!',
'system_settings' => 'Системные настройки',
'upload' => 'Выгрузить',
'php_info' => 'Инфо о PHP',
'php_info' => 'Информация о PHP',
'image_embeds' => 'Встроенные изображения',
'vanity_url' => 'Пользовательский URL',
];

View file

@ -155,9 +155,11 @@ return [
'cannot_write_file' => 'Destinationens sökväg är ej skrivbar.',
'cannot_demote' => 'Du kan inte degradera dig själv.',
'token_not_found' => 'Den token som angavs hittades inte.',
'confirm' => 'Bekräftelse',
'confirm' => 'Bekräfta',
'copied' => 'Kopierat till urklipp!',
'token' => 'Token',
'orphaned_files' => 'Föräldralösa Filer',
'image_embeds' => 'Inbäddade bilder',
'vanity_url' => 'Anpassad URL',
'show_all_tags' => 'Visa alla taggar',
];

View file

@ -15,7 +15,7 @@ return [
'filename' => 'Dosya adı',
'preview' => 'Ön izleme',
'public.delete_text' => 'Bu ögeyi silmek istediğinizden emin misiniz? Geri dönüşü olmayacaktır',
'public.telegram' => 'Telegram\'da paylaş !',
'public.telegram' => 'Telegram\'da paylaş',
'copy_link' => 'Bağlantıyı kopyala',
'pager.previous' => 'Önceki',
'pager.next' => 'Sonraki',
@ -148,7 +148,7 @@ return [
'zip_ext_not_loaded' => 'Gereken "zip" eklentisi yüklenmedi',
'changelog' => 'Değişiklik Günlüğü (Yama Notları)',
'show_changelog' => 'Değişiklik günlüğünü göster',
'confirm' => 'Onay',
'confirm' => 'Onayla',
'user_created' => '"%s" kullanıcısı oluşturuldu!',
'user_updated' => '"%s" kullanıcısı güncellendi!',
'profile_updated' => 'Profil başarıyla güncellendi!',
@ -160,4 +160,6 @@ return [
'custom_head_set' => 'Özel HTML başlığı uygulandı.',
'mail.activate_text' => 'Merhaba %s!<br>%s (<a href="%s">%s</a>) hesabınızı oluşturduğunuz için teşekkür ederiz, etkinleştirmek için aşağıdaki bağlantıya tıklayın:<br><br><a href="%s">%s</a>',
'switch_to' => 'Şuna geç',
'vanity_url' => 'Özel URL',
'show_all_tags' => 'Tüm etiketleri göster',
];

View file

@ -5,7 +5,7 @@ return [
'yes' => '是',
'enforce_language' => '默认语言',
'no' => '否',
'lang' => '英语',
'lang' => '中文(简体)',
'copy_link' => '复制链接',
'size' => '大小',
'download' => '下载',
@ -152,4 +152,13 @@ return [
'no_tags' => '未添加标签',
'mail.recover_text' => 'Hi %s,<br>已为您的帐户请求重置密码。要完成该过程,请单击以下链接:<br><br><a href="%s">%s</a><br><br>如果不是您要求重置密码,请忽略此电子邮件。',
'used' => '使用中',
'recaptcha_site_key' => 'reCAPTCHA 站点密钥',
'only_recaptcha_v3' => '只支持reCAPTCHA v3.',
'vanity_url' => '自定义网址',
'mail.new_account' => '新帐户创建',
'recaptcha_failed' => '验证失败',
'recaptcha_enabled' => '验证码启用',
'recaptcha_secret_key' => 'reCAPTCHA 密钥',
'prerelease_channel' => '预发布渠道',
'recaptcha_keys_required' => '所有 reCAPTCHA 密钥都是必需的。',
];

View file

@ -0,0 +1,19 @@
<div class="modal fade" id="modalVanity" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{{ lang('vanity_url') }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<input type="text" class="form-control" id="modalVanity-input" maxlength="64">
</div>
<div class="modal-footer">
<button class="btn btn-primary media-vanity" id="modalVanity-link"><i class="fas fa-check fa-fw"></i> {{ lang('confirm') }}</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ lang('no') }}</button>
</div>
</div>
</div>
</div>

2
resources/templates/dashboard/grid.twig Normal file → Executable file
View file

@ -28,6 +28,7 @@
{% else %}
<a class="btn btn-sm btn-info publish-toggle" data-toggle="tooltip" title="{{ lang('publish') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
{% endif %}
<button class="btn btn-info btn-sm public-vanity" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('vanity_url') }}"><i class="fas fa-star"></i></button>
<button type="button" class="btn btn-sm btn-danger media-delete" data-link="{{ route('upload.delete', {'id': media.id}) }}" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('delete') }}">
<i class="fas fa-trash"></i>
</button>
@ -68,4 +69,5 @@
<div class="text-center text-muted"><i>{{ lang('no_media') }}</i></div>
{% endif %}
</div>
{% include 'comp/modal_vanity.twig' %}
{% endblock %}

4
resources/templates/dashboard/list.twig Normal file → Executable file
View file

@ -6,6 +6,7 @@
{% include 'comp/navbar.twig' %}
<div class="container">
{% include 'comp/alert.twig' %}
{% include 'comp/modal_vanity.twig' %}
<div class="card shadow-sm">
<div class="card-body">
@ -32,6 +33,7 @@
{% for media in medias %}
<tr id="media_{{ media.id }}" class="bulk-selector" data-id="{{ media.id }}">
<td class="text-center">
<a href="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension) }}" target="_blank" class="text-dark">
{% if isDisplayableImage(media.mimetype) %}
{% if media.username is not null %}
<img src="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension ~ '/raw?width=84&height=42') }}" class="img-fluid rounded">
@ -41,6 +43,7 @@
{% else %}
<i class="far {{ mime2font(media.mimetype) }} fa-2x"></i>
{% endif %}
</a>
</td>
<td>
<span class="text-maxlen">{{ media.filename }}</span>
@ -77,6 +80,7 @@
{% else %}
<a href="javascript:void(0)" class="btn btn-sm btn-outline-info publish-toggle" data-toggle="tooltip" title="{{ lang('publish') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
{% endif %}
<a href="javascript:void(0)" class="btn btn-sm btn-outline-info public-vanity" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('vanity_url') }}"><i class="fas fa-star"></i></a>
<a href="javascript:void(0)" class="btn btn-sm btn-outline-danger media-delete" data-link="{{ route('upload.delete', {'id': media.id}) }}" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('delete') }}"><i class="fas fa-trash"></i></a>
</div>
</td>

View file

@ -16,6 +16,7 @@
{% if tags is empty %}
<h6 class="dropdown-header">{{ lang('no_tags') }}</h6>
{% else %}
<a class="dropdown-item" href="{{ route('home') }}">{{ lang('show_all_tags') }}</a>
{% for tag in tags %}
<a class="dropdown-item {{ request.queryParams['tag'] == tag.id ? 'active' }}" href="{{ queryParams({'tag': tag.id}) }}" data-id="{{ tag.id }}">{{ tag.name }}</a>
{% endfor %}

View file

@ -0,0 +1,52 @@
#!/bin/bash
create_desktop_entry() {
cat << "EOF" > "$HOME/.local/share/kio/servicemenus/xbackbone-uploader.desktop"
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
Icon=imaga
X-KDE-StartupNotify=false
X-KDE-Priority=TopLevel
MimeType=image/*;
Actions=xbackbone_upload
[Desktop Action xbackbone_upload]
Name=Upload with XBackBone
Exec=sh -c 'RESPONSE="$(curl -s -F "token={{ token }}" -F "upload=@%u" {{ upload_url }})"; if [ "$(echo "${RESPONSE}" | jq -r ".message")" = "OK" ]; then URL="$(echo "${RESPONSE}" | jq -r ".url")"; if [ "${DESKTOP_SESSION}" != "" ]; then echo "${URL}" | xclip -selection c; notify-send "Upload completed!" "${URL}"; else echo "${URL}"; fi; exit 0; else MESSAGE="$(echo "${RESPONSE}" | jq -r ".message")"; if [ $? -ne 0 ]; then echo "Unexpected response:"; echo "${RESPONSE}"; exit 1; fi; if [ "${DESKTOP_SESSION}" != "" ]; then notify-send "Error!" "${MESSAGE}"; else echo "Error! ${MESSAGE}"; fi; exit 1; fi'
Icon=image
EOF
echo "Service menu created!";
}
check() {
ERRORS=0;
if [ ! -x "$(command -v jq)" ]; then
echo "jq command not found.";
ERRORS=1;
fi
if [ ! -x "$(command -v curl)" ]; then
echo "curl command not found.";
ERRORS=1;
fi
if [ ! -x "$(command -v xclip)" ] && [ "${DESKTOP_SESSION}" != "" ]; then
echo "xclip command not found.";
ERRORS=1;
fi
if [ ! -x "$(command -v notify-send)" ] && [ "${DESKTOP_SESSION}" != "" ]; then
echo "notify-send command not found.";
ERRORS=1;
fi
if [ "${ERRORS}" -eq 1 ]; then
exit 1;
fi
}
check
create_desktop_entry

2
resources/templates/upload/public.twig Normal file → Executable file
View file

@ -49,6 +49,7 @@
<a href="{{ url }}/raw" class="btn btn-secondary my-2 my-sm-0" data-toggle="tooltip" title="{{ lang('raw') }}"><i class="fas fa-file-alt fa-lg fa-fw"></i></a>
<a href="{{ url }}/download" class="btn btn-warning my-2 my-sm-0" data-toggle="tooltip" title="{{ lang('download') }}"><i class="fas fa-cloud-download-alt fa-lg fa-fw"></i></a>
{% if session.get('logged') %}
<a href="javascript:void(0)" class="btn btn-info my-2 my-sm-0 public-vanity" data-link="{{ route('upload.vanity', {'id': media.mediaId}) }}" data-id="{{ media.mediaId }}" data-toggle="tooltip" title="{{ lang('vanity') }}"><i class="fas fa-star fa-lg fa-fw"></i></a>
<a href="javascript:void(0)" class="btn btn-danger my-2 my-sm-0 public-delete" data-link="{{ route('upload.delete', {'id': media.mediaId}) }}" data-toggle="tooltip" title="{{ lang('delete') }}"><i class="fas fa-trash fa-lg fa-fw"></i></a>
{% endif %}
</div>
@ -162,4 +163,5 @@
</div>
</div>
{% include 'comp/modal_delete.twig' %}
{% include 'comp/modal_vanity.twig' %}
{% endblock %}

View file

@ -66,7 +66,11 @@
<div class="btn-group">
<a href="{{ route('config.sharex', {'id': user.id}) }}" class="btn btn-lg btn-outline-dark"><i class="fas fa-fw fa-download"></i> ShareX</a>
<a href="javascript:alert('{{ lang('copied') }}')" data-clipboard-text="{{ route('config.screencloud', {'token': user.token}) }}" class="btn btn-lg btn-outline-info btn-clipboard"><i class="fas fa-fw fa-download"></i> Screencloud</a>
<a href="{{ route('config.script', {'id': user.id}) }}" class="btn btn-lg btn-outline-danger"><i class="fas fa-fw fa-download"></i> Linux Script</a>
<a href="{{ route('config.script', {'id': user.id}) }}" type="button" class="btn btn-lg btn-outline-danger"><i class="fas fa-fw fa-download"></i> Linux Script</a>
<button type="button" class="btn btn-outline-danger dropdown-toggle dropdown-toggle-split" id="userDropdown" data-toggle="dropdown" aria-expanded="false"></button>
<ul class="dropdown-menu">
<li><a class="dropdown-item text-danger" href="{{ route('kde_config.script', {'id': user.id}) }}"><i class="fas fa-fw fa-download"></i> KDE Linux Script</a></li>
</ul>
</div>
</div>
</div>

45
src/js/app.js Normal file → Executable file
View file

@ -29,8 +29,10 @@ var app = {
$('.user-delete').click(app.modalDelete);
$('.public-delete').click(app.modalDelete);
$('.public-vanity').click(app.modalVanity);
$('.media-delete').click(app.mediaDelete);
$('.publish-toggle').click(app.publishToggle);
$('.refresh-token').click(app.refreshToken);
$('#themes').mousedown(app.loadThemes);
$('.checkForUpdatesButton').click(app.checkForUpdates);
@ -46,6 +48,10 @@ var app = {
$('.alert').slideUp(500);
});
if ($('.dropzone').length > 0) {
app.initClipboardPasteToUpload();
}
new ClipboardJS('.btn-clipboard');
new Plyr($('#player'), {ratio: '16:9'});
@ -57,6 +63,30 @@ var app = {
$('#modalDelete-link').attr('href', $(this).data('link'));
$('#modalDelete').modal('show');
},
modalVanity: function () {
var id = $(this).data('id');
$('#modalVanity').modal('show');
$('#modalVanity-link').click(function () {
var $callerButton = $(this);
$.post(window.AppConfig.base_url + '/upload/' + id + '/vanity', {vanity: $('#modalVanity-input').val()}, function (responseData, status) {
$callerButton.tooltip('dispose');
$('#modalVanity').modal('hide');
$('#modalVanity-input').val('');
var parsedData = JSON.parse(responseData);
if ($('#media_' + id).find('.btn-group').length > 0) {
$('#media_' + id).find('.btn-group').find('a').each(function (item) {
var oldUrl = $(this).attr('href');
var newUrl = oldUrl.replace(oldUrl.substr(oldUrl.lastIndexOf('/') + 1), parsedData.code.code);
$(this).attr('href', newUrl);
});
} else {
var oldUrl = window.location.href;
var newUrl = oldUrl.replace(oldUrl.substr(oldUrl.lastIndexOf('/') + 1), parsedData.code.code);
window.location.href = newUrl;
}
});
});
},
publishToggle: function () {
var id = $(this).data('id');
var $callerButton = $(this);
@ -226,7 +256,20 @@ var app = {
$('#dropdown-tag-list > a[data-id="' + $tag.data('id') + '"]').remove();
}
});
}
},
initClipboardPasteToUpload: function() {
document.onpaste = function(event){
if (event.clipboardData || event.originalEvent.clipboardData) {
const items = (event.clipboardData || event.originalEvent.clipboardData).items;
items.forEach((item) => {
if (item.kind === 'file') {
// Add the file to the dropzone instance.
Dropzone.forElement('.dropzone').addFile(item.getAsFile());
}
});
}
}
},
};
app.init();