1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-28 05:11:39 +08:00

抽象AuthUser

This commit is contained in:
xiaochong0302 2020-03-30 19:35:49 +08:00
parent 66b1861ba0
commit f565e68e43
75 changed files with 710 additions and 400 deletions

View File

@ -57,8 +57,8 @@ class CourseRelatedList extends Cache
'title' => $course->title,
'cover' => $course->cover,
'summary' => $course->summary,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'model' => $course->model,
'level' => $course->level,
];

View File

@ -0,0 +1,41 @@
<?php
namespace App\Caches;
use App\Repos\Config as ConfigRepo;
class SectionConfig extends Cache
{
protected $lifetime = 365 * 86400;
public function getLifetime()
{
return $this->lifetime;
}
public function getKey($id = null)
{
return "section_config:{$id}";
}
public function getContent($id = null)
{
$configRepo = new ConfigRepo();
$items = $configRepo->findAll(['section' => $id]);
if ($items->count() == 0) {
return [];
}
$result = [];
foreach ($items as $item) {
$result[$item->item_key] = $item->item_value;
}
return $result;
}
}

View File

@ -60,7 +60,7 @@ class CategoryController extends Controller
'msg' => '创建分类成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -96,7 +96,7 @@ class CategoryController extends Controller
'msg' => '更新分类成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -115,7 +115,7 @@ class CategoryController extends Controller
'msg' => '删除分类成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -134,7 +134,7 @@ class CategoryController extends Controller
'msg' => '还原分类成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -75,7 +75,7 @@ class ChapterController extends Controller
'msg' => '创建章节成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -148,7 +148,7 @@ class ChapterController extends Controller
'msg' => '更新章节成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -167,7 +167,7 @@ class ChapterController extends Controller
'msg' => '删除章节成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -186,7 +186,7 @@ class ChapterController extends Controller
'msg' => '删除章节成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -212,7 +212,7 @@ class ChapterController extends Controller
'msg' => '更新课时内容成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -76,7 +76,7 @@ class CommentController extends Controller
'msg' => '更新评论成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -95,7 +95,7 @@ class CommentController extends Controller
'msg' => '删除评论成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
@ -115,7 +115,7 @@ class CommentController extends Controller
'msg' => '还原评论成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -25,7 +25,7 @@ class ConfigController extends Controller
$configService->updateSectionConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -50,7 +50,7 @@ class ConfigController extends Controller
$configService->updateStorageConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -75,7 +75,7 @@ class ConfigController extends Controller
$configService->updateStorageConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -100,7 +100,7 @@ class ConfigController extends Controller
$configService->updateVodConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -125,7 +125,7 @@ class ConfigController extends Controller
$configService->updateLiveConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -153,7 +153,7 @@ class ConfigController extends Controller
$configService->updateSectionConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -180,7 +180,7 @@ class ConfigController extends Controller
$configService->updateSmserConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -208,7 +208,7 @@ class ConfigController extends Controller
$configService->updateSectionConfig($section, $data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
@ -238,7 +238,7 @@ class ConfigController extends Controller
'msg' => '更新配置成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
} else {
@ -261,7 +261,7 @@ class ConfigController extends Controller
$configService->updateVipConfig($data);
return $this->ajaxSuccess(['msg' => '更新配置成功']);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {

View File

@ -64,7 +64,7 @@ class ConsultController extends Controller
'msg' => '更新咨询成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -83,7 +83,7 @@ class ConsultController extends Controller
'msg' => '删除咨询成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -102,7 +102,7 @@ class ConsultController extends Controller
'msg' => '还原咨询成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -3,7 +3,7 @@
namespace App\Http\Admin\Controllers;
use App\Models\Audit as AuditModel;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait;
use Phalcon\Mvc\Dispatcher;
@ -12,7 +12,7 @@ class Controller extends \Phalcon\Mvc\Controller
protected $authUser;
use AjaxTrait, SecurityTrait;
use ResponseTrait, SecurityTrait;
public function beforeExecuteRoute(Dispatcher $dispatcher)
{

View File

@ -61,7 +61,7 @@ class CourseController extends Controller
'msg' => '创建课程成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -97,7 +97,7 @@ class CourseController extends Controller
$content = ['msg' => '更新课程成功'];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -114,7 +114,7 @@ class CourseController extends Controller
'msg' => '删除课程成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -131,7 +131,7 @@ class CourseController extends Controller
'msg' => '还原课程成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**

View File

@ -46,7 +46,7 @@ class HelpController extends Controller
'msg' => '创建帮助成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -77,7 +77,7 @@ class HelpController extends Controller
'msg' => '更新帮助成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -96,7 +96,7 @@ class HelpController extends Controller
'msg' => '删除帮助成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -115,7 +115,7 @@ class HelpController extends Controller
'msg' => '还原帮助成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -60,7 +60,7 @@ class NavController extends Controller
'msg' => '创建导航成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -96,7 +96,7 @@ class NavController extends Controller
'msg' => '更新导航成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -115,7 +115,7 @@ class NavController extends Controller
'msg' => '删除导航成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -134,7 +134,7 @@ class NavController extends Controller
'msg' => '还原导航成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -66,7 +66,7 @@ class OrderController extends Controller
'msg' => '关闭订单成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -87,7 +87,7 @@ class OrderController extends Controller
'msg' => '订单退款成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -65,7 +65,7 @@ class PackageController extends Controller
'msg' => '创建套餐成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -93,7 +93,7 @@ class PackageController extends Controller
$content = ['msg' => '更新套餐成功'];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -110,7 +110,7 @@ class PackageController extends Controller
'msg' => '删除套餐成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -127,7 +127,7 @@ class PackageController extends Controller
'msg' => '还原套餐成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -46,7 +46,7 @@ class PageController extends Controller
'msg' => '创建单页成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -77,7 +77,7 @@ class PageController extends Controller
'msg' => '更新单页成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -96,7 +96,7 @@ class PageController extends Controller
'msg' => '删除单页成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -115,7 +115,7 @@ class PageController extends Controller
'msg' => '还原单页成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -2,7 +2,7 @@
namespace App\Http\Admin\Controllers;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
/**
* @RoutePrefix("/admin")
@ -10,7 +10,7 @@ use App\Traits\Ajax as AjaxTrait;
class PublicController extends \Phalcon\Mvc\Controller
{
use AjaxTrait;
use ResponseTrait;
/**
* @Route("/auth", name="admin.auth")
@ -18,7 +18,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function authAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '会话已过期,请重新登录']);
return $this->jsonError(['msg' => '会话已过期,请重新登录']);
}
$this->response->redirect(['for' => 'admin.login']);
@ -30,7 +30,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function robotAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '疑似机器人请求']);
return $this->jsonError(['msg' => '疑似机器人请求']);
}
}
@ -40,7 +40,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function forbiddenAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '无相关操作权限']);
return $this->jsonError(['msg' => '无相关操作权限']);
}
}

View File

@ -66,7 +66,7 @@ class RefundController extends Controller
'msg' => '审核退款成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -64,7 +64,7 @@ class ReviewController extends Controller
'msg' => '更新评价成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -83,7 +83,7 @@ class ReviewController extends Controller
'msg' => '删除评价成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -102,7 +102,7 @@ class ReviewController extends Controller
'msg' => '还原评价成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -49,7 +49,7 @@ class RoleController extends Controller
'msg' => '创建角色成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -82,7 +82,7 @@ class RoleController extends Controller
'msg' => '更新角色成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -101,7 +101,7 @@ class RoleController extends Controller
'msg' => '删除角色成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -120,7 +120,7 @@ class RoleController extends Controller
'msg' => '还原角色成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -4,7 +4,7 @@ namespace App\Http\Admin\Controllers;
use App\Http\Admin\Services\Config as ConfigService;
use App\Http\Admin\Services\Session as SessionService;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait;
/**
@ -13,7 +13,7 @@ use App\Traits\Security as SecurityTrait;
class SessionController extends \Phalcon\Mvc\Controller
{
use AjaxTrait;
use ResponseTrait;
use SecurityTrait;
/**
@ -37,7 +37,7 @@ class SessionController extends \Phalcon\Mvc\Controller
$location = $this->url->get(['for' => 'admin.index']);
return $this->ajaxSuccess(['location' => $location]);
return $this->jsonSuccess(['location' => $location]);
}
$configService = new ConfigService();

View File

@ -49,7 +49,7 @@ class SlideController extends Controller
'msg' => '创建轮播成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -80,7 +80,7 @@ class SlideController extends Controller
'msg' => '更新轮播成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -99,7 +99,7 @@ class SlideController extends Controller
'msg' => '删除轮播成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -118,7 +118,7 @@ class SlideController extends Controller
'msg' => '还原轮播成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -76,7 +76,7 @@ class StudentController extends Controller
'msg' => '添加学员成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -113,7 +113,7 @@ class StudentController extends Controller
'msg' => '更新学员成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**

View File

@ -29,9 +29,9 @@ class TestController extends Controller
$result = $storageService->uploadTestFile();
if ($result) {
return $this->ajaxSuccess(['msg' => '上传文件成功,请到控制台确认']);
return $this->jsonSuccess(['msg' => '上传文件成功,请到控制台确认']);
} else {
return $this->ajaxError(['msg' => '上传文件失败,请检查相关配置']);
return $this->jsonError(['msg' => '上传文件失败,请检查相关配置']);
}
}
@ -45,9 +45,9 @@ class TestController extends Controller
$result = $vodService->test();
if ($result) {
return $this->ajaxSuccess(['msg' => '接口返回成功']);
return $this->jsonSuccess(['msg' => '接口返回成功']);
} else {
return $this->ajaxError(['msg' => '接口返回失败,请检查相关配置']);
return $this->jsonError(['msg' => '接口返回失败,请检查相关配置']);
}
}
@ -107,9 +107,9 @@ class TestController extends Controller
$response = $smserService->handle($phone);
if ($response) {
return $this->ajaxSuccess(['msg' => '发送短信成功,请到收件箱确认']);
return $this->jsonSuccess(['msg' => '发送短信成功,请到收件箱确认']);
} else {
return $this->ajaxError(['msg' => '发送短信失败,请查看短信日志']);
return $this->jsonError(['msg' => '发送短信失败,请查看短信日志']);
}
}
@ -125,9 +125,9 @@ class TestController extends Controller
$result = $mailerService->handle($email);
if ($result) {
return $this->ajaxSuccess(['msg' => '发送邮件成功,请到收件箱确认']);
return $this->jsonSuccess(['msg' => '发送邮件成功,请到收件箱确认']);
} else {
return $this->ajaxError(['msg' => '发送邮件失败,请检查配置']);
return $this->jsonError(['msg' => '发送邮件失败,请检查配置']);
}
}
@ -148,10 +148,10 @@ class TestController extends Controller
$configService->updateSectionConfig('captcha', ['enabled' => 1]);
return $this->ajaxSuccess(['msg' => '后台验证成功']);
return $this->jsonSuccess(['msg' => '后台验证成功']);
} else {
return $this->ajaxError(['msg' => '后台验证失败']);
return $this->jsonError(['msg' => '后台验证失败']);
}
}
@ -200,7 +200,7 @@ class TestController extends Controller
$status = $alipayTestService->status($tradeSn);
return $this->ajaxSuccess(['status' => $status]);
return $this->jsonSuccess(['status' => $status]);
}
/**
@ -214,7 +214,7 @@ class TestController extends Controller
$alipayTestService->cancel($tradeSn);
return $this->ajaxSuccess(['msg' => '取消订单成功']);
return $this->jsonSuccess(['msg' => '取消订单成功']);
}
/**
@ -253,7 +253,7 @@ class TestController extends Controller
$status = $wxpayTestService->status($tradeSn);
return $this->ajaxSuccess(['status' => $status]);
return $this->jsonSuccess(['status' => $status]);
}
/**
@ -267,7 +267,7 @@ class TestController extends Controller
$wxpayTestService->cancel($tradeSn);
return $this->ajaxSuccess(['msg' => '取消订单成功']);
return $this->jsonSuccess(['msg' => '取消订单成功']);
}
}

View File

@ -49,7 +49,7 @@ class TopicController extends Controller
'msg' => '创建话题成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -77,7 +77,7 @@ class TopicController extends Controller
$content = ['msg' => '更新话题成功'];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -94,7 +94,7 @@ class TopicController extends Controller
'msg' => '删除话题成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -111,7 +111,7 @@ class TopicController extends Controller
'msg' => '还原话题成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -66,7 +66,7 @@ class TradeController extends Controller
'msg' => '关闭交易成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -85,7 +85,7 @@ class TradeController extends Controller
'msg' => '申请退款成功,请到退款管理中审核确认',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -22,9 +22,9 @@ class UploadController extends Controller
$url = $storageService->getCiImageUrl($key);
if ($url) {
return $this->ajaxSuccess(['data' => ['src' => $url, 'title' => '']]);
return $this->jsonSuccess(['data' => ['src' => $url, 'title' => '']]);
} else {
return $this->ajaxError(['msg' => '上传文件失败']);
return $this->jsonError(['msg' => '上传文件失败']);
}
}
@ -38,9 +38,9 @@ class UploadController extends Controller
$url = $storageService->uploadContentImage();
if ($url) {
return $this->ajaxSuccess(['data' => ['src' => $url, 'title' => '']]);
return $this->jsonSuccess(['data' => ['src' => $url, 'title' => '']]);
} else {
return $this->ajaxError(['msg' => '上传文件失败']);
return $this->jsonError(['msg' => '上传文件失败']);
}
}

View File

@ -70,7 +70,7 @@ class UserController extends Controller
'msg' => '新增用户成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
/**
@ -111,7 +111,7 @@ class UserController extends Controller
'msg' => '更新用户成功',
];
return $this->ajaxSuccess($content);
return $this->jsonSuccess($content);
}
}

View File

@ -22,7 +22,7 @@ class VodController extends Controller
$signature = $vodService->getUploadSignature();
return $this->ajaxSuccess(['signature' => $signature]);
return $this->jsonSuccess(['signature' => $signature]);
}
/**
@ -59,7 +59,7 @@ class VodController extends Controller
$syncerService->addItem($learning, $query['timeout']);
return $this->ajaxSuccess();
return $this->jsonSuccess();
}
}

View File

@ -19,7 +19,7 @@ class XmCourseController extends Controller
$pager = $xmCourseService->getAllCourses();
return $this->ajaxSuccess([
return $this->jsonSuccess([
'count' => $pager->total_items,
'data' => $pager->items,
]);
@ -34,7 +34,7 @@ class XmCourseController extends Controller
$pager = $xmCourseService->getPaidCourses();
return $this->ajaxSuccess([
return $this->jsonSuccess([
'count' => $pager->total_items,
'data' => $pager->items,
]);

View File

@ -2,7 +2,7 @@
namespace App\Http\Admin;
use App\Http\Admin\Services\AuthUser;
use App\Services\AuthUser\Admin as AdminAuthUser;
use Phalcon\DiInterface;
use Phalcon\Mvc\ModuleDefinitionInterface;
use Phalcon\Mvc\View;
@ -27,7 +27,7 @@ class Module implements ModuleDefinitionInterface
});
$di->setShared('auth', function () {
$authUser = new AuthUser();
$authUser = new AdminAuthUser();
return $authUser;
});
}

View File

@ -2,6 +2,7 @@
namespace App\Http\Admin\Services;
use App\Caches\SectionConfig as SectionConfigCache;
use App\Repos\Config as ConfigRepo;
use App\Repos\Vip as VipRepo;
@ -36,6 +37,10 @@ class Config extends Service
$item->update();
}
}
$cache = new SectionConfigCache();
$cache->rebuild($section);
}
public function updateStorageConfig($section, $config)

View File

@ -2,6 +2,7 @@
namespace App\Http\Admin\Services;
use App\Services\AuthUser as AuthUserService;
use App\Validators\Account as AccountValidator;
use App\Validators\Security as SecurityValidator;
@ -9,7 +10,7 @@ class Session extends Service
{
/**
* @var AuthUser
* @var AuthUserService
*/
protected $auth;
@ -39,12 +40,12 @@ class Session extends Service
$securityValidator->checkCaptchaCode($post['ticket'], $post['rand']);
}
$this->auth->setAuthInfo($user);
$this->auth->saveAuthInfo($user);
}
public function logout()
{
$this->auth->removeAuthInfo();
$this->auth->clearAuthInfo();
}
}

