DetectController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. namespace App\Controllers\Admin;
  3. use App\Models\DetectLog;
  4. use App\Models\DetectRule;
  5. use App\Utils\Telegram;
  6. use App\Controllers\AdminController;
  7. use Ozdemir\Datatables\Datatables;
  8. use App\Utils\DatatablesHelper;
  9. class DetectController extends AdminController
  10. {
  11. public function index($request, $response, $args)
  12. {
  13. $table_config['total_column'] = array("op" => "操作", "id" => "ID", "name" => "名称",
  14. "text" => "介绍", "regex" => "正则表达式",
  15. "type" => "类型");
  16. $table_config['default_show_column'] = array();
  17. foreach ($table_config['total_column'] as $column => $value) {
  18. array_push($table_config['default_show_column'], $column);
  19. }
  20. $table_config['ajax_url'] = 'detect/ajax';
  21. return $this->view()->assign('table_config', $table_config)->display('admin/detect/index.tpl');
  22. }
  23. public function log($request, $response, $args)
  24. {
  25. $table_config['total_column'] = array("id" => "ID", "user_id" => "用户ID",
  26. "user_name" => "用户名", "node_id" => "节点ID",
  27. "node_name" => "节点名", "rule_id" => "规则ID",
  28. "rule_name" => "规则名", "rule_text" => "规则描述",
  29. "rule_regex" => "规则正则表达式", "rule_type" => "规则类型",
  30. "datetime" => "时间");
  31. $table_config['default_show_column'] = array();
  32. foreach ($table_config['total_column'] as $column => $value) {
  33. array_push($table_config['default_show_column'], $column);
  34. }
  35. $table_config['ajax_url'] = 'log/ajax';
  36. return $this->view()->assign('table_config', $table_config)->display('admin/detect/log.tpl');
  37. }
  38. public function create($request, $response, $args)
  39. {
  40. return $this->view()->display('admin/detect/add.tpl');
  41. }
  42. public function add($request, $response, $args)
  43. {
  44. $rule = new DetectRule();
  45. $rule->name = $request->getParam('name');
  46. $rule->text = $request->getParam('text');
  47. $rule->regex = $request->getParam('regex');
  48. $rule->type = $request->getParam('type');
  49. if (!$rule->save()) {
  50. $rs['ret'] = 0;
  51. $rs['msg'] = "添加失败";
  52. return $response->getBody()->write(json_encode($rs));
  53. }
  54. Telegram::SendMarkdown("有新的审计规则:".$rule->name);
  55. $rs['ret'] = 1;
  56. $rs['msg'] = "添加成功";
  57. return $response->getBody()->write(json_encode($rs));
  58. }
  59. public function edit($request, $response, $args)
  60. {
  61. $id = $args['id'];
  62. $rule = DetectRule::find($id);
  63. return $this->view()->assign('rule', $rule)->display('admin/detect/edit.tpl');
  64. }
  65. public function update($request, $response, $args)
  66. {
  67. $id = $args['id'];
  68. $rule = DetectRule::find($id);
  69. $rule->name = $request->getParam('name');
  70. $rule->text = $request->getParam('text');
  71. $rule->regex = $request->getParam('regex');
  72. $rule->type = $request->getParam('type');
  73. if (!$rule->save()) {
  74. $rs['ret'] = 0;
  75. $rs['msg'] = "修改失败";
  76. return $response->getBody()->write(json_encode($rs));
  77. }
  78. Telegram::SendMarkdown("规则更新:".PHP_EOL.$request->getParam('name'));
  79. $rs['ret'] = 1;
  80. $rs['msg'] = "修改成功";
  81. return $response->getBody()->write(json_encode($rs));
  82. }
  83. public function delete($request, $response, $args)
  84. {
  85. $id = $request->getParam('id');
  86. $rule = DetectRule::find($id);
  87. if (!$rule->delete()) {
  88. $rs['ret'] = 0;
  89. $rs['msg'] = "删除失败";
  90. return $response->getBody()->write(json_encode($rs));
  91. }
  92. $rs['ret'] = 1;
  93. $rs['msg'] = "删除成功";
  94. return $response->getBody()->write(json_encode($rs));
  95. }
  96. public function ajax_rule($request, $response, $args)
  97. {
  98. $datatables = new Datatables(new DatatablesHelper());
  99. $datatables->query('Select id as op,id,name,text,regex,type from detect_list');
  100. $datatables->edit('op', function ($data) {
  101. return '<a class="btn btn-brand" href="/admin/detect/'.$data['id'].'/edit">编辑</a>
  102. <a class="btn btn-brand-accent" id="delete" value="'.$data['id'].'" href="javascript:void(0);" onClick="delete_modal_show(\''.$data['id'].'\')">删除</a>';
  103. });
  104. $datatables->edit('type', function ($data) {
  105. return $data['type'] == 1 ? '数据包明文匹配' : '数据包十六进制匹配';
  106. });
  107. $body = $response->getBody();
  108. $body->write($datatables->generate());
  109. }
  110. public function ajax_log($request, $response, $args)
  111. {
  112. $datatables = new Datatables(new DatatablesHelper());
  113. $datatables->query('Select detect_log.id,user_id,user.user_name,node_id,node.name as node_name,list.id as rule_id,list.name as rule_name,list.text as rule_text,list.regex as rule_regex,list.type as rule_type,detect_log.datetime from detect_log,user,ss_node as node,detect_list as list where user.id=detect_log.user_id and node.id = detect_log.node_id and list.id = detect_log.list_id');
  114. $datatables->edit('rule_type', function ($data) {
  115. return $data['rule_type'] == 1 ? '数据包明文匹配' : '数据包十六进制匹配';
  116. });
  117. $datatables->edit('datetime', function ($data) {
  118. return date('Y-m-d H:i:s', $data['datetime']);
  119. });
  120. $body = $response->getBody();
  121. $body->write($datatables->generate());
  122. }
  123. }