diff --git a/.rnd b/.rnd
index 21b3d578..a0567d62 100644
Binary files a/.rnd and b/.rnd differ
diff --git a/app/Console/Commands/SetupProductionEnvironment.php b/app/Console/Commands/SetupProductionEnvironment.php
index 7286aa4a..ea9c9a67 100644
--- a/app/Console/Commands/SetupProductionEnvironment.php
+++ b/app/Console/Commands/SetupProductionEnvironment.php
@@ -84,6 +84,8 @@ class SetupProductionEnvironment extends Command
'--password' => true,
'--name' => 'vuefilemanager',
]);
+
+ $this->alert('Please copy these first password grant Client ID & Client secret above to your /.env file.');
}
/**
diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php
index 0764a820..9615b7b6 100644
--- a/app/Http/Controllers/Auth/AuthController.php
+++ b/app/Http/Controllers/Auth/AuthController.php
@@ -2,20 +2,13 @@
namespace App\Http\Controllers\Auth;
-use App\ClientProfile;
-use App\Models\User\UserAttribute;
-use App\Models\User\UserNotificationSetting;
-use App\ProviderProfile;
+use App\Http\Requests\Auth\CheckAccountRequest;
use App\User;
-use GuzzleHttp\Client;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
-use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Route;
-use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
@@ -26,12 +19,7 @@ class AuthController extends Controller
* @param Request $request
* @return mixed
*/
- public function check_account(Request $request) {
-
- // Validate request
- $request->validate([
- 'email' => ['required', 'string', 'email'],
- ]);
+ public function check_account(CheckAccountRequest $request) {
// Get User
$user = User::where('email', $request->input('email'))->select(['name', 'avatar'])->first();
@@ -111,6 +99,12 @@ class AuthController extends Controller
*/
public function logout()
{
+ // Demo preview
+ if (is_demo( Auth::id())) {
+ return response('Logout successfull', 204)
+ ->cookie('access_token', '', -1);
+ }
+
// Get user tokens and remove it
auth()->user()->tokens()->each(function ($token) {
@@ -118,7 +112,8 @@ class AuthController extends Controller
$token->delete();
});
- return response('Logout successfull', 200)->cookie('access_token', '', -1);
+ return response('Logout successfull', 204)
+ ->cookie('access_token', '', -1);
}
/**
@@ -128,7 +123,7 @@ class AuthController extends Controller
* @param string $provider
* @return Request
*/
- private static function make_request(Request $request)
+ private static function make_request($request)
{
$request->request->add([
'grant_type' => 'password',
diff --git a/app/Http/Controllers/FileBrowser/BrowseController.php b/app/Http/Controllers/FileBrowser/BrowseController.php
index 3964132e..a5017392 100644
--- a/app/Http/Controllers/FileBrowser/BrowseController.php
+++ b/app/Http/Controllers/FileBrowser/BrowseController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\FileBrowser;
+use App\Http\Requests\FileBrowser\SearchRequest;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
@@ -154,16 +155,8 @@ class BrowseController extends Controller
* @param Request $request
* @return \Illuminate\Database\Eloquent\Collection
*/
- public function search(Request $request)
+ public function search(SearchRequest $request)
{
- // Validate request
- $validator = Validator::make($request->all(), [
- 'query' => 'required|string',
- ]);
-
- // Return error
- if ($validator->fails()) abort(400, 'Bad input');
-
// Get user
$user_id = Auth::id();
diff --git a/app/Http/Requests/Auth/CheckAccountRequest.php b/app/Http/Requests/Auth/CheckAccountRequest.php
new file mode 100644
index 00000000..2013f81c
--- /dev/null
+++ b/app/Http/Requests/Auth/CheckAccountRequest.php
@@ -0,0 +1,30 @@
+ 'required|string|email',
+ ];
+ }
+}
diff --git a/app/Http/Requests/FileBrowser/SearchRequest.php b/app/Http/Requests/FileBrowser/SearchRequest.php
new file mode 100644
index 00000000..f43f1341
--- /dev/null
+++ b/app/Http/Requests/FileBrowser/SearchRequest.php
@@ -0,0 +1,30 @@
+ 'required|string',
+ ];
+ }
+}
diff --git a/app/Http/helpers.php b/app/Http/helpers.php
index 3f7ffe2d..422f7ab9 100644
--- a/app/Http/helpers.php
+++ b/app/Http/helpers.php
@@ -11,6 +11,15 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\ImageManagerStatic as Image;
+/**
+ * Get app version from config
+ *
+ * @return \Illuminate\Config\Repository|mixed
+ */
+function get_version() {
+ return config('vuefilemanager.version');
+}
+
/**
* Check if is demo
*
diff --git a/config/vuefilemanager.php b/config/vuefilemanager.php
index 8705ba0e..786dfcce 100644
--- a/config/vuefilemanager.php
+++ b/config/vuefilemanager.php
@@ -2,6 +2,8 @@
return [
+ 'version' => '1.4.1',
+
// Your app name
'app_name' => 'VueFileManager',
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index 84307b4c..6c543821 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -1,4 +1,55 @@
{
"/js/main.js": "/js/main.js",
- "/css/app.css": "/css/app.css"
+ "/css/app.css": "/css/app.css",
+ "/js/main.d87ef1b33d85a728419a.hot-update.js": "/js/main.d87ef1b33d85a728419a.hot-update.js",
+ "/js/main.f610108b5ded77e475fc.hot-update.js": "/js/main.f610108b5ded77e475fc.hot-update.js",
+ "/js/main.c756b01e566a58c029d4.hot-update.js": "/js/main.c756b01e566a58c029d4.hot-update.js",
+ "/js/main.fbd2a026d27b86b32085.hot-update.js": "/js/main.fbd2a026d27b86b32085.hot-update.js",
+ "/js/main.ba055e07b2a99de186c6.hot-update.js": "/js/main.ba055e07b2a99de186c6.hot-update.js",
+ "/js/main.bff830b786f12491b1c3.hot-update.js": "/js/main.bff830b786f12491b1c3.hot-update.js",
+ "/js/main.8972a902f65c81c5b840.hot-update.js": "/js/main.8972a902f65c81c5b840.hot-update.js",
+ "/js/main.ce71cdf8645b7fd30b51.hot-update.js": "/js/main.ce71cdf8645b7fd30b51.hot-update.js",
+ "/js/main.789e1201e1f2d65e6143.hot-update.js": "/js/main.789e1201e1f2d65e6143.hot-update.js",
+ "/js/main.64e3df0415dcadc60110.hot-update.js": "/js/main.64e3df0415dcadc60110.hot-update.js",
+ "/js/main.df6da1b985957a858ce1.hot-update.js": "/js/main.df6da1b985957a858ce1.hot-update.js",
+ "/js/main.1dead15ef64a5cc07468.hot-update.js": "/js/main.1dead15ef64a5cc07468.hot-update.js",
+ "/js/main.6801523ba7b0d7d71a65.hot-update.js": "/js/main.6801523ba7b0d7d71a65.hot-update.js",
+ "/js/main.a7b77d28a5d11d7723a8.hot-update.js": "/js/main.a7b77d28a5d11d7723a8.hot-update.js",
+ "/js/main.ead7922fa1ac579bc3b9.hot-update.js": "/js/main.ead7922fa1ac579bc3b9.hot-update.js",
+ "/js/main.187c80c7fbb3aa1875ef.hot-update.js": "/js/main.187c80c7fbb3aa1875ef.hot-update.js",
+ "/js/main.b45810316b9311b95354.hot-update.js": "/js/main.b45810316b9311b95354.hot-update.js",
+ "/js/main.fbcee38f82ba68810827.hot-update.js": "/js/main.fbcee38f82ba68810827.hot-update.js",
+ "/js/main.04461ed73487a1567639.hot-update.js": "/js/main.04461ed73487a1567639.hot-update.js",
+ "/js/main.82e69d37bed6542b63ee.hot-update.js": "/js/main.82e69d37bed6542b63ee.hot-update.js",
+ "/js/main.ef91de38dd38bdd5c12f.hot-update.js": "/js/main.ef91de38dd38bdd5c12f.hot-update.js",
+ "/js/main.cc98cb6cd6bd7ae524a5.hot-update.js": "/js/main.cc98cb6cd6bd7ae524a5.hot-update.js",
+ "/js/main.4977e07c021340189a92.hot-update.js": "/js/main.4977e07c021340189a92.hot-update.js",
+ "/js/main.5e71435b1cb9c308aa4c.hot-update.js": "/js/main.5e71435b1cb9c308aa4c.hot-update.js",
+ "/js/main.e2495ff90987324e490d.hot-update.js": "/js/main.e2495ff90987324e490d.hot-update.js",
+ "/js/main.1d1a32bfbf61bf383b43.hot-update.js": "/js/main.1d1a32bfbf61bf383b43.hot-update.js",
+ "/js/main.c34dc8ee57c2cf20e85b.hot-update.js": "/js/main.c34dc8ee57c2cf20e85b.hot-update.js",
+ "/js/main.fbf746673d5cfb1e0be4.hot-update.js": "/js/main.fbf746673d5cfb1e0be4.hot-update.js",
+ "/js/main.5a366e3f5e4be101db89.hot-update.js": "/js/main.5a366e3f5e4be101db89.hot-update.js",
+ "/js/main.ebe222cf3b39599e8367.hot-update.js": "/js/main.ebe222cf3b39599e8367.hot-update.js",
+ "/js/main.e7910045940f6a9726cf.hot-update.js": "/js/main.e7910045940f6a9726cf.hot-update.js",
+ "/js/main.94095359900f582fbdbd.hot-update.js": "/js/main.94095359900f582fbdbd.hot-update.js",
+ "/js/main.4f7781ad0383a26def2d.hot-update.js": "/js/main.4f7781ad0383a26def2d.hot-update.js",
+ "/js/main.b01ec9f236328c546db2.hot-update.js": "/js/main.b01ec9f236328c546db2.hot-update.js",
+ "/js/main.fd4ec58dbeee3f00ff7d.hot-update.js": "/js/main.fd4ec58dbeee3f00ff7d.hot-update.js",
+ "/js/main.e179e166dc92f38f364e.hot-update.js": "/js/main.e179e166dc92f38f364e.hot-update.js",
+ "/js/main.0cdb3d2c00957386aba6.hot-update.js": "/js/main.0cdb3d2c00957386aba6.hot-update.js",
+ "/js/main.0c48e24119c81ed18cca.hot-update.js": "/js/main.0c48e24119c81ed18cca.hot-update.js",
+ "/js/main.a2ca53c05fd1bfe99d5c.hot-update.js": "/js/main.a2ca53c05fd1bfe99d5c.hot-update.js",
+ "/js/main.4e8f44c3f0beffd39e1f.hot-update.js": "/js/main.4e8f44c3f0beffd39e1f.hot-update.js",
+ "/js/main.679309da2d539e3dabdd.hot-update.js": "/js/main.679309da2d539e3dabdd.hot-update.js",
+ "/js/main.49311c60c52a63503661.hot-update.js": "/js/main.49311c60c52a63503661.hot-update.js",
+ "/js/main.e5fee9a4016fbfa00733.hot-update.js": "/js/main.e5fee9a4016fbfa00733.hot-update.js",
+ "/js/main.16986dc75e40652a1dba.hot-update.js": "/js/main.16986dc75e40652a1dba.hot-update.js",
+ "/js/main.679a5fd4aa2a5135bd89.hot-update.js": "/js/main.679a5fd4aa2a5135bd89.hot-update.js",
+ "/js/main.6e5083afc86c2d723f02.hot-update.js": "/js/main.6e5083afc86c2d723f02.hot-update.js",
+ "/js/main.66af9c75dcbb5ffe79f8.hot-update.js": "/js/main.66af9c75dcbb5ffe79f8.hot-update.js",
+ "/js/main.8bc3604534638c13a3be.hot-update.js": "/js/main.8bc3604534638c13a3be.hot-update.js",
+ "/js/main.95138b7623d005da0b24.hot-update.js": "/js/main.95138b7623d005da0b24.hot-update.js",
+ "/js/main.6d0106ad7420c696c1a6.hot-update.js": "/js/main.6d0106ad7420c696c1a6.hot-update.js",
+ "/js/main.a55112feb27c25cb1911.hot-update.js": "/js/main.a55112feb27c25cb1911.hot-update.js"
}
diff --git a/resources/js/App.vue b/resources/js/App.vue
index a7d18d45..fc111163 100644
--- a/resources/js/App.vue
+++ b/resources/js/App.vue
@@ -1,6 +1,9 @@
+
+
+
@@ -10,15 +13,9 @@
-
-
-
-
-
-
@@ -27,6 +24,9 @@
+
+
+
diff --git a/resources/js/components/FilesView/Alert.vue b/resources/js/components/FilesView/Alert.vue
index c70a2d60..8f49017a 100644
--- a/resources/js/components/FilesView/Alert.vue
+++ b/resources/js/components/FilesView/Alert.vue
@@ -136,7 +136,7 @@
.message {
@include font-size(16);
- color: #8b8f9a;
+ color: #333;
margin-top: 5px;
}
}
diff --git a/resources/js/components/FilesView/ContextMenu.vue b/resources/js/components/FilesView/ContextMenu.vue
index c192dda4..4f95a96b 100644
--- a/resources/js/components/FilesView/ContextMenu.vue
+++ b/resources/js/components/FilesView/ContextMenu.vue
@@ -181,7 +181,7 @@
this.item = undefined
},
showContextMenu(event, item) {
- let VerticalOffsetArea = item ? this.$refs.list.children.length * 50 : 50
+ let VerticalOffsetArea = item && this.$refs.list.children ? this.$refs.list.children.length * 50 : 50
let HorizontalOffsetArea = 190
let container = document.getElementById('files-view')
diff --git a/resources/js/components/FilesView/EmptyPage.vue b/resources/js/components/FilesView/EmptyPage.vue
index 84043fb9..03727291 100644
--- a/resources/js/components/FilesView/EmptyPage.vue
+++ b/resources/js/components/FilesView/EmptyPage.vue
@@ -18,8 +18,7 @@
{{ $t('empty_page.description') }}
{{ $t('empty_page.call_to_action') }}
@@ -49,12 +48,7 @@
computed: {
...mapGetters(['data', 'isLoading', 'currentFolder']),
isEmpty() {
- return this.data.length == 0
- }
- },
- data() {
- return {
- files: undefined
+ return this.data && this.data.length == 0
}
}
}
diff --git a/resources/js/components/Sidebar/UserHeadline.vue b/resources/js/components/Sidebar/UserHeadline.vue
index 73318baa..0f7122e2 100644
--- a/resources/js/components/Sidebar/UserHeadline.vue
+++ b/resources/js/components/Sidebar/UserHeadline.vue
@@ -47,7 +47,9 @@
// If is mobile, then go to user settings page, else, open menu
if ( this.isSmallAppSize ) {
+ events.$emit('show:sidebar')
this.$router.push({name: 'Profile'})
+
} else {
this.isOpenedMenu = !this.isOpenedMenu
diff --git a/resources/js/helpers.js b/resources/js/helpers.js
index d263af76..a2968174 100644
--- a/resources/js/helpers.js
+++ b/resources/js/helpers.js
@@ -66,7 +66,7 @@ const Helpers = {
return
}
- let fileCount = files.length
+ let fileCount = files ? files.length : 0
let fileCountSucceed = 1
store.commit('UPDATE_FILE_COUNT_PROGRESS', {
diff --git a/resources/js/i18n/index.js b/resources/js/i18n/index.js
index c9186503..94b77a52 100644
--- a/resources/js/i18n/index.js
+++ b/resources/js/i18n/index.js
@@ -3,6 +3,7 @@ import VueI18n from 'vue-i18n';
import en from './lang/en.json'
//import sk from './lang/sk.json'
+//import cn from './lang/cn.json'
Vue.use(VueI18n);
diff --git a/resources/js/i18n/lang/cn.json b/resources/js/i18n/lang/cn.json
new file mode 100644
index 00000000..5fa5916b
--- /dev/null
+++ b/resources/js/i18n/lang/cn.json
@@ -0,0 +1,225 @@
+{
+ "routes": {
+ "create_new_password": "创建新密码"
+ },
+ "profile": {
+ "page_title": "用户信息",
+ "store_pass": "保存您的密码",
+ "change_pass": "修改您的密码",
+ "profile_info": "用户信息",
+ "photo_description": "修改您的头像",
+ "photo_supported": "支持的格式 .png, .jpg, .jpeg."
+ },
+ "page_registration": {
+ "title": "创建一个新用户",
+ "subtitle": "填写所有内容进行创建",
+ "label_email": "邮箱:",
+ "placeholder_email": "键入您的邮箱地址",
+ "label_name": "全名:",
+ "placeholder_name": "键入您的全名",
+ "label_pass": "创建密码:",
+ "placeholder_pass": "键入新密码",
+ "label_confirm_pass": "确认密码:",
+ "placeholder_confirm_pass": "请重复输入一遍密码",
+ "button_create_account": "创建账户",
+ "have_an_account": "您之前有过账户了么?"
+ },
+ "page_shared": {
+ "subtitle": "请输入密码后得到分享链接",
+ "title": "您的分享链接已被保护",
+ "placeholder_pass": "输入密码",
+ "download_file": "下载文件",
+ "submit": "提交"
+ },
+ "page_shared_404": {
+ "subtitle": "您要找的内容可能已经被删除了。",
+ "title": "没有找到文件"
+ },
+ "page_create_password": {
+ "title": "只需一步进行登录",
+ "subtitle": "在此创建您的新密码",
+ "button_update": "更新密码",
+ "label_email": "邮箱:",
+ "label_new_pass": "键入新密码",
+ "label_confirm_pass": "确认密码"
+ },
+ "page_forgotten_password": {
+ "title": "忘记密码?",
+ "subtitle": "通过邮箱获得重置链接:",
+ "button_get_link": "获得链接",
+ "password_remember_text": "还记得住您的密码么?",
+ "password_remember_button": "登录。",
+ "pass_sennded_title": "感谢!",
+ "pass_sennded_subtitle": "我们为您发送了一封确认邮件!",
+ "pass_reseted_title": "太棒了!",
+ "pass_reseted_subtitle": "您的密码被成功重置。",
+ "pass_reseted_signin": "登录"
+ },
+ "page_sign_in": {
+ "title": "您是 {name}?",
+ "subtitle": "请用您的密码登录",
+ "placeholder_password": "键入密码",
+ "button_log_in": "登录",
+ "password_reset_text": "忘记密码?",
+ "password_reset_button": "重置密码。"
+ },
+ "page_login": {
+ "title": "欢迎回来!",
+ "subtitle": "请输入您的邮箱来登录。",
+ "placeholder_email": "键入您的邮箱",
+ "button_next": "下一步",
+ "registration_text": "没有帐号?",
+ "registration_button": "注册帐号"
+ },
+ "uploading": {
+ "progress": "上传文件 {current}/{total}"
+ },
+ "inputs": {
+ "placeholder_search_files": "搜索文件"
+ },
+ "messages": {
+ "nothing_to_preview": "没有任何信息可以预览。",
+ "nothing_was_found": "没找到任何信息"
+ },
+ "locations": {
+ "shared": "已分享",
+ "trash": "垃圾箱",
+ "home": "首页"
+ },
+ "file_detail": {
+ "author_participant": "公共参与者",
+ "created_at": "创建于",
+ "shared": "分享",
+ "author": "作者",
+ "where": "地址",
+ "size": "大小"
+ },
+ "empty_page": {
+ "description": "拖动文件至此处,或使用上传按钮",
+ "call_to_action": "文件上传",
+ "title": "这里什么都还没有"
+ },
+ "alerts": {
+ "error_confirm": "哦,出了个问题!",
+ "success_confirm": "太棒了!"
+ },
+ "validation_errors": {
+ "wrong_image": "您可能上传了一个错误的文件!",
+ "incorrect_password": "不好意思,您输入的密码可能有误!"
+ },
+ "pronouns": {
+ "of": "of"
+ },
+ "storage": {
+ "used": "{used} 在 {capacity} 已使用",
+ "title": "存储空间"
+ },
+ "folder": {
+ "item_counts": "{count} 个文件 | {count} 个文件",
+ "empty": "空的"
+ },
+ "item_thumbnail": {
+ "original_location": "原始位置",
+ "deleted_at": "删除时间: {time}"
+ },
+ "preview_type": {
+ "list": "列表",
+ "grid": "方块"
+ },
+ "context_menu": {
+ "remove_from_favourites": "移出收藏",
+ "add_to_favourites": "添加进收藏",
+ "profile_settings": "个人信息编辑",
+ "create_folder": "创建文件夹",
+ "empty_trash": "清空垃圾箱",
+ "share_edit": "编辑分享设定",
+ "add_folder": "添加文件夹",
+ "download": "下载",
+ "log_out": "注销",
+ "restore": "恢复文件",
+ "upload": "上传",
+ "detail": "详情",
+ "rename": "重命名",
+ "delete": "删除",
+ "share": "分享",
+ "move": "移动"
+ },
+ "sidebar": {
+ "shared": "已分享",
+ "locations": "位置",
+ "favourites": "收藏",
+ "favourites_empty": "将您想要收藏的文件夹拖动至此",
+ "latest": "最新上传",
+ "latest_empty": "您并没有最新上传的记录"
+ },
+ "popup_rename": {
+ "title": "修改文件/夹名称"
+ },
+ "popup_create_folder": {
+ "title": "请填入新文件夹名称",
+ "folder_default_name": "新文件夹"
+ },
+ "popup_move_item": {
+ "submit": "移动文件/夹",
+ "title": "移动文件/夹",
+ "cancel": "取消"
+ },
+ "popup_pass_changed": {
+ "title": "您的密码已经改变!",
+ "message": "现在,您拥有一个新的密码。"
+ },
+ "popup_trashed": {
+ "title": "您的垃圾箱已清空!",
+ "message": "现在,您的垃圾箱已经被完全清空。"
+ },
+ "popup_error": {
+ "title": "wow,好像有什么东西坏掉了!",
+ "message": "有什么东西坏掉了,请联系我们,引导我们修复。"
+ },
+ "popup_exceed_limit": {
+ "title": "wow,您已经超过了存储上线。",
+ "message": "请联系我们来增加您的存储空间。"
+ },
+ "popup_share_create": {
+ "title": "分享您的 {item}"
+ },
+ "popup_share_edit": {
+ "title": "更新分享设定",
+ "change_pass": "更改密码",
+ "save": "保存更改",
+ "stop": "停止风险",
+ "confirm": "确认"
+ },
+ "shared": {
+ "empty_shared": "您还没有分享任何内容",
+ "editor": "可以编辑和上传文件",
+ "visitor": "仅可以查看或下载文件",
+ "can_download": "仅可以下载"
+ },
+ "shared_form": {
+ "placeholder_permission": "请设置权限",
+ "label_password_protection": "密码保护",
+ "button_done": "太好了!",
+ "button_generate": "生成分享链接",
+ "label_permission": "权限",
+ "label_shared_url": "分享链接"
+ },
+ "actions": {
+ "create_folder": "穿件文件夹",
+ "preview": "更改预览",
+ "upload": "上传文件",
+ "delete": "删除内容"
+ },
+ "types": {
+ "folder": "文件夹",
+ "file": "文件"
+ },
+ "popup_passport_error": {
+ "title": "Invalid Passport Grand Client",
+ "message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions."
+ },
+ "popup_signup_error": {
+ "title": "Server Error",
+ "message": "Please check your database connection if everything works correctly."
+ }
+}
\ No newline at end of file
diff --git a/resources/js/i18n/lang/en.json b/resources/js/i18n/lang/en.json
index 0bcee805..bf67b45a 100644
--- a/resources/js/i18n/lang/en.json
+++ b/resources/js/i18n/lang/en.json
@@ -213,5 +213,13 @@
"types": {
"folder": "Folder",
"file": "File"
+ },
+ "popup_passport_error": {
+ "title": "Invalid Passport Grand Client",
+ "message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions."
+ },
+ "popup_signup_error": {
+ "title": "Server Error",
+ "message": "Please check your database connection if everything works correctly."
}
}
\ No newline at end of file
diff --git a/resources/js/i18n/lang/sk.json b/resources/js/i18n/lang/sk.json
index 091771a0..d79485a1 100644
--- a/resources/js/i18n/lang/sk.json
+++ b/resources/js/i18n/lang/sk.json
@@ -64,7 +64,7 @@
"password_reset_button": "Resetovať heslo."
},
"page_login": {
- "title": "Vitaj späť!",
+ "title": "Vitajte späť!",
"subtitle": "Prosím, vložte svoj email pre prihlásenie:",
"placeholder_email": "Napíšte svoj E-mail",
"button_next": "Ďalší krok",
@@ -213,5 +213,13 @@
"types": {
"folder": "Priečinok",
"file": "Súbor"
+ },
+ "popup_passport_error": {
+ "title": "Nesprávny Passport Grand Client",
+ "message": "Pravdebodobne ste nespravne vygenerovali Passport Grant client alebo ste nenastavili udaje správne. Prosím následujte inštalačné inštrukcie."
+ },
+ "popup_signup_error": {
+ "title": "Chyba serveru",
+ "message": "Prosím skontrolujte databázove spojenie, či všetko funguje správne."
}
}
\ No newline at end of file
diff --git a/resources/js/views/Auth/SignIn.vue b/resources/js/views/Auth/SignIn.vue
index 497c2d8f..9c2a23c3 100644
--- a/resources/js/views/Auth/SignIn.vue
+++ b/resources/js/views/Auth/SignIn.vue
@@ -66,6 +66,7 @@
import AuthButton from '@/components/Auth/AuthButton'
import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex'
+ import {events} from "@/bus"
import axios from 'axios'
export default {
@@ -138,6 +139,15 @@
});
}
+ if (error.response.status == 500) {
+
+ events.$emit('alert:open', {
+ emoji: '🤔',
+ title: this.$t('popup_signup_error.title'),
+ message: this.$t('popup_signup_error.message')
+ })
+ }
+
// End loading
this.isLoading = false
})
@@ -178,6 +188,17 @@
});
}
+ if (error.response.status == 401) {
+
+ if (error.response.data.error === 'invalid_client') {
+ events.$emit('alert:open', {
+ emoji: '🤔',
+ title: this.$t('popup_passport_error.title'),
+ message: this.$t('popup_passport_error.message')
+ })
+ }
+ }
+
// End loading
this.isLoading = false
})
diff --git a/resources/js/views/Auth/SignUp.vue b/resources/js/views/Auth/SignUp.vue
index eec2cd05..c3554484 100644
--- a/resources/js/views/Auth/SignUp.vue
+++ b/resources/js/views/Auth/SignUp.vue
@@ -72,6 +72,7 @@
import AuthButton from '@/components/Auth/AuthButton'
import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex'
+ import {events} from "@/bus"
import axios from 'axios'
export default {
@@ -125,6 +126,26 @@
})
.catch(error => {
+ if (error.response.status == 401) {
+
+ if (error.response.data.error === 'invalid_client') {
+ events.$emit('alert:open', {
+ emoji: '🤔',
+ title: this.$t('popup_passport_error.title'),
+ message: this.$t('popup_passport_error.message')
+ })
+ }
+ }
+
+ if (error.response.status == 500) {
+
+ events.$emit('alert:open', {
+ emoji: '🤔',
+ title: this.$t('popup_signup_error.title'),
+ message: this.$t('popup_signup_error.message')
+ })
+ }
+
if (error.response.status == 422) {
if (error.response.data.errors['email']) {
diff --git a/resources/lang/cn/auth.php b/resources/lang/cn/auth.php
new file mode 100644
index 00000000..e954e9fd
--- /dev/null
+++ b/resources/lang/cn/auth.php
@@ -0,0 +1,17 @@
+ '用户名或密码错误。',
+ 'throttle' => '您的尝试登录次数过多,请 :seconds 秒后再试。',
+];
diff --git a/resources/lang/cn/passwords.php b/resources/lang/cn/passwords.php
new file mode 100644
index 00000000..a91f9500
--- /dev/null
+++ b/resources/lang/cn/passwords.php
@@ -0,0 +1,20 @@
+ '密码至少是八位字符并且应与确认密码匹配。',
+ 'reset' => '密码重置成功!',
+ 'sent' => '密码重置邮件已发送!',
+ 'token' => '密码重置令牌无效。',
+ 'user' => '找不到该邮箱对应的用户。',
+];
\ No newline at end of file
diff --git a/resources/lang/cn/validation.php b/resources/lang/cn/validation.php
new file mode 100644
index 00000000..3de0775b
--- /dev/null
+++ b/resources/lang/cn/validation.php
@@ -0,0 +1,179 @@
+ '您必须接受 :attribute。',
+ 'active_url' => ':attribute 不是一个有效的网址。',
+ 'after' => ':attribute 必须要晚于 :date。',
+ 'after_or_equal' => ':attribute 必须要等于 :date 或更晚。',
+ 'alpha' => ':attribute 只能由字母组成。',
+ 'alpha_dash' => ':attribute 只能由字母、数字、短划线(-)和下划线(_)组成。',
+ 'alpha_num' => ':attribute 只能由字母和数字组成。',
+ 'array' => ':attribute 必须是一个数组。',
+ 'before' => ':attribute 必须要早于 :date。',
+ 'before_or_equal' => ':attribute 必须要等于 :date 或更早。',
+ 'between' => [
+ 'numeric' => ':attribute 必须介于 :min - :max 之间。',
+ 'file' => ':attribute 必须介于 :min - :max KB 之间。',
+ 'string' => ':attribute 必须介于 :min - :max 个字符之间。',
+ 'array' => ':attribute 必须只有 :min - :max 个单元。',
+ ],
+ 'boolean' => ':attribute 必须为布尔值。',
+ 'confirmed' => ':attribute 两次输入不一致。',
+ 'date' => ':attribute 不是一个有效的日期。',
+ 'date_equals' => ':attribute 必须要等于 :date。',
+ 'date_format' => ':attribute 的格式必须为 :format。',
+ 'different' => ':attribute 和 :other 必须不同。',
+ 'digits' => ':attribute 必须是 :digits 位的数字。',
+ 'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。',
+ 'dimensions' => ':attribute 图片尺寸不正确。',
+ 'distinct' => ':attribute 已经存在。',
+ 'email' => ':attribute 不是一个合法的邮箱。',
+ 'ends_with' => ':attribute 结尾必须包含下列之一::values',
+ 'exists' => ':attribute 不存在。',
+ 'file' => ':attribute 必须是文件。',
+ 'filled' => ':attribute 不能为空。',
+ 'gt' => [
+ 'numeric' => ':attribute 必须大于 :value。',
+ 'file' => ':attribute 必须大于 :value KB。',
+ 'string' => ':attribute 必须多于 :value 个字符。',
+ 'array' => ':attribute 必须多于 :value 个元素。',
+ ],
+ 'gte' => [
+ 'numeric' => ':attribute 必须大于或等于 :value。',
+ 'file' => ':attribute 必须大于或等于 :value KB。',
+ 'string' => ':attribute 必须多于或等于 :value 个字符。',
+ 'array' => ':attribute 必须多于或等于 :value 个元素。',
+ ],
+ 'image' => ':attribute 必须是图片。',
+ 'in' => '已选的属性 :attribute 非法。',
+ 'in_array' => ':attribute 没有在 :other 中。',
+ 'integer' => ':attribute 必须是整数。',
+ 'ip' => ':attribute 必须是有效的 IP 地址。',
+ 'ipv4' => ':attribute 必须是有效的 IPv4 地址。',
+ 'ipv6' => ':attribute 必须是有效的 IPv6 地址。',
+ 'json' => ':attribute 必须是正确的 JSON 格式。',
+ 'lt' => [
+ 'numeric' => ':attribute 必须小于 :value。',
+ 'file' => ':attribute 必须小于 :value KB。',
+ 'string' => ':attribute 必须少于 :value 个字符。',
+ 'array' => ':attribute 必须少于 :value 个元素。',
+ ],
+ 'lte' => [
+ 'numeric' => ':attribute 必须小于或等于 :value。',
+ 'file' => ':attribute 必须小于或等于 :value KB。',
+ 'string' => ':attribute 必须少于或等于 :value 个字符。',
+ 'array' => ':attribute 必须少于或等于 :value 个元素。',
+ ],
+ 'max' => [
+ 'numeric' => ':attribute 不能大于 :max。',
+ 'file' => ':attribute 不能大于 :max KB。',
+ 'string' => ':attribute 不能大于 :max 个字符。',
+ 'array' => ':attribute 最多只有 :max 个单元。',
+ ],
+ 'mimes' => ':attribute 必须是一个 :values 类型的文件。',
+ 'mimetypes' => ':attribute 必须是一个 :values 类型的文件。',
+ 'min' => [
+ 'numeric' => ':attribute 必须大于等于 :min。',
+ 'file' => ':attribute 大小不能小于 :min KB。',
+ 'string' => ':attribute 至少为 :min 个字符。',
+ 'array' => ':attribute 至少有 :min 个单元。',
+ ],
+ 'not_in' => '已选的属性 :attribute 非法。',
+ 'not_regex' => ':attribute 的格式错误。',
+ 'numeric' => ':attribute 必须是一个数字。',
+ 'password' => '密码错误',
+ 'present' => ':attribute 必须存在。',
+ 'regex' => ':attribute 格式不正确。',
+ 'required' => ':attribute 不能为空。',
+ 'required_if' => '当 :other 为 :value 时 :attribute 不能为空。',
+ 'required_unless' => '当 :other 不为 :values 时 :attribute 不能为空。',
+ 'required_with' => '当 :values 存在时 :attribute 不能为空。',
+ 'required_with_all' => '当 :values 存在时 :attribute 不能为空。',
+ 'required_without' => '当 :values 不存在时 :attribute 不能为空。',
+ 'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',
+ 'same' => ':attribute 和 :other 必须相同。',
+ 'size' => [
+ 'numeric' => ':attribute 大小必须为 :size。',
+ 'file' => ':attribute 大小必须为 :size KB。',
+ 'string' => ':attribute 必须是 :size 个字符。',
+ 'array' => ':attribute 必须为 :size 个单元。',
+ ],
+ 'starts_with' => ':attribute 必须以 :values 为开头。',
+ 'string' => ':attribute 必须是一个字符串。',
+ 'timezone' => ':attribute 必须是一个合法的时区值。',
+ 'unique' => ':attribute 已经存在。',
+ 'uploaded' => ':attribute 上传失败。',
+ 'url' => ':attribute 格式不正确。',
+ 'uuid' => ':attribute 必须是有效的 UUID。',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'custom-message',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap our attribute placeholder
+ | with something more reader friendly such as "E-Mail Address" instead
+ | of "email". This simply helps us make our message more expressive.
+ |
+ */
+
+ 'attributes' => [
+ 'name' => '名称',
+ 'username' => '用户名',
+ 'email' => '邮箱',
+ 'first_name' => '名',
+ 'last_name' => '姓',
+ 'password' => '密码',
+ 'password_confirmation' => '确认密码',
+ 'city' => '城市',
+ 'country' => '国家',
+ 'address' => '地址',
+ 'phone' => '电话',
+ 'mobile' => '手机',
+ 'age' => '年龄',
+ 'sex' => '性别',
+ 'gender' => '性别',
+ 'day' => '天',
+ 'month' => '月',
+ 'year' => '年',
+ 'hour' => '时',
+ 'minute' => '分',
+ 'second' => '秒',
+ 'title' => '标题',
+ 'content' => '内容',
+ 'description' => '描述',
+ 'excerpt' => '摘要',
+ 'date' => '日期',
+ 'time' => '时间',
+ 'available' => '可用的',
+ 'size' => '大小',
+ ],
+];
\ No newline at end of file
diff --git a/resources/lang/cn/vuefilemanager.php b/resources/lang/cn/vuefilemanager.php
new file mode 100644
index 00000000..894e19c2
--- /dev/null
+++ b/resources/lang/cn/vuefilemanager.php
@@ -0,0 +1,9 @@
+ '利用 VueFileManager 创建您自己的私有云,由 Laravel and Vue 驱动',
+ 'user_not_fount' => '我们没有找到此邮箱对应的用户信息。',
+ 'incorrect_password' => '不好意思,您的密码好像不正确。',
+ 'time' => '%d. %B. %Y 于 %H:%M',
+ 'home' => '首页',
+];
\ No newline at end of file
diff --git a/resources/lang/en/vuefilemanager.php b/resources/lang/en/vuefilemanager.php
index ed904b80..bba18d86 100644
--- a/resources/lang/en/vuefilemanager.php
+++ b/resources/lang/en/vuefilemanager.php
@@ -1,8 +1,9 @@
'Make your own Private Cloud with VueFileManager client powered by Laravel and Vue',
'user_not_fount' => 'We can\'t find a user with that e-mail address.',
- 'home' => 'Home',
- 'time' => '%d. %B. %Y at %H:%M',
'incorrect_password' => 'Sorry, your password is incorrect.',
+ 'time' => '%d. %B. %Y at %H:%M',
+ 'home' => 'Home',
];
\ No newline at end of file
diff --git a/resources/lang/sk/vuefilemanager.php b/resources/lang/sk/vuefilemanager.php
index e1a78f13..0a73d463 100644
--- a/resources/lang/sk/vuefilemanager.php
+++ b/resources/lang/sk/vuefilemanager.php
@@ -1,8 +1,9 @@
'Vytvor si svoj vlastný privátny cloud s VueFileManager klientom poháňaným Laravelom a Vue',
'user_not_fount' => 'Uživateľ s touto emailovou adresou sa nenašiel.',
- 'home' => 'Domov',
- 'time' => '%d. %B. %Y o %H:%M',
'incorrect_password' => 'Prepáč, zadané heslo je nesprávne',
+ 'time' => '%d. %B. %Y o %H:%M',
+ 'home' => 'Domov',
];
\ No newline at end of file
diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php
index 6e47ac37..287a6067 100644
--- a/resources/views/index.blade.php
+++ b/resources/views/index.blade.php
@@ -1,19 +1,23 @@
+
-
-
+
+
- VueFileManager | Make your own Private Cloud with VueFileManager client powered by Laravel and Vue
+ {{ config('vuefilemanager.app_name') }} | {{ __('vuefilemanager.app_description') }}
-
-
+
+
+ {{-- Apple Mobile Web App--}}
+
+ {{--Format Detection--}}
@@ -34,7 +38,7 @@
@if(env('APP_ENV') !== 'local')
-
+
@else
@endif
diff --git a/webpack.mix.js b/webpack.mix.js
index eeccfc1c..03e3a606 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -23,10 +23,4 @@ mix.js('resources/js/main.js', 'public/js')
}
},
})
- /*.options({
- hmrOptions: {
- host: '192.168.1.131',
- port: '8080'
- },
- })*/
.disableNotifications();