View File

@ -40,7 +40,7 @@
</form>
<script>
if (window != top) {
if (window !== top) {
top.location.href = window.location.href;
}
</script>

View File

@ -2,9 +2,13 @@
namespace App\Http\Api\Controllers;
use App\Traits\Response as ResponseTrait;
class Controller extends \Phalcon\Mvc\Controller
{
use ResponseTrait;
public function initialize()
{

View File

@ -2,6 +2,7 @@
namespace App\Http\Api;
use App\Services\AuthUser\Home as ApiAuthUser;
use Phalcon\DiInterface;
use Phalcon\Mvc\ModuleDefinitionInterface;
use Phalcon\Mvc\View;
@ -21,5 +22,10 @@ class Module implements ModuleDefinitionInterface
$view->disable();
return $view;
});
$di->setShared('auth', function () {
$authUser = new ApiAuthUser();
return $authUser;
});
}
}

View File

@ -2,68 +2,12 @@
namespace App\Http\Api\Services;
use App\Models\User as UserModel;
use App\Repos\User as UserRepo;
use App\Validators\Filter as BaseFilter;
use App\Traits\Auth as AuthTrait;
use Phalcon\Mvc\User\Component;
class Service extends Component
{
public function getCurrentUser()
{
$token = $this->getAuthToken();
return $token ? $this->getUser($token) : $this->getGuest();
}
public function getLoggedUser()
{
$token = $this->getAuthToken();
$filter = new BaseFilter();
$filter->checkAuthToken($token);
$user = $this->getUser($token);
$filter->checkAuthUser($user);
return $user;
}
private function getAuthToken()
{
$token = null;
if ($this->cookies->has('token')) {
$cookie = $this->cookies->get('token');
$token = $cookie->getValue();
}
return $token;
}
private function getGuest()
{
$guest = new UserModel();
$guest->id = 0;
$guest->name = 'guest';
return $guest;
}
private function getUser($token)
{
$userRepo = new UserRepo();
$user = $userRepo->findById($token);
return $user;
}
use AuthTrait;
}

