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 @@ 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();