From 737c7da54f7707363ff7c7fe2f6b0d68f2f484f1 Mon Sep 17 00:00:00 2001 From: jack Date: Mon, 23 Apr 2018 11:49:26 +0800 Subject: [PATCH] added verification --- .env-example | 12 ++-- app/Http/Controllers/AuthController.php | 56 +++++++++++++++--- app/Http/Kernel.php | 4 +- data/mysql/default/migrations.ibd | Bin 98304 -> 98304 bytes data/mysql/default/user_verifications.frm | Bin 0 -> 8624 bytes data/mysql/default/user_verifications.ibd | Bin 0 -> 114688 bytes data/mysql/default/users.frm | Bin 8790 -> 8834 bytes data/mysql/default/users.ibd | Bin 114688 -> 114688 bytes data/mysql/ib_logfile0 | Bin 50331648 -> 50331648 bytes data/mysql/ibdata1 | Bin 12582912 -> 12582912 bytes data/mysql/mysql/innodb_index_stats.ibd | Bin 98304 -> 98304 bytes data/mysql/mysql/innodb_table_stats.ibd | Bin 98304 -> 98304 bytes ...080323_create_user_verifications_table.php | 39 ++++++++++++ resources/views/email/verify.blade.php | 22 +++++++ routes/api.php | 4 ++ 15 files changed, 124 insertions(+), 13 deletions(-) create mode 100644 data/mysql/default/user_verifications.frm create mode 100644 data/mysql/default/user_verifications.ibd create mode 100644 database/migrations/2018_04_22_080323_create_user_verifications_table.php create mode 100644 resources/views/email/verify.blade.php diff --git a/.env-example b/.env-example index f3080a1..a262324 100644 --- a/.env-example +++ b/.env-example @@ -1,17 +1,17 @@ APP_NAME=IZYIM APP_ENV=local -APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_KEY=base64:SqyQijGTJXCM9o50k2sKTkx+CWqxR+CE1xNS5b8INRQ= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql -DB_HOST=127.0.0.1 +DB_HOST=mysql DB_PORT=3306 -DB_DATABASE=homestead -DB_USERNAME=homestead -DB_PASSWORD=secretx +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret BROADCAST_DRIVER=log CACHE_DRIVER=file @@ -37,3 +37,5 @@ PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +JWT_SECRET=Ra1xgapjSAFoRJIO5Rbg14gfMpNQDmrS \ No newline at end of file diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 30f44a0..b355764 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -17,10 +17,10 @@ class AuthController extends Controller public function register(Request $request) { $credentials = $request->only('name', 'email', 'password'); + $rules = [ - 'name' => 'required|min:4', - 'email' => 'required|email|max:255|unique:users', - 'password' => 'required|min:6', + 'name' => 'required|max:255', + 'email' => 'required|email|max:255|unique:users' ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { @@ -29,8 +29,18 @@ class AuthController extends Controller $name = $request->name; $email = $request->email; $password = $request->password; - User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); - return $this->login($request); + + $user = User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); + $verification_code = str_random(30); //Generate verification code + DB::table('user_verifications')->insert(['user_id'=>$user->id,'token'=>$verification_code]); + $subject = "Please verify your email address."; + Mail::send('email.verify', ['name' => $name, 'verification_code' => $verification_code], + function($mail) use ($email, $name, $subject){ + $mail->from(getenv('FROM_EMAIL_ADDRESS'), "From User/Company Name Goes Here"); + $mail->to($email, $name); + $mail->subject($subject); + }); + return response()->json(['success'=> true, 'message'=> 'Thanks for signing up! Please check your email to complete your registration.']); } /** @@ -42,6 +52,7 @@ class AuthController extends Controller public function login(Request $request) { $credentials = $request->only('email', 'password'); + $rules = [ 'email' => 'required|email', 'password' => 'required', @@ -50,10 +61,13 @@ class AuthController extends Controller if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } + + $credentials['is_verified'] = 1; + try { // attempt to verify the credentials and create a token for the user - if (!$token = JWTAuth::attempt($credentials)) { - return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials.'], 401); + if (! $token = JWTAuth::attempt($credentials)) { + return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials. Please make sure you entered the right information and you have verified your email address.'], 401); } } catch (JWTException $e) { // something went wrong whilst attempting to encode the token @@ -72,6 +86,7 @@ class AuthController extends Controller */ public function logout(Request $request) { $this->validate($request, ['token' => 'required']); + try { JWTAuth::invalidate($request->input('token')); return response()->json(['success' => true, 'message'=> "You have successfully logged out."]); @@ -108,4 +123,31 @@ class AuthController extends Controller ]); } + /** + * API Verify User + * + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function verifyUser($verification_code) + { + $check = DB::table('user_verifications')->where('token',$verification_code)->first(); + if(!is_null($check)){ + $user = User::find($check->user_id); + if($user->is_verified == 1){ + return response()->json([ + 'success'=> true, + 'message'=> 'Account already verified..' + ]); + } + $user->update(['is_verified' => 1]); + DB::table('user_verifications')->where('token',$verification_code)->delete(); + return response()->json([ + 'success'=> true, + 'message'=> 'You have successfully verified your email address.' + ]); + } + return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]); + } + } \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 3439540..fc5184c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -18,7 +18,7 @@ class Kernel extends HttpKernel \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - \App\Http\Middleware\TrustProxies::class, + \App\Http\Middleware\TrustProxies::class ]; /** @@ -59,5 +59,7 @@ class Kernel extends HttpKernel 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken', + 'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken', ]; } diff --git a/data/mysql/default/migrations.ibd b/data/mysql/default/migrations.ibd index 97352e53af0953f6cf710b089a218463082e1778..255cfbf37a0dc91bf85b35b20f3a51868706dc50 100644 GIT binary patch delta 187 zcmZo@U~6b#TX4W)!^yLD3=9m+|DgcLW?+y?U*)eNPc-gSsY}*#)Ibe8!u=8@j^xbJm)4u diff --git a/data/mysql/default/user_verifications.frm b/data/mysql/default/user_verifications.frm new file mode 100644 index 0000000000000000000000000000000000000000..af307a137d971c5d18ff73077d7f5986d2561cdf GIT binary patch literal 8624 zcmeI&PfEi;6bA4wGjWKa(17A1xX9Lp)FV`JlY&qRUAPKjQW=B^q}6qgrP3Q&Lo6rjLf3MkpoU&_jSNCg1iTAp#!NxFbq%l3b0 z^zM3gU%xDiDtj#|yReTBD_go{)`o1JEy}8}Pp;m}M7bymP=EplD`1d1SKi)q2@Vc6 zPbNkI3Q&Lo6rcbFD6osbn}=wZ@&A3S2aO3LIrU)l$!{`Kob~S$_*$J_B!9f5bfRr8 zhbDr)C;|hsDxV7{^MqkjWQj2ZbRZ`y0tvL`75P^aFed#{a^wPIxrZB|ws}`?k+z+r F#t&rtI2-@~ literal 0 HcmV?d00001 diff --git a/data/mysql/default/user_verifications.ibd b/data/mysql/default/user_verifications.ibd new file mode 100644 index 0000000000000000000000000000000000000000..55c62e61e3db45ec3073bea1afe8d18cfdac3e87 GIT binary patch literal 114688 zcmeI*J!=#}7y#h8O%4T5JBtH}XrW*wmSS;DIxFog6@@DjLL?wIYGvs^us4-h7_7ub zEiA;se~`k~U?++1?CtJt)_5Qar{o#f+4hx|AMU54tCCBZIvtDNX8Xyg4zTJ2$J}|2+N_ z?=R$M=2fcrn;qvk+IyST&+*SI?)tk`{LSw(E8hHUd%p5ttk;^yy^4Ray6=mx8*jJ& z5Bb;OyAvQlfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkL{4+Xy6cy=O1p8wXXmltBGCL_OGcKGh<^6Sb;QvUwWzt z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7e?K?0HgpWZ$`l_JmoplM?S2oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N X0t5&UAV7cs0RjXF5FkL{unGJC7(w0c literal 0 HcmV?d00001 diff --git a/data/mysql/default/users.frm b/data/mysql/default/users.frm index cb576531c1f8a6a2c9cb6d4b326c540e0ab323f3..2cd267166a4f7fbcc737ba3800d811a289420bde 100644 GIT binary patch delta 151 zcmccS(&Q@mkCBUqnSnuok%7U0f#DF-tcikZjEWmARAnc}$nrA^ZVa5v#Mrc%QGt%1w4q`@VUzS>w knU}IFJN+fo$H5TIcNbT#`jsFaV`_^hB$Gf{aLt7#O6C zbs1QZM0htIG`F94VYc4N)PIQ}*%dn8c|dt4BsD-?K+BksM0hu=HC(c{WA=FM1Cmo> zdkKIREH=x$(G40Xd4kQ-qB6f^?rg#bk$1$Gfr5sbyS38YXuGcPSOw-gi-+zbrGr3FR$ zsX#6d1A_pASYmNvibG;?ie7SlE>Ig2P=&<*J3s*>K}JYeOLGIAecdv5GlP`HACS<- K3mQPYkP!e4b!a~T delta 506 zcmZo@U~gz(*ZL%V{~`lAkaQ7a;6M`O1hP3dYMry!o4MeN9RpB$W2S=|P>>Nx5d(vy z{V@hsBoWSy2hHs#UYM;nCuQFjknFA?XHB3y6OtOBE}&)1NFtn@)fz6@Cz$Yh@`2=@ z6rEuM$}<0l0hKB{{5sCjzU|Ap`$kzt+o8{zx2f{WUTx3^Yz>v(HYN5sew6;He>MEcL7BuIS zpgV_QG1NJefsTPYN01Mw7XqY!6xcaTMKBiQCXhmd%)GSB+|pcNpl~xV6qgnh>8Ap@ zK(@gDPl?4T4nVAzoSzHS#mED4_UpvrL}XDWNU%$D1D)OWdTt)j*(D&MjTbb4cp)PI DfVXNH diff --git a/data/mysql/ib_logfile0 b/data/mysql/ib_logfile0 index fc28cc3cd120191dee2a1289f9ab1643661586ad..d7c183a2d05e6537c01044777f51f46d2ef6e959 100644 GIT binary patch delta 50306 zcmcJ24SW^F)%V`b2Z7w1j|(LC<_m}rF+zZV5u+j|7&HQEfDi&Cn>?7>B`)-POv(z@lA&yH8|vctDjXsISbzhHYxGziI$bw z*wkEi=aM_d+_|i&t#)}+TWfP`L){&%w=G>}WheSF6MaLn6D=DtLkY3KyhOr$i?AS; zu#kBX(6Ovy-k8K#a)Jto4lU#D>&^Bw-k!l&VWgG3U1hfC^L7nmy^%Kac8l3w!rRLU z9c!f#uVQh#*}jjryBJp+=^EaC#B4uiB_O*?sf>JlZIcN%^L}DIhHWuyt6|P2pO2!q zpO&9qI%JbgSiwbD*}j1`s(53*Y;54esg$}oGv6@VPxJN+&PcI6BmtS?oNYy&mJaBl zO#UdA=vIq=wmH+Txb8m7^8X5Lfc}Ca-!3Uq%$*|HrIOc0vPXXQ>W+OPd0Qn1L~>Am z4(pC1B01`)=v@&V|I@zKy_~s|ypQQArM*f|8=7b)H_ram;+mF>rz zSX6pW*N?F2|25h`FSUWK=$ItjQgv{Cky^hD{&u%dg}g zs58YVlOMSr-T~dE9XIpoSu)Ft#r0QMj!N{*IMwjU6>|_|S0B zpJ3V757dky8NL`Vsi}Nh;PjFyy%Gt@TH9K(Aa+KCvD8*rr2GM*|6Z^%Q z^SRaUkNNp@6j&zLnf1IB7&Un-8-f44b9J{i$_?lk-EE3vve66@Z7UR$04(IF#7=t5 z$M+K4`fR(+lf{^LF(zKDi5KU^bL@B%G2TS%XCfwe5$*maUVjr$Zen!eL=(?%;`vRy zK#!NLBoi;0<2iJ2vWb{tBBq*%L5@iAf+pTT6K{}-H`v4*Y~rPvc{?0K7cmxHfs{yxbcTnbIfr=%yC1_al;C^%cF?H zOvGFh@gfs(I3h}d!%e&qCSIP2cd?0gv57a*#Jj}A%Qx}z9TV|V6LFM@INC%UZQ>P} zcw{-O9MnTXd&MAEy}P&&(6lSlj!=8u8fmRKI7kYq*MmU~M~yshCk zJoq8QZvii>z(i5*vh)#oZd{S=+Wn*0ybtwQXBs zd{8X1wr$I^wrz{7ZQCMi+qT5)pjgek?OEG4?y|IhDVud5ZLY}$x?GGBu$6|bGOW|E zF2hzEw#KlvhOIMfyvoxATN{mVlVO_;>oIJLVOtH`X4rPab{e+Zusw$DHEbU- z=M0s{ej_|+*kQwt7*sw{4l^9lLSh-;{4687#(qoRV+M~W2!|Dxd zHf*tBOATu?Y`I}84O?Ycr(s=&t!C!X)vYnYwT7)TY`tL{4C^**qhXs|c4zs#UG0|t z9khYj=wX7kZ!_+hRVyqJC3hk}=X z)c!?SPQiYbHS)|V_mFdspzNiF9)tl@;!CMMFf9}rHzb_tlpsrF?C`Vg3-oL&#=urQ z43s9Wq-TQC#8vVm6@h%0CU%MBekmK0JS37e@*`EjQP+v&agF*Fk!-+^gCnInIPON- z^R&i&MkJfPN7=+4DP20{7NuL2Zd1Bl=}wQ1o$~g4DER?Va>ojmChqq3l_u^{x>xBw zrTdj0RC-wH5v9kJ9#?u&>8TSAS)p9Uy(&I!sNYr^uXKRYB&9*6X-YGc<|xf|DazlU zr{a921x#TrT||v+Ybz31?d46Rni< zDq&{0w>y* z94?sCue|+dI7e2joa1Z%xN2+640M7Ap(D*yJioipIhVQ5Rm)meHX$NPST1uFpMBvg zp^KfF=wOWNGlN~9{;&HH)lGBEMaw?DWc0Y&dMn%S%k;zH=|_pO!xNb2j|IY11H$16 zgu@ev8U~_O0Vgq*NcCeIjSP6bY&)RSSb&BGUSXnD^0sS&VGm3&U=3rviPg;8EoOTO zZ!c$DX{6{Najfg_1cSd5*ad`%y4plT=LoUu@C1Xy6X-fT!3rnS{>>bpSdU?DR|nZv zBZI$_V#D9bKfQDW{GCAfJAvfyr1Qh!i7j$?;%9?orta2$UxEhw4mDgrHHR`|KsZ2waDd{zRYoM z(@8shmQQC_-=xUpU@qZm_31d2p89k+JsatzPrL{Ije`8V+#K-{z1cTC+q(Muw>O~r z4x#!+Bkf>R`V|-Q0F}W^5f6}`JwPpW4wQbxFm~8X6psd~T64PSd^N$Pm*Dz+D4_{9 zvNFKBSdtOHPoHF#so%$|1J~Q*h`T3;(~NfaWO(kE9CG)3TdHF*?!yhv%3Z;&yxvYY}rFyZO>hUXl;}b z$vk%rn28tL#n(O;O`Hk4g4N$ zfc}D%mgl|!Gsk)E8^7(jZ~V4#-+-Ekp8Ljcd+r;*?YVEjOgzth}1~WuW3UYIBePgPedD)1_l@87+&5q* zo^jv!jr+!Ld+r;kBiuJYxNm@P-vHshff|afN(xFgfpOn}!3snyxNCrXN3~H7qQJO? zvAYIHwu152;QHBEFzy;`ldZt+8lYz@u)7A^o~^*{8f=rTVB9reWGmQ~XDhI~2HWDU z0cmsZ+{Rl&=NB7-j$37RcN*4Zm>3ZhZ;g?yWw!jS*2~cb{@}F%inGqdS#Ox!`Dt&r zD^vFkgquu6&;GED{b5_4{b3vX!?w1WBeom1)3Du!?J;bxVf%=|eS;J4H^PI49X9NU zVaE(R&P;mkP26k8X8U6(Ex2p^?5+XAT?2%>1~`k&NO)_!#t}n}!{O$L2<)x_o~8=) z+%;hFyq&S|4 zHL*E!V8&rE(R%*GX2kvz`hf{Jj0P92UG6{?wmA#S2fI)54$8|Z!+H%n?J?UnEZ(pIh9wym^q6C(dDPA@EXS~1!}1KvH>|+0 zLc@v-D>iJBVI_u@F{AcxmmA>>!zv7`G_2aN8pG-hYZg{{X2RoW14q1j0n%S=;w)uG z-R5`OPgA$)6vt)z@lcH-j(Y!Uo1}Bi+c`Pn+#$cv~ETh~C3H=)f(8 zZ8dD0VcQMc=`qLN?NNJ=VS5eRXV`wj4jOjYup@>YGwirwCk;DgST8fK|I?l@#x^Y8 zumOf885T4w&9Dr^a9yrnN>?gfrLNwT zR`Euqo0M)=+M{%f(ydCjc{DTgH)-ex{sNnjW2ao{diUVggWMDk#$bXoi_hQIF$+G$Su&b1%bM~~A;hz+$vm1c zOGXoB(P+Xf8BLfaqY1NQG+~xi&WZDWZZETRFkzMqCLoS`4jxQE1m1M8dla9`odrOr z;L(IxI+`#`MiX#0j3!)(iE*XDv8Ug2yPk8Rv&vyO`QJsOz8PB z=sEfrE9mQ_yzwC8RLWv@8LW3h4Fd8_+YH0sHtVxV$P=2hZ zKWMyAhFs^{(%Qz>=H}Yln^%k-$9c?t1bLhqHO?_~s#O>@&T*d84|^vxHa}rV`|ojP zjB}*YILEUeBwpyukw9ZQ$i;4ZuF2)~q?!w3~ zk}>Gq|Hk%z;K~NLSGMcaPtSj4w|w>E#i*-yQCEwQ!C-CuzjdXBbWvVI`B1O4+FY!A zsg0vry^D?e&n`Cdy~^;&*8V#>(z!9C=FphmJXL!B>-*QPXGv2XG^}n>)3T`Rv8S1a zUpm#gE;0T;%(w5A&`@W<zmplOJ50vovG1A#823WU_Z@|`DW28xA4>a6R^Fmzcdgpk_46b zMUo^xLEQm|4eomZ*JDEzE*tvE!4F2n1GySEPxg#d$taPC)H_rEN-=D_tp+rqKshskl?=oHLtWfI1$B zMR7OPcbD#3t#pmjwMy41U9WV5(r%Yh`EOM5CZ(I1iV@MvMnoEnh}m3hg&nhTH=Zpv z#BA6QCn26~O=cTnw%8D}ZH~e-5@w4HFd&T~6QYozrFdyPXYyc$m_J|Etj^38U5kTrE^?2{PrE%)+R z?vD7D-?U=G2(*E}Lgz1~HsIPlkB;qwO${0XsV3e`uoB-)B#QQx5a~OL0YE zc);4@Z1RZGpPBbhHW(+%1v);sfG#sH z*PTi4`x+gLfc$cK`dZvRlqWivtC7mQA}c0|<9g@*jC<~(I%s-st54Ea`;g8moXF%V%Ry1w}Uu z@^YlAuU&1U8-WaE{)9Cieo2xz+vIn4n87N-p(1Yj)F^Q9Brj3C*o@ah2 z-2L9fHD90Ik(-u>hdOWy`6{KO&-IniYzrPT{b_=gQ#|x~)bvScJN*Swxot$YaXrJ` zOVzzfemc1xknPf>E|J`?l7~dHMt;`nj&=O1T4~bbD*B2<+8{sOx?`hAo>s{-A`$m5 zowXO1Y{98tPCs&sQi z>E@`?%@L(T9QPz_eIbIo$vQVjb#9L6+#J=pIihnondscKj;V8?baQZNtaNi++Xk6q zrJLg^-5kuq_USC_K290Fkw<)Qh0-Vb9yAlMC!T)hd{0c~uAiFw7&LE=x^O~t|E%Qu zCwhZI>PPTPcToIHbT|1PTB-NYN{jEIm3j}YwCEm+L-;0IDL2uJxWJ=tqA$`-Gx_`5EpH7l}hGI z)EfDz*B#9k-#?ODRJ24Qc|O|GNxm&JurP5VOJC$}RU9EJD(zQ(G{OeS_Ug-v< z-AXqq-K2E0(jKK-lx|hJP3d-h+)Li6;@wL3DBY`cpVIwG4=O#Z^oY`99<8=ctV0|4 zyN&w)h;+O(`8e+*1;5wz(T1VmRb23G9aU%rRifZk)|4+4LR@8uf>()xSJ6$iN))_G z^t(#*yGr%DO7y$R=(mGIc)~X#xhG)-M+|q96}(Cnyh;?jN)^0H6dY$G1%C-Q)hg(B z73ueI&Xe3!kvG=wDo?+wthv)G$mdn2`cf6MEn>j zLF|}&+s-kly;I&z8pG&xDEu1q^qvyZW3%Mg9Qn!B9eE-dsghA5F@BAdLf%KYO({}Z ztaOsn5|`r6no_3Xa-}nrRw%7hTCKE3X}!{BrHhp=RobR^)|BNcUa54I(oUsaN>?jg zqjas(bxPMO-QZEDG^N|)r70VgZc@6LsVJKGF*2ZNbGe`kJLaM)=Zd1ug`%B=c&;^> z@1%1@(dN>fbndm^>fM7j@IKnWbELrTopr8g-dxeVxvF_{Mf2tw%|o)Rc!=YklobyV z+)Y-zxvF?`Me*jU;>{Js!^uSPaA%zh&7;?>S@Y()chgjf0&Bv=4S)mIm{xyFLjV~WQ z{{zgX@PB}+$fc@CuoBLk!6!_lFMzd<(&$$XX9Hcf4h;m)bJ;W&a%tiXect&v`re@n zUa>nE;$EP>^f9~2T9g#q_X1a)_X6c>GyUA6i)A-$!G-#{mp&85NYVSDoI<`fJ6^8s z1-`aR6V-WszH7tq%g8y2PxX1%FDz&Am#Fna3TdGQIsh7l-suEjj1ZyR1sWtST z!5VzQ;>pM@?}jq%elNJc<@_5He_~VQe{;fVPSj)7cIy0PcJ)iF<>I?Y*(N>icJ2>w zg3^?oBH5*q*F_?(ibgidAW;wUkCSp(;~tScM^*B!NQ~pml~yaQQCe@PliF-}>SCo!nM&s`u8T}`{?%OY zCp)Uq3aX{^uePQ<(gSg|C7pk@bpF+3WmQXOUoCxowe zB=;oT*&~9x$(?<*cJ|fM*;i|4UoD;ei1ghv(FQ(58z9GO5ND^(e>=R|)#&?aY%Mhp zb8ErG>_TSQ?5d{DA1?`2i;K8A%0-N8^t{@cht{C4#+yFpyfK6~_0EwQ4|axlurcAm zSIyQ}AT=+h4j$|qIX{t{dEv1wc$)kF@?Dxdn9{x*`LsBjB`+sA`f^epIi`I($T98P zah?y-e1fAH9c#69iRYpA3I|^oLlyX9&M6P_OZ&b?ereljiTc9J!syp~^0<_4`$Zwl zQU6D%M}CFKH_Ppa&-X1doQ@pU)z%o#VeMsQnVXfg0`qkjnd0Eo)_ZHv-&OOS=HCv@_##@%`KScqSNm?|15eB&upU!Xf(AAlRHz<>^jEy ztk0p{LH4=!FJnk#3S9UhGsSJ`o2L=e|1sJCjr0W1_Z_xU(&08@1&Ua9hJUw_6G&et}gW2_w8kw`wumwu|A0^5>zXi;?z?G?av!6Wy>#1vX2i)s)gnHMV)USwWgZy-#XlbtaJ=7jf z1O9^*lG~rslU}(jeLZJ)p|Pa1!hkz%lMg*-pd(?k3xb^VCk9CwAgIwG-!wortrO zUHGz9I;~?KbZ?%gd-Gho5SeAWaGvKBnAg|c9&H3f4sH+S{5u~y85x1f%~L-+X(6dQ z^)VgOd@H!LN#eVgTKF{Is*Y*A*-5VVm(dAf6Td|rG=4qJS|PiwdubbT{uGXk z+UUzJ+|S%Kt@l05{>0^3n3zFxUB@ENLo~~L?p)T zA8g}&oV(>pS1Mhlv{Px9($)HPmEal`uT{EE>3XFbly)oKsC1Lk%}RTeZgDBRp~0;x z-llZB(w$0oE8TPAs$Fk?8x@P^J>Sh#vD8a*aqQJt`;_iideEazY4EVeOM^$09#eXp zDRn%baozse=y>Mync6z23D1{~XTCLMExG;YThj5&myTyXDb{@Hc;-vTGhaHM`Ib}8 ziE{*QF!S|+biO>0&PPWhC*h6;5!_AgXy$82GhaHI`P$LUmyQN!qmE_=9zf@#pOMDS zryMzsI~Zin{lx<)Y2f_6-p4*2&A<6!mxZbMkE7`3OHYGplE2R!x&z`s43rX%G8k3- z=i^zXr2nq#(bNC3PtgD0p9-aAe}eu)-xJ;sT{cQo{nt1VRDFeel~K;dK3Dl4d|$@B zUUfCjoo+RGu14>I?!E8@_4PE4zHrBe3;V+Rp-{@WQKue8S;nF)G3a3hBOOWMfd#%; zzTg=04dQ~2@&)(tK=!#{`p(VNbG~!)uYcFZy=wI}I^2_gJ1Jg#tlouhy6}bn3-i9C zr%I2rZvLdQ8E*dz=|z@yhDS9?LH&>ms{f5#P%{$ynR`wjcei+h&zp4X%?D1P9^z0B z7gIgR%cI^4t1@N1-wW-3$Lu#uS?4bzeem~O_X#b!GUOcRO3r>jiJCVq?-sa~@SUic z!^jB#$wY3)Rj_X-CG@S95C5N4OW`L~%Y@qcf2CStqU*UZ>P{WojEhOl@4v&Xr2hYQ zCH1Y8KIhqJ$6%UZZ2RE1evTFqh(|p>h0_JCcKk;whlZ0J|BChxQGJ+~Pu1tM-h2B0 zP4yL09eF+FnNO-dnTS8#`gYQQJ~e1h`%h~yY8L&46zdZH4%NR>gOSwtL!)N1V#QGh zpPD~lvRh|~|6!f+8w8I3WJee^F^p=$=f6DsBxer%5KWx@QIJ;+v9J((&+%5hcQv9!R@s}kA z{?p>;7a;<-wVy%pXT?(S?uY}TRX3%tbV43dQ;TclXeY?m~p6=V-F`Xj#_Rs^#4m_}66Td|rJ7_l^ zSa>%cSg;K_Kd?;qZKBe;l&vEk%p%7ihO~S;Fr*bzx5@1yq)VuIHVzz4;%0`TNY)lG$>Oaf~VQyA8315Ryr_V zBnc|LU5*XeCW$MGg9NCkraq~nnQYE8A zVx~R}EaZKhWRcQhrIVDFC@u4-Q#w#gUru6%CoUaWp|nzIwbB};^-7zSE>^l!X`9mJ zppHB$3|y(=RZ2URb}3!0bdA!rO4lh}uXKabZbO}c8x0@0N$F;$@~|OOA9C=pv4Bgd zuwwz*2G#a)*9zGVx!^Z-8_<+x4 zfqFd_h}UC*K71^YhY!SYPs$G;h~RGW!^Z-B_*fth9}D#1V}U$;;B55pu@iHS7U1Dy z0rHkQ+O}H3Wb_M}+um~{tIf1 z19Hqk`8kXoXzqNPBO*Ggao-h*8Rs5&lJ{|LPbuwHdfL!Iw$gZ|1C%DY6y41r$si>> zC{1HzD9urtt29q(zS07vg-VN*7Au{kvz`W(sJKjNxzZU*E0k6$tyWs2v|eem(#0Ni zN(U`vE}AXl+C!k(HC)gqJ8DopHKN%y)|4;yKwM*qX4i-&*N`UHh$h#FCf8Uw&)#(% z+5o=HWPOvg9-2*&pR&6Yf{X4j}@*NA4X^i*_)J$cmBym` z4WJ@0br{QAc^(Y!%sRK|+%xxm;*XwNbZ%U`-_4P=?}zdw6E@E;8si_t<<9-ttLV>A zlXzpB`?FWkpUEcoXEoZN)kuFn?bT@el|wP*#k(x25@Qyy!BxYm;XtXBH7TI$bgr9Z2c{;XEqqP5z8)rw(KtKCp@XoCiOeY^_ zx46f}Bw<=UQgRRc>e&ZQFb9$c2i1BzA2=?FoTPdYzCtgPvWity<%GS;8DR3h!)iV- z{u}7!F))t$M>+_pqXzbO(JMdPjPfG;zEueW1J8F8^(B`_~Qh%dDQ@%45f zzTOTjV#J^$_$0;>(PC`F#&hs@tuWF`-gXBYv1dMS*D%(bSk1iMVz!s? z_HxFRMvD78QgFZC4(8zV?fAh>9_aQjV7Rvf-LJQU;p^?dr6@|w^#;S&+ku-oSz+U0r6ch5c3_3WMM$4-#}>Zc4y3QQ<7b1(Grrc2ZTD;KVE9@) z5MOHt@^Y0!pPjJ~9eR*ejdhuGx{Hh)`C9Xy=9Rvhg>#Tg4ldZc^&jG-b`LYNBpk6Ll+_=r%oU zyV9LXcPrhaGgb!gRq;Nh`;{J4dRXZZp$QLF{upgwAcl}>E*HJFJ@}Z$I?j}AoK^17 z?=aXn3;89Y!EGH2(Fzudk+aa6@})wQ=0a;SPdZsBM$SSS`&}qT&O$MA7K)LxP>r00 zV&p7TBWIx)If&z)gKZo{a5o(`au%wQvrvqjg=*w16e9;`BO~W$Fme{c$U%d*Qpato*k49D zi|dHaF8f%hXda)#ZsBh9-%3cZHA9-m|cvvN+72h|lI7;h1d{i>oqNFa8 zw2t2OWYJBiox!;L5@aXXH|;oxOoMqcvS4>8`%+4~U*ELjk#?x~W_mO>v3u^ky)m+I zcPPW50}}ck(2owd*IP4ld}`t*I)GObr9>y#-@XU-<9Pn42|lz! zUWYzO9_?$3d5JonJwkSwSx|H+r$0C`(O7+%UaJ~PpK$)H7S1{AiF$f7H2Q+xbKgaR z423fG)?>?%y);y-gPF6?I%yuIEE6#=tC z1(+m=^t=Ts0%n1VfLWjd%*3MwD#&ifA+m-TG5G)}GZWEUks@GLqzJexQcyf^L5hIw zEl3eC3sMBkf)rpTJ#RsZfIY}*^R7v397@nzks@GwD^di^iWC8}A_bU9Fx=y%;w?xK zFbh(EnRwoU6ahPX%n#pz%P-)hbJvD8U^3#ZP!TXIR0PZl6#?5@p(0>br~or3@D`{D zm<1{Vwzoh9n29%{$IY-~dn;4~%nB7?CgMmhqFJFLU{_c+80RA8GPhs**MVDvad3sk^wh_Mh*dLH5xDuDGSF&N+2_MV4$g$ito(*2xJ{QeB3L#qE&LwYb4tgB#4Xx4~R<8%(TiI-=Vov(Yfu(#Brb z&<1nuY%tf%26L@!Fc{f%{gmK#lgv)TToW66_ZXRLUqj}a*I=%74dxoxV28~SM+|c< zY3y|kY1FH;*>_^`b7%utYL5ScSUeB%;@Ip!3}p-}R0Md13LsXf09N6l4=YsgqcT>g z@EQkq@7y}EpBJbAo~HWq7N`J==j{Z}5^CLt<-RCF5@XPa(|Fq*9LN4F-p*mnHL>z| zd!*SO#oGn^8Gam8$U7+cBEyOeno#noJi3*9c@12Cfef^PI<$fy zWoeU%w3!(-16rX1Klso(uskpV6GlPsp><#hHJ_oh!~M`Ym{hd8o~W^IhPl>F0M<NE^`@>g!AV6YcO@J69RXfu!fW5L=={88CcrRs4BW=JT?&ZW(oPoaa!btiz0TWv z821|KKHh%YY#-q5gN%ob^ayVsHQVp<_HnO$pX42si&Mhr{Jlna+GE~26ELshAzRt@ zelqGh)6;iufc5|rJIS!1VQGeC7?xvLuFD+T&NIS%!wL*5G_1(5V#6jGR$^G0VdaL+ zFs#C`N@5s;!8KMJVU1z+hBX_u*s!I{$Y!N=CaCj^%MQT%$IDFMu>s3W0BM;C{7~t}kuIJ6E&%vU8zwjbi{HH>SGbRBO$ZnnR|+Z!0W zjdUY#KW(<3!KaCk_-40xcCb}NttKg+FX_(9v=X5wr&Y^Pzn z4clYbUc>ge4E4X?2oD-|*svpp9W(5>VJ8hcWmvCar#I@#S(li(W^y69qL}3QdPmcUZwQgiK11KxLU3XFbly)oKsC1Lk%}mh<;iKgl zb53zCoV0aP2OV{&uR8J3*1<=665={*GW%%j#7A341JQNjqpcGkZJqdN>(obECqCLb z_0iUej}~#qsRgaGu0R zi@dRqwoZJsdAl3Fj5aU?ZGZ-%gE)YFwsr0}bTauqaUt#pBa$PbGof)#x_tj32jx`9 z&eqfkG0&2ZhZSl!DU>|?|BMR`)&@zo$} zr4>pml~yaQ(HH&F>s8#Wbg|Nn4dieSddXNY8avji} zfH9A_lD23GP6W-}02Ql`d_5S>cTy+thfR*~7q=(;J>&m+bpksce{Zdv{M)ALV%E7OV;p1~~r^oKEa-&-2NBF(!`= zN9OOo?8RqC#{15wGv2yA(WW=2`co3A6C{tPKdBBVqV%t$vf`3x%baq04f>#0F{j0Jr8zQZjKBoM2}KP$=Fq1$#9V(aknV0%<9KQVa|M% z&+LoIMcy5JA>I2TdY{&b#^;rUeS}Nm+Y4Z+4nKE9!#(|@S`wTAzVuuaR?=Dd>N5|+ zIlIKHTohBEC}(HuoD|V_)XDUf-I%@tlL9wup1!gh(^q7Zr?1rM^p!f9zLMPF^uMRw z3gA<-)@3NLV4coqsk8W-w7Ype3rIJ4_OI0)c&;RKJl%b=q`i2w zq@NA))2(qgisWgPJR=f$zNCYCcpo3XMd?jD#i*$Bq4QY6EmJr!-ox($j{9Y^Cu^2PjQa8dRF5G=nKy zKA{{H=PJ!pny<8gsTcqh2wzS~K(UHAQ({p!xCTH2835FKA}Q~yHp#EzK5}hrQ{=YG!o|)IY&3|yTx7k- zNlaYz*UW6FG`@If)l+q1t|ZP?NV&u>_Y1F~Uyx1i7aFu*XpnxPLA!wl=>}etZlFQB zfy-sqHILT3PP!Q?#Hp;;s1ib4qNSlptRSHht}bM)G{i<$Y3O>DOp`clYn6s7bVsG^ zs8Y#%k<`dfJ@0Th*=7;7Xxt?tS<1d2I&&NEJ*x>D&XrJYK?igyaVs5kXdsB|7wnx5B4r9-nh-XnXXs$WQJMmpeGGuQ3L$IGjCZ2^Trf$bB7M7a9(#guAZS z(RIltcU_Izbu~)Y)u>%pqs11?>(X^KO4oITzA*9z_gw6!dtI7xuXG%z`6q09&8svV zFOme6_(hT=KSA9ge!8&w>B8ct3+G7GT#cG1l97-&@(Nsdl!)M{BR}2U)~7#0L%|n{ z_z$ajgbVp_(x`Be(qg5Pl$IzhQ(CTchM`Wl!tijV(rTqOO6!$2D_yK~snRy3%ayKF zx{9cDW#LX0cPU-1bdA!rO4lh}uXKabZlxQQZc^%OW-eWqyxN+FuB(X)y0D`O4YEnP zt|oL{Cn0XKr0Z&uuB(ZkOB>C*iIOG2G2r z_dYcP_xu1pN+s`Zk=47vr||02D-8)bY)GXS;d@3>B^8-?#i0j z&44#DB|z|HNw?hlt8E+8>hG+xSSVp0rEX|s}(UdJU(@uhfI zV2UZ@yv2mi@@g^h7ifxO6SnoIR4`M;%8m$MA7BjrHKTi`;6Fw@yq|kBC%#7|M0%B^8NI53s4l13z@5)8{s# z{2#^UlIeue@4KXPE&Ajg6-f$jE+eTym%B;P7a^jOx+y9tn85tP3q`=6q~*TvB58dU zVx)D4n-M{(AC=F$ z`=k|nPFk^1X~m!wA*sP1xk=$2t>~oI^hqjClXBckj*Cuf5~nq&*G-Gw|BcGlQ+?8k z*R z{+M%niVtJjtMs&?8Me}RL!FEPhG!%x4Ju7jnxQmDX|B>drTIz=lol#2A}W?sMzM+~ zDJ@Yd_XE1RjB=IEP+Fn1Qfal)8m0A0oo3~Wl`drpb;YBgjMH2Ud#agB_hd&ins~F= zQ_a?tFZV#)Y>7S9EcR40jng!XJ=HAsRI}Jq&1z3I!=56`y;%*aW-+J`Nlub>=DuG- z$?)pGMSV%oV*3gQxOw15!)CRon#G=KR(q;h>?xd`?5SVCo@$0Y)l9v_HOON|vpa5s z%(6k%?73~4BgglJ@@-#9B;&16rjvTjH&GhReLgklwoKfQbhDNp1V09d7dPAVm{ znD=nqt>gxru}XeAxs;KM(u^*V+^>>{L?WKg3}>zGVb^DA#^Wmaip1R@Ki#@xqez}s z$ulA`p3jUP-p9GyqI9d$ZA9I6x?ROPmF`x$N9kUr`%au$cxKpOX!BS&HU2_1i8T3~ z`!&`Ftu$Wg0HsMvgG$qMj5RYu#W_lImF6kU zS6aYSR7yObBcW1QOaQgt)3FGxV3DZQB5TU}Hi#ElqEd@UrC{MNBAr?!I<-i2YLV#F zBGsuy@{F=bRceu_6ymriVHH9Icav3Uk*d%lQK3buLW`h6vp7SnLwlh^i=ab`NQWkK zp5&PXd1Dn?m9r@L}YIA>r{C zrB2=mHCuFkHRBHqE{Y5r8eS3bA{Nv4yCP0Jwt7OW;|T?kQss`j-~zUs|MpY0>_r#a*GjMLU=l>0l7aJqdR( zh~RE=2h*Y*OpA0dE!x4f$UPcoqkHtP(7&{xe`%rqrG)b&{R{HekwT*eEnWxHVkIP6 zY4k{lXZ9E?PNyQa$67zZnj7&JG-O(hU3tZmR)~eq>yrZsuNmDx>6+3ZiCtCe}!Rp7pkvF-V#RZA^j*x+HOIA@Ae-6)7!NI!S4X(lVE#{biM_c!tsnrIkvnmDVV&SK6#}vC^eV+mtTX zuWeq;xY=Q9p4(=0p8jxu6R> zTG0wxMg3Z#e&m8|wM6||FDt#A+CY(Sne`%C!9Y>RR&q(UiaNH6I<`U`$q;H)eQcHc zeXFWttEeO5xF=ey;!WMOI!MND$1%%qTV+P?n2_W!!@Tw&XHDYUZHN5c!LGpxVDE9UFqtLMk? zx9}K_@BaB421R)>cQiM?mqY(-a z#vqJE7>7`ZFdkt7!et0W2$v&FM7RQ>7~x8Us}Qb6n1pZ*!eoSN5lRqB5vCwqhfszv z72$e>8xYD7ZbX=dFdbnA!c7P_Biw>efiM$c7Q$?VN`yHGRS0ttsuAWP%tu&&P=ip5 zun?gRp&p?Dp%I}8p&4NjLJLAG!eWF^AuK_-6=5mDZ3wp`d>Ww*VHv_52zMeZN4N`N z1;X73D-rHNxEJ9w2&)hrgm#1ugieIdBHV}YIfO2R&m-KA@BqSUga;8GLUuOWOLp&Q{Tgl`~x6JaC5 zw-BC2_%DP_2;W9{2H`shn-RW?@GQdj5PA^4kMJDA4-mE>{1D-JgdZVnMR)<>#|S?` z*oN>^gclKBLfDS*GQtjoR}gk0yo#_3;b#cD5ne-h9pMdxJqSNXcoX3l2zwEJiSR3g zUnA^8cnjfegx?_SM|cO}0K#t(4kG*x;Sj>_5e_5#0pX7be?mBd@Mnah2!BC1hVb7A z?;`vU!f}MZBAh_@Uxbqge?xc=;qM5i5Z*`l0O219y$By7e1z~Z!fAvv5BeVReF1^M zCWs-3C5R)4C+J6zK+vCH06`*wpCCYxM3797LXb)jBp66Ah+r^58bLZih#*XmL6Aw1 zMUYL9LokG3D8Vp-T!M=Th7*h+$RoIzU?jmM1o;G)5{x1kO;A8EhF~ngID$fg@dOhH zE+Z%+xSU`j!4(9>1XmJVMQ}C2B!X)QCKFssP(n~jFoobcf--`s1lJSXKu}I_Bf&I+ z=>#(fZX&pu;1+@kf|&%f2xb#h63ii}BA821O)!sOKEVQl8iHDag#>j3^#lzBjRZ{u z%>;`GS_oPR7887mUTTX9>PX&_nQjg69Z+K(K}2hXl_P{D@#H!3zXGCin@#HiDlLyh!j8!FGa| z33d>?La>wIRf1gvKO@*p@EXDE1aA=RA^17Ln*_fg*h}zBf?pB*nqVKnTLf6TuOJKNB1!_zS@?g8wFXm*9U0juZTq-~_?{ z5}YLX8^L=7exmKY|2; z{saRE5()eS0fHogWP%ieRDvMEK!QO8g9*|I(g{KYVS)^TOoA+eY=RtuAp}DSh7sfv zTtqOOU<5%P!Nmk42`(YXC%BYg6v1eM0)jCFV+qC)6cUUlm_TqDK@q{_1QQ9aASfod zlHe+Ws|h9%TthIK;97zbf>MGh1lJLi5lkhxp5O+8a)KKPrV&ghm_cw8!OaA>5L6J% zB$!1oo1l_l4nY;cT!LzXc?9zb77)}B)DkQts3WK+Xdq}LXd-APSVYi5&`PkF;8O%k z2yP`>~IX z!ES=r2wo?6gJ2KA&k5cn_yxgUf?pE+is07-`v~45c$?ri1p5izAvi$rTY`fGzauzA z@Oy&81b-m-Bf*~tju8Br;3&ag2#yi_H^I9E|3h$`;I9NH2>zGgB*EVZ-Xr)s!6}0G Z2|ghB2SG2vhXfxHd~AOg-JiYr{{SkEbtC`) delta 3701 zcmZA3Wl)t%0Eh8&j)<=bm>lbfied-Yf!)~MjosLRs4ogCA{Jtc-HF|TUD$;k*xh>n zkN1AM`_A*5ot^!#Gdr{M1_lPY2dd4!xjnt-*#xz_^!__q0Oe3vnq%)25rjfxkGMYvv({NvD*n=DvOR9K_ zL!ZUs=I>T~$x{srsscYN#5i#;S>Gs+y_hs)cH)TB+8mjcTjfsrIUa>Zm%Y z&Z>**s=BG}%3t+RJykE&TlGRJfX{BGfE3Tg_2()jSoc=Bp^RKrK{@ z)MB+nEmh0ZauuyssFiA!TCLWowQ8MOuQsTSYLnWmwy3RYo7%2+sGTZC?NYnd9<^8P zQ~T8cbx<8rht&~vR2@^tRji6rC)7!GN}X0`)LC^-omUssMRiHVtIO(&x~i_J>*|KO zscxy;>W;dr64X6)Up-I{)g$#-JyB29Gxc00su${|dZk{gH|ni=r{1d%>ZAIkKC3V4 ztNNzCs~_s8`lWuWKcUvf)-VM&NCHlf6r3R$7?2!NKuSmjsUZ!xfGfB`T1W@!Ap>ND zOyCZ7$P8H^D`bQ0;D8+90XZQTM4;`Q*bb`*%1-e2v=nnqS1A0O)=nZ|KFZ6@{FaQR^AQ%ioAOMEK zFc=OaU?hx!(J%(a!Z-+o@el+PU?NNc6M|tfOo0#xg{d$Nrb8IafN+=z5ikp8!yK3k z^B@xDLli84g|G+~!xC5u%V0S~!wOglt6(*(fwiy>*24za2%BItY=Nz?4YtD$*aWuO3eVsiM&2Vg(x{0VhZb&X5cYNDe6=C8UDXkOo}972F^#q=WR30Wv}+ za0feNhAfa3vO#umKo0PLoRAB0gD2#Hyx;}-AU_m#wo6J|}J88n9$ z&=OifYiI*)p&hh`4$u)gL1*X!U7;Iv2Y=`RJ)sx$hCa|2`aypf00UtV42B^P07GFI z42Kag5=Oyj7z1Nr90bC62!aVP5hj5N!7v%7KnR4wRG0?SAq-|fILw3ym<6+84$Osl z5DD`k3KqaZSOkk<2`q(WupFXc1+0Wsuo~9DT383`VFPT0O|TiZz*g7>+hGUngc#Tb zyI~LPg?+Fe4!}V;1c%`W9ED?W9AY63PQXbx1*hQ*oP~369xlK|xCHTV8Lq%pxCYnZ z2Hb>Oa2xKxT}Xg?a33DPLwE#_;R!s2XYd>n;RU>eSMVC%z*~3+@8JV{gir7pzQ9-b a2H)Wa{Dfcd+jdaTpY6|v7+3v%#r^|m)JL=c diff --git a/data/mysql/ibdata1 b/data/mysql/ibdata1 index 21c7953a609ee264c460348b79a6e29abdcb1ff2..998da9d83b2cdd093cb3b3d13c6c4b2c0681baf8 100644 GIT binary patch delta 38179 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 Xt2Z${h_yjX4`SUQW(v3^tSI_#_qjQn delta 10256 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 diff --git a/data/mysql/mysql/innodb_table_stats.ibd b/data/mysql/mysql/innodb_table_stats.ibd index 7e7919f5ed39c23cc4c1aa3f0503fe89fd018c08..cf6d7738eaa5cbfb0afa9cff124d24c89cb75c15 100644 GIT binary patch delta 334 zcmZo@U~6b#TX4W4i*IHI0|Nu|e<%R585pEu9=q-bvmgW`0~3>I0|(<}hKURZ7+8UV zER!t`7&Ed?&N-0EW51MvfiaCyAnJ~f#N>qs#5oxG*%=rV7~CfRIbdHe1Y~RcuS-cy zODxSPDJ@PdiZ4qo%1p~lPAtjH&npJmAgD1NXhbx`2#A$%k`c;c6l7OmFkoPS8l;?C zSzMT7YM`tPq;w7AlR(M@HN=7D_%MN;0@3FV)eaPgvKWPc23h>yfz2QzT|-@nNxD)% k9kB=(ZI*KQV#{5?ko;2X#Y0d4Z9Hghzwv?w5HDl|04hdPQ~&?~ delta 134 zcmZo@U~6b#TX4Wa!nf9dfq{YfKNJAj3=ER9`(5{gSrCGefr-(&ffda8!vLb0CtDma zW@MS1b0C$6pPhk$(UB!J>W=;E$qNsNb1;HL6#gHX{O5rEW<7^pcH9LF$-jhl1c40R Pc+lK_;{^>MUdRXllv66R diff --git a/database/migrations/2018_04_22_080323_create_user_verifications_table.php b/database/migrations/2018_04_22_080323_create_user_verifications_table.php new file mode 100644 index 0000000..216feb5 --- /dev/null +++ b/database/migrations/2018_04_22_080323_create_user_verifications_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->integer('user_id')->unsigned(); + $table->string('token'); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + }); + Schema::table('users', function (Blueprint $table) { + $table->boolean('is_verified')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists("user_verifications"); + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('is_verified'); + }); + } +} diff --git a/resources/views/email/verify.blade.php b/resources/views/email/verify.blade.php new file mode 100644 index 0000000..aa20cf8 --- /dev/null +++ b/resources/views/email/verify.blade.php @@ -0,0 +1,22 @@ + + + + + + + +
+ Hi {{ $name }}, +
+ Thank you for creating an account with us. Don't forget to complete your registration! +
+ Please click on the link below or copy it into the address bar of your browser to confirm your email address: +
+ + Confirm my email address + +
+
+ + + diff --git a/routes/api.php b/routes/api.php index 2f258d6..aff41ed 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,6 +20,10 @@ use Illuminate\Http\Request; Route::post('register', 'AuthController@register'); Route::post('login', 'AuthController@login'); Route::post('recover', 'AuthController@recover'); + Route::group(['middleware' => ['jwt.auth']], function() { Route::get('logout', 'AuthController@logout'); + Route::get('test', function(){ + return response()->json(['foo'=>'bar']); + }); }); \ No newline at end of file