View File

@ -59,7 +59,7 @@ class AccountController extends Controller
$service->resetPassword();
return $this->ajaxSuccess();
return $this->jsonSuccess();
}
/**
@ -71,7 +71,7 @@ class AccountController extends Controller
$service->updateMobile();
return $this->ajaxSuccess();
return $this->jsonSuccess();
}
/**
@ -83,7 +83,7 @@ class AccountController extends Controller
$service->updatePassword();
return $this->ajaxSuccess();
return $this->jsonSuccess();
}
/**
@ -95,7 +95,7 @@ class AccountController extends Controller
$service->sendCaptcha();
return $this->ajaxSuccess();
return $this->jsonSuccess();
}
}

View File

@ -4,7 +4,7 @@ namespace App\Http\Home\Controllers;
use App\Caches\Config as ConfigCache;
use App\Caches\NavTreeList as NavTreeListCache;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait;
use Phalcon\Mvc\Dispatcher;
@ -15,7 +15,7 @@ class Controller extends \Phalcon\Mvc\Controller
protected $navList;
protected $authUser;
use AjaxTrait, SecurityTrait;
use ResponseTrait, SecurityTrait;
public function beforeExecuteRoute(Dispatcher $dispatcher)
{

View File

@ -23,7 +23,7 @@ class CourseController extends Controller
$pager = $courseListService->getCourses();
return $this->ajaxSuccess(['pager' => $pager]);
return $this->jsonSuccess(['pager' => $pager]);
$this->view->setVar('pager', $pager);
}
@ -37,7 +37,7 @@ class CourseController extends Controller
$course = $courseService->getCourse($id);
return $this->ajaxSuccess(['course' => $course]);
return $this->jsonSuccess(['course' => $course]);
$this->view->setVar('course', $course);
}
@ -51,7 +51,7 @@ class CourseController extends Controller
$courses = $relatedService->getRelated($id);
return $this->ajaxSuccess(['courses' => $courses]);
return $this->jsonSuccess(['courses' => $courses]);
$this->view->setVar('course', $course);
}
@ -65,7 +65,7 @@ class CourseController extends Controller
$pager = $reviewService->getReviews($id);
return $this->ajaxSuccess(['pager' => $pager]);
return $this->jsonSuccess(['pager' => $pager]);
$this->view->setVar('pager', $pager);
}

View File

@ -2,7 +2,7 @@
namespace App\Http\Home\Controllers;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
use Phalcon\Mvc\View;
/**
@ -11,7 +11,7 @@ use Phalcon\Mvc\View;
class ErrorController extends \Phalcon\Mvc\Controller
{
use AjaxTrait;
use ResponseTrait;
public function initialize()
{
@ -50,7 +50,7 @@ class ErrorController extends \Phalcon\Mvc\Controller
$this->response->setStatusCode(404);
if ($this->request->isAjax()) {
return $this->ajaxError(['code' => 'sys.uri_not_found']);
return $this->jsonError(['code' => 'sys.uri_not_found']);
}
}

View File

@ -58,8 +58,8 @@ class MyController extends Controller
$orders = $service->getOrders();
$this->view->orders = $orders;
return $this->ajaxSuccess($orders);
return $this->jsonSuccess($orders);
}
/**

View File

@ -78,7 +78,7 @@ class OrderController extends Controller
$this->view->order = $order;
$this->view->orderItems = $orderItems;
return $this->ajaxSuccess($order->toArray());
return $this->jsonSuccess($order->toArray());
}
/**
@ -136,7 +136,7 @@ class OrderController extends Controller
$order = $service->cancel();
return $this->ajaxSuccess($order->toArray());
return $this->jsonSuccess($order->toArray());
}
}

View File

@ -4,12 +4,12 @@ namespace App\Http\Home\Controllers;
use App\Services\Payment\Alipay as AlipayService;
use App\Services\Payment\Wxpay as WxpayService;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
class PaymentController extends \Phalcon\Mvc\Controller
{
use AjaxTrait;
use ResponseTrait;
/**
* @Post("/alipay/notify", name="home.alipay.notify")
@ -54,7 +54,7 @@ class PaymentController extends \Phalcon\Mvc\Controller
$status = $alipayService->status($sn);
return $this->ajaxSuccess(['status' => $status]);
return $this->jsonSuccess(['status' => $status]);
}
/**
@ -68,7 +68,7 @@ class PaymentController extends \Phalcon\Mvc\Controller
$status = $wxpayService->status($sn);
return $this->ajaxSuccess(['status' => $status]);
return $this->jsonSuccess(['status' => $status]);
}
}

View File

@ -4,13 +4,13 @@ namespace App\Http\Home\Controllers;
use App\Models\ContentImage as ContentImageModel;
use App\Services\Storage as StorageService;
use App\Traits\Ajax as AjaxTrait;
use App\Traits\Response as ResponseTrait;
use PHPQRCode\QRcode;
class PublicController extends \Phalcon\Mvc\Controller
{
use AjaxTrait;
use ResponseTrait;
/**
* @Route("/auth", name="home.auth")
@ -18,7 +18,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function authAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '会话已过期,请重新登录']);
return $this->jsonError(['msg' => '会话已过期,请重新登录']);
}
$this->response->redirect(['for' => 'home.login']);
@ -30,7 +30,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function robotAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '疑似机器人请求']);
return $this->jsonError(['msg' => '疑似机器人请求']);
}
}
@ -40,7 +40,7 @@ class PublicController extends \Phalcon\Mvc\Controller
public function forbiddenAction()
{
if ($this->request->isAjax()) {
return $this->ajaxError(['msg' => '无相关操作权限']);
return $this->jsonError(['msg' => '无相关操作权限']);
}
}

View File

@ -21,7 +21,7 @@ class ReviewController extends Controller
$data = $service->getReview($review->id);
return $this->ajaxSuccess($data);
return $this->jsonSuccess($data);
}
/**

View File

@ -2,7 +2,7 @@
namespace App\Http\Home;
use App\Http\Home\Services\AuthUser;
use App\Services\AuthUser\Home as HomeAuthUser;
use Phalcon\DiInterface;
use Phalcon\Mvc\ModuleDefinitionInterface;
use Phalcon\Mvc\View;
@ -27,7 +27,7 @@ class Module implements ModuleDefinitionInterface
});
$di->setShared('auth', function () {
$authUser = new AuthUser();
$authUser = new HomeAuthUser();
return $authUser;
});
}

View File

@ -2,44 +2,12 @@
namespace App\Http\Home\Services;
use App\Models\User as UserModel;
use App\Validators\Validator as AppValidator;
use App\Traits\Auth as AuthTrait;
use Phalcon\Mvc\User\Component;
class Service extends Component
{
public function getCurrentUser()
{
$authUser = $this->getAuthUser();
if ($authUser) {
$user = UserModel::findFirst($authUser->id);
} else {
$user = new UserModel();
}
return $user;
}
public function getLoginUser()
{
$authUser = $this->getAuthUser();
$validator = new AppValidator();
$validator->checkAuthUser($authUser);
$user = UserModel::findFirst($authUser->id);
return $user;
}
public function getAuthUser()
{
$auth = $this->getDI()->get('auth');
return $auth->getAuthInfo();
}
use AuthTrait;
}

View File

@ -1,43 +0,0 @@
<?php
namespace App\Library\Util;
use Phalcon\Cache\Backend\Redis;
use Phalcon\Di;
use Phalcon\Text;
class Verification
{
public static function code($key, $lifetime = 300)
{
/**
* @var Redis $cache
*/
$cache = Di::getDefault()->get('cache');
$code = Text::random(Text::RANDOM_NUMERIC, 6);
$cache->save(self::getKey($key), $code, $lifetime);
return $code;
}
public static function checkCode($key, $code)
{
/**
* @var Redis $cache
*/
$cache = Di::getDefault()->get('cache');
$value = $cache->get(self::getKey($key));
return $code == $value;
}
public static function getKey($key)
{
return "verify:{$key}";
}
}

View File

@ -84,14 +84,18 @@ class Account extends Model
public function beforeCreate()
{
$this->salt = Password::salt();
$this->password = Password::hash($this->password, $this->salt);
$this->created_at = time();
}
public function beforeUpdate()
{
if (!empty($this->password)) {
$this->salt = Password::salt();
$this->password = Password::hash($this->password, $this->salt);
}
@ -101,8 +105,10 @@ class Account extends Model
public function afterCreate()
{
$user = new User();
$user->id = $this->id;
$user->name = "user_{$this->id}";
$user->create();
}

View File

@ -2,8 +2,6 @@
namespace App\Models;
use App\Caches\Config as ConfigCache;
class Config extends Model
{
@ -40,10 +38,4 @@ class Config extends Model
return 'kg_config';
}
public function afterUpdate()
{
$configCache = new ConfigCache();
$configCache->rebuild();
}
}

View File

@ -106,7 +106,7 @@ class Order extends Repository
* @param string $itemType
* @return OrderModel|Model|bool
*/
public function findFinishedUserOrder($userId, $itemId, $itemType)
public function findUserLastFinishedOrder($userId, $itemId, $itemType)
{
$status = OrderModel::STATUS_FINISHED;
@ -125,11 +125,13 @@ class Order extends Repository
* @param string $itemType
* @return OrderModel|Model|bool
*/
public function findLastUserOrder($userId, $itemId, $itemType)
public function findUserLastPendingOrder($userId, $itemId, $itemType)
{
$status = OrderModel::STATUS_PENDING;
$result = OrderModel::findFirst([
'conditions' => 'user_id = ?1 AND item_id = ?2 AND item_type = ?3',
'bind' => [1 => $userId, 2 => $itemId, 3 => $itemType],
'conditions' => 'user_id = ?1 AND item_id = ?2 AND item_type = ?3 AND status= ?4',
'bind' => [1 => $userId, 2 => $itemId, 3 => $itemType, 4 => $status],
'order' => 'id DESC',
]);

16
app/Services/AuthUser.php Normal file
View File

@ -0,0 +1,16 @@
<?php
namespace App\Services;
use App\Models\User as UserModel;
abstract class AuthUser extends Service
{
abstract function saveAuthInfo(UserModel $user);
abstract function getAuthInfo();
abstract function clearAuthInfo();
}

View File

@ -1,42 +1,21 @@
<?php
namespace App\Http\Admin\Services;
namespace App\Services\AuthUser;
use App\Models\Role as RoleModel;
use App\Models\User as UserModel;
use App\Repos\Role as RoleRepo;
use Phalcon\Mvc\User\Component;
use App\Services\AuthUser;
class AuthUser extends Component
class Admin extends AuthUser
{
/**
* 判断权限
*
* @param string $route
* @return bool
*/
public function hasPermission($route)
{
$authUser = $this->getAuthInfo();
if ($authUser->root) {
return true;
}
if (in_array($route, $authUser->routes)) {
return true;
}
return false;
}
/**
* 写入会话
*
* @param UserModel $user
*/
public function setAuthInfo(UserModel $user)
public function saveAuthInfo(UserModel $user)
{
$roleRepo = new RoleRepo();
@ -60,7 +39,7 @@ class AuthUser extends Component
/**
* 清除会话
*/
public function removeAuthInfo()
public function clearAuthInfo()
{
$authKey = $this->getAuthKey();
@ -89,4 +68,25 @@ class AuthUser extends Component
return 'admin_info';
}
/**
* 判断权限
*
* @param string $route
* @return bool
*/
public function hasPermission($route)
{
$authUser = $this->getAuthInfo();
if ($authUser->root) {
return true;
}
if (in_array($route, $authUser->routes)) {
return true;
}
return false;
}
}

View File

@ -0,0 +1,82 @@
<?php
namespace App\Services\AuthUser;
use App\Library\Cache\Backend\Redis as RedisCache;
use App\Models\User as UserModel;
use App\Services\AuthUser;
class Api extends AuthUser
{
public function saveAuthInfo(UserModel $user)
{
$authUser = new \stdClass();
$authUser->id = $user->id;
$authUser->name = $user->name;
$authUser->avatar = $user->avatar;
$authUser->admin_role = $user->admin_role;
$authUser->edu_role = $user->edu_role;
$authToken = $this->getRandToken($user->id);
$cacheKey = $this->getCacheKey($authToken);
$cache = $this->getCache();
$cache->save($cacheKey, $authUser);
}
public function clearAuthInfo()
{
$authToken = $this->getAuthToken();
$cacheKey = $this->getCacheKey($authToken);
$cache = $this->getCache();
$cache->delete($cacheKey);
}
public function getAuthInfo()
{
$authToken = $this->getAuthToken();
$cacheKey = $this->getCacheKey($authToken);
$cache = $this->getCache();
return $cache->get($cacheKey);
}
public function getAuthToken()
{
$authToken = $this->request->getHeader('Authorization');
return $authToken;
}
public function getCacheKey($token)
{
return "token:{$token}";
}
public function getRandToken($userId)
{
$token = md5($userId . time() . rand(1000, 9999));
return $token;
}
/**
* @return RedisCache
*/
public function getCache()
{
$cache = $this->getDI()->get('cache');
return $cache;
}
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Home\Services;
namespace App\Services\AuthUser;
use App\Models\User as UserModel;
use Phalcon\Mvc\User\Component;
use App\Services\AuthUser;
class AuthUser extends Component
class Home extends AuthUser
{
/**
@ -13,7 +13,7 @@ class AuthUser extends Component
*
* @param UserModel $user
*/
public function setAuthInfo(UserModel $user)
public function saveAuthInfo(UserModel $user)
{
$authKey = $this->getAuthKey();
@ -31,7 +31,7 @@ class AuthUser extends Component
/**
* 清除会话
*/
public function removeAuthInfo()
public function clearAuthInfo()
{
$authKey = $this->getAuthKey();

View File

@ -0,0 +1,28 @@
<?php
namespace App\Services\Frontend\Account;
use App\Services\Frontend\Service;
use App\Validators\Account as AccountValidator;
use App\Validators\Security as SecurityValidator;
class Login extends Service
{
public function loginByPassword($account, $password)
{
$validator = new AccountValidator();
$user = $validator->checkUserLogin($account, $password);
return $user;
}
public function loginByVerify($account, $code)
{
$validator = new SecurityValidator();
$validator->checkVerifyCode($account, $code);
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Services\Frontend\Account;
use App\Services\Frontend\Service;
class Logout extends Service
{
public function logoutBySession()
{
}
public function logoutByToken()
{
}
}

View File

@ -7,10 +7,10 @@ use App\Services\Frontend\Service;
use App\Validators\Account as AccountValidator;
use App\Validators\Security as SecurityValidator;
class AccountCreate extends Service
class Register extends Service
{
public function createAccount()
public function register()
{
$post = $this->request->getPost();

View File

@ -78,8 +78,8 @@ class CourseInfo extends Service
'summary' => $course->summary,
'details' => $course->details,
'keywords' => $course->keywords,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'study_expiry' => $course->study_expiry,
'refund_expiry' => $course->refund_expiry,
'score' => $course->score,

View File

@ -1,10 +1,11 @@
<?php
namespace App\Services\Frontend;
namespace App\Services\Frontend\Course;
use App\Library\Paginator\Query as PagerQuery;
use App\Repos\Course as CourseRepo;
use App\Services\Category as CategoryService;
use App\Services\Frontend\Service;
class CourseList extends Service
{
@ -53,18 +54,16 @@ class CourseList extends Service
foreach ($courses as $course) {
$course['cover'] = $imgBaseUrl . $course['cover'];
$course['attrs'] = json_decode($course['attrs'], true);
$items[] = [
'id' => $course['id'],
'title' => $course['title'],
'cover' => $course['cover'],
'summary' => $course['summary'],
'market_price' => $course['market_price'],
'vip_price' => $course['vip_price'],
'market_price' => (float)$course['market_price'],
'vip_price' => (float)$course['vip_price'],
'model' => $course['model'],
'level' => $course['level'],
'attrs' => $course['attrs'],
'user_count' => $course['user_count'],
'lesson_count' => $course['lesson_count'],
'review_count' => $course['review_count'],

View File

@ -43,8 +43,8 @@ class PackageList extends Service
$result[] = [
'id' => $package->id,
'title' => $package->title,
'market_price' => $package->market_price,
'vip_price' => $package->vip_price,
'market_price' => (float)$package->market_price,
'vip_price' => (float)$package->vip_price,
'courses' => $courses,
];
}
@ -71,8 +71,8 @@ class PackageList extends Service
'title' => $course->title,
'cover' => $course->cover,
'summary' => $course->summary,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'model' => $course->model,
'level' => $course->level,
];

View File

@ -34,7 +34,7 @@ class OrderCreate extends Service
$orderRepo = new OrderRepo();
$order = $orderRepo->findLastUserOrder($user->id, $post['item_id'], $post['item_type']);
$order = $orderRepo->findUserLastPendingOrder($user->id, $post['item_id'], $post['item_type']);
/**
* 存在新鲜的未支付订单直接返回(减少订单记录)

View File

@ -1,13 +1,15 @@
<?php
namespace App\Services\Frontend;
namespace App\Services\Frontend\Teacher;
use App\Builders\CourseUserList as CourseUserListBuilder;
use App\Library\Paginator\Query as PagerQuery;
use App\Models\CourseUser as CourseUserModel;
use App\Repos\CourseUser as CourseUserRepo;
use App\Services\Frontend\Service;
use App\Services\Frontend\UserTrait;
class TeacherCourseList extends Service
class CourseList extends Service
{
use UserTrait;

View File

@ -0,0 +1,52 @@
<?php
namespace App\Services\Frontend\Teacher;
use App\Models\User as UserModel;
use App\Services\Frontend\Service;
use App\Services\Frontend\UserTrait;
class TeacherInfo extends Service
{
use UserTrait;
public function getUser($id)
{
$user = $this->checkUser($id);
return $this->handleUser($user);
}
/**
* @param UserModel $user
* @return array
*/
protected function handleUser($user)
{
$user->avatar = kg_img_url($user->avatar);
$user->vip = $user->vip == 1;
$user->locked = $user->locked == 1;
$result = [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'location' => $user->location,
'gender' => $user->gender,
'vip' => $user->vip,
'locked' => $user->locked,
'vip_expiry_time' => $user->vip_expiry_time,
'lock_expiry_time' => $user->lock_expiry_time,
'edu_role' => $user->edu_role,
'admin_role' => $user->admin_role,
'notice_count' => $user->notice_count,
'msg_count' => $user->msg_count,
];
return $result;
}
}

View File

@ -2,8 +2,8 @@
namespace App\Services\Mailer;
use App\Library\Util\Verification;
use App\Services\Mailer;
use App\Services\Verification;
class Verify extends Mailer
{
@ -14,11 +14,13 @@ class Verify extends Mailer
$message = $this->manager->createMessage();
$subject = '邮件验证码';
$verification = new Verification();
$minutes = 5;
$code = Verification::code($email, 60 * $minutes);
$code = $verification->getSmsCode($email, 60 * $minutes);
$subject = '邮件验证码';
$content = $this->formatContent($code, $minutes);

View File

@ -2,7 +2,7 @@
namespace App\Services;
use App\Caches\Config as ConfigCache;
use App\Caches\SectionConfig as SectionConfigCache;
use App\Library\Logger as AppLogger;
use Phalcon\Logger\Adapter\File as FileLogger;
use Phalcon\Mvc\User\Component;
@ -33,9 +33,9 @@ class Service extends Component
*/
public function getSectionConfig($section)
{
$configCache = new ConfigCache();
$cache = new SectionConfigCache();
$result = $configCache->getSectionConfig($section);
$result = $cache->get($section);
return $result;
}

View File

@ -2,8 +2,8 @@
namespace App\Services\Smser;
use App\Library\Util\Verification;
use App\Services\Smser;
use App\Services\Verification;
class Verify extends Smser
{
@ -12,9 +12,11 @@ class Verify extends Smser
public function handle($phone)
{
$verifyCode = new Verification();
$minutes = 5;
$code = Verification::code($phone, 60 * $minutes);
$code = $verifyCode->getSmsCode($phone, 60 * $minutes);
$templateId = $this->getTemplateId($this->templateCode);

View File

@ -0,0 +1,83 @@
<?php
namespace App\Services;
use App\Services\Mailer\Verify as VerifyMailer;
use App\Services\Smser\Verify as VerifySmser;
use Phalcon\Cache\Backend\Redis;
use Phalcon\Text;
class Verification extends Service
{
/**
* @var Redis
*/
protected $cache;
public function __construct()
{
$this->cache = $this->getDI()->get('cache');
}
public function sendSmsCode($phone)
{
$smser = new VerifySmser();
$smser->handle($phone);
}
public function sendMailCode($email)
{
$mailer = new VerifyMailer();
$mailer->handle($email);
}
public function getSmsCode($phone, $lifetime = 300)
{
$key = $this->getSmsCacheKey($phone);
$code = Text::random(Text::RANDOM_NUMERIC, 6);
$this->cache->save($key, $code, $lifetime);
}
public function getMailCode($email, $lifetime = 300)
{
$key = $this->getSmsCacheKey($email);
$code = Text::random(Text::RANDOM_NUMERIC, 6);
$this->cache->save($key, $code, $lifetime);
}
public function checkSmsCode($phone, $code)
{
$key = $this->getSmsCacheKey($phone);
$value = $this->cache->get($key);
return $code == $value;
}
public function checkMailCode($email, $code)
{
$key = $this->getMailCacheKey($email);
$value = $this->cache->get($key);
return $code == $value;
}
protected function getMailCacheKey($email)
{
return "verify:mail:{$email}";
}
protected function getSmsCacheKey($phone)
{
return "verify:sms:{$phone}";
}
}

View File

@ -1,38 +0,0 @@
<?php
namespace App\Traits;
trait Ajax
{
public function ajaxSuccess($content = [])
{
$content['code'] = 0;
$content['msg'] = $content['msg'] ?? '';
$this->response->setStatusCode(200);
$this->response->setJsonContent($content);
return $this->response;
}
public function ajaxError($content = [])
{
$content['code'] = $content['code'] ?? 1;
$content['msg'] = $content['msg'] ?? $this->getErrorMessage($content['code']);
$this->response->setJsonContent($content);
return $this->response;
}
public function getErrorMessage($code)
{
$errors = require config_path() . '/errors.php';
$message = $errors[$code] ?? $code;
return $message;
}
}

View File

@ -3,7 +3,9 @@
namespace App\Traits;
use App\Models\User as UserModel;
use App\Validators\Validator;
use App\Repos\User as UserRepo;
use App\Services\AuthUser as AuthUserService;
use App\Validators\Validator as AppValidator;
trait Auth
{
@ -12,12 +14,14 @@ trait Auth
{
$authUser = $this->getAuthUser();
if ($authUser) {
$user = UserModel::findFirst($authUser->id);
} else {
$user = new UserModel();
if (!$authUser) {
return $this->getGuestUser();
}
$userRepo = new UserRepo();
$user = $userRepo->findById($authUser->id);
return $user;
}
@ -25,17 +29,32 @@ trait Auth
{
$authUser = $this->getAuthUser();
$validator = new Validator();
$validator = new AppValidator();
$validator->checkAuthUser($authUser);
$user = UserModel::findFirst($authUser->id);
$userRepo = new UserRepo();
$user = $userRepo->findById($authUser->id);
return $user;
}
public function getGuestUser()
{
$user = new UserModel();
$user->id = 0;
$user->name = 'guest';
return $user;
}
public function getAuthUser()
{
/**
* @var AuthUserService $auth
*/
$auth = $this->getDI()->get('auth');
return $auth->getAuthInfo();

View File

@ -2,6 +2,8 @@
namespace App\Traits;
use Phalcon\Di;
use Phalcon\Http\Request;
use WhichBrowser\Parser as BrowserParser;
trait Client
@ -9,14 +11,24 @@ trait Client
public function getClientIp()
{
$clientIp = $this->request->getClientAddress();
/**
* @var Request $request
*/
$request = Di::getDefault()->get('request');
$clientIp = $request->getClientAddress();
return $clientIp;
}
public function getClientType()
{
$userAgent = $this->request->getServer('HTTP_USER_AGENT');
/**
* @var Request $request
*/
$request = Di::getDefault()->get('request');
$userAgent = $request->getServer('HTTP_USER_AGENT');
$result = new BrowserParser($userAgent);

69
app/Traits/Response.php Normal file
View File

@ -0,0 +1,69 @@
<?php
namespace App\Traits;
use Phalcon\Di;
use Phalcon\Http\Response as HttpResponse;
trait Response
{
public function jsonSuccess($content = [])
{
$content['code'] = 0;
$content['msg'] = $content['msg'] ?? '';
/**
* @var HttpResponse $response
*/
$response = Di::getDefault()->get('response');
$response->setStatusCode(200);
$response->setJsonContent($content);
return $response;
}
public function jsonError($content = [])
{
$content['code'] = $content['code'] ?? 1;
$content['msg'] = $content['msg'] ?? $this->getErrorMessage($content['code']);
/**
* @var HttpResponse $response
*/
$response = Di::getDefault()->get('response');
$response->setJsonContent($content);
return $response;
}
public function jsonPaginate($paginate)
{
$items = $paginate->items ?? [];
$totalItems = $paginate->total_items ?? 0;
$totalPages = $paginate->total_pages ?? 0;
$content = [
'items' => $items,
'total_items' => $totalItems,
'total_pages' => $totalPages,
];
return $this->jsonSuccess($content);
}
public function getErrorMessage($code)
{
$errors = require config_path() . '/errors.php';
$message = $errors[$code] ?? $code;
return $message;
}
}

View File

@ -2,30 +2,54 @@
namespace App\Traits;
use Phalcon\Di;
use Phalcon\Http\Request;
trait Security
{
public function checkCsrfToken()
{
$tokenKey = $this->request->getHeader('X-Csrf-Token-Key');
$tokenValue = $this->request->getHeader('X-Csrf-Token-Value');
$checkToken = $this->security->checkToken($tokenKey, $tokenValue);
/**
* @var Request $request ;
*/
$request = Di::getDefault()->get('request');
$tokenKey = $request->getHeader('X-Csrf-Token-Key');
$tokenValue = $request->getHeader('X-Csrf-Token-Value');
/**
* @var \App\Library\Security $security
*/
$security = Di::getDefault()->get('security');
$checkToken = $security->checkToken($tokenKey, $tokenValue);
return $checkToken;
}
public function checkHttpReferer()
{
$httpHost = parse_url($this->request->getHttpReferer(), PHP_URL_HOST);
/**
* @var Request $request ;
*/
$request = Di::getDefault()->get('request');
$checkHost = $httpHost == $this->request->getHttpHost();
$httpHost = parse_url($request->getHttpReferer(), PHP_URL_HOST);
$checkHost = $httpHost == $request->getHttpHost();
return $checkHost;
}
public function isNotSafeRequest()
{
$method = $this->request->getMethod();
/**
* @var Request $request ;
*/
$request = Di::getDefault()->get('request');
$method = $request->getMethod();
$list = ['post', 'put', 'patch', 'delete'];

View File

@ -112,9 +112,10 @@ class Order extends Validator
$itemType = OrderModel::ITEM_PACKAGE;
$order = $orderRepo->findFinishedUserOrder($userId, $courseId, $itemType);
$order = $orderRepo->findUserLastFinishedOrder($userId, $courseId, $itemType);
if ($order) {
/**
* @var array $itemInfo
*/
@ -132,7 +133,7 @@ class Order extends Validator
$itemType = OrderModel::ITEM_PACKAGE;
$order = $orderRepo->findFinishedUserOrder($userId, $packageId, $itemType);
$order = $orderRepo->findUserLastFinishedOrder($userId, $packageId, $itemType);
if ($order) {
throw new BadRequestException('order.has_bought_package');

View File

@ -3,24 +3,35 @@
namespace App\Validators;
use App\Exceptions\BadRequest as BadRequestException;
use App\Library\Util\Verification as VerifyUtil;
use App\Library\Validator\Common as CommonValidator;
use App\Services\Captcha as CaptchaService;
use App\Services\Verification as VerificationService;
class Security extends Validator
{
public function checkVerifyCode($key, $code)
{
if (!VerifyUtil::checkCode($key, $code)) {
$verification = new VerificationService();
$result = false;
if (CommonValidator::email($key)) {
$result = $verification->checkMailCode($key, $code);
} elseif (CommonValidator::phone($key)) {
$result = $verification->checkSmsCode($key, $code);
}
if (!$result) {
throw new BadRequestException('security.invalid_verify_code');
}
}
public function checkCaptchaCode($ticket, $rand)
{
$captchaService = new CaptchaService();
$captcha = new CaptchaService();
$result = $captchaService->verify($ticket, $rand);
$result = $captcha->verify($ticket, $rand);
if (!$result) {
throw new BadRequestException('security.invalid_captcha_code');

View File

@ -39,7 +39,7 @@ class HttpErrorHandler extends Component
if ($this->router->getModuleName() == 'api') {
$this->apiError($e);
} else if ($this->isAjax()) {
$this->ajaxError($e);
$this->jsonError($e);
} else {
$this->pageError($e);
}