升级核心6.0.7,添加数据库备份
This commit is contained in:
parent
7345e3b6b5
commit
79e07acc0b
102
app/admin/controller/Database.php
Normal file
102
app/admin/controller/Database.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\AdminController;
|
||||
use think\facade\Request;
|
||||
use think\facade\View;
|
||||
use think\facade\Config;
|
||||
use phpspirit\databackup\BackupFactory;
|
||||
use taoler\com\Files;
|
||||
|
||||
class Database extends AdminController
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->hostname = Config::get('database.connections.mysql.hostname');
|
||||
$this->hostport = Config::get('database.connections.mysql.hostport');
|
||||
$this->database = Config::get('database.connections.mysql.database');
|
||||
$this->username = Config::get('database.connections.mysql.username');
|
||||
$this->password = Config::get('database.connections.mysql.password');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
if(Request::isAjax()){
|
||||
$backName = Files::getDirName('../data');
|
||||
|
||||
$res['count'] = count($backName);
|
||||
if($res['count']){
|
||||
$res['code'] = 0;
|
||||
$res['msg'] = '';
|
||||
$res['data'] = [];
|
||||
foreach($backName as $k=>$v){
|
||||
$res['data'][] = ['id' => $k,
|
||||
'time' => $v,
|
||||
'name' => $v,
|
||||
];
|
||||
}
|
||||
|
||||
} else {
|
||||
return json(['code'=>-1,'msg'=>'还没有数据']);
|
||||
}
|
||||
return json($res);
|
||||
|
||||
}
|
||||
|
||||
return View::fetch();
|
||||
}
|
||||
|
||||
public function backup()
|
||||
{
|
||||
//halt(app()->getRootPath());
|
||||
//自行判断文件夹
|
||||
$backupdir = '../data';
|
||||
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
|
||||
$backupdir = $_POST['backdir'];
|
||||
} else {
|
||||
$backupdir = app()->getRootPath() .'data/'. date('Ymdhis');
|
||||
//halt($backupdir);
|
||||
}
|
||||
|
||||
if (!is_dir($backupdir)) {
|
||||
mkdir($backupdir, 0777, true);
|
||||
}
|
||||
|
||||
$backup = BackupFactory::instance('mysql', "$this->hostname:$this->hostport", $this->database, $this->username, $this->password);
|
||||
$result = $backup->setbackdir($backupdir)
|
||||
->setvolsize(0.2)
|
||||
->setonlystructure(false) //设置是否只备份目录结构
|
||||
->settablelist() //设置要备份的表, 默认全部表
|
||||
->setstructuretable()
|
||||
->ajaxbackup($_POST);
|
||||
|
||||
echo json_encode($result);
|
||||
}
|
||||
|
||||
|
||||
//下载
|
||||
public function down()
|
||||
{
|
||||
$id = input('id');
|
||||
var_dump($id);
|
||||
}
|
||||
|
||||
//删除备份文件夹
|
||||
public function delete()
|
||||
{
|
||||
$name = input('name');
|
||||
//var_dump($name);
|
||||
$dir = app()->getRootPath() .'data/'.$name;
|
||||
|
||||
$res = Files::delDir($dir);
|
||||
|
||||
if($res){
|
||||
return json(['code'=>0,'msg'=>'删除成功']);
|
||||
} else {
|
||||
return json(['code'=>-1,'msg'=>'删除失败']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -3,4 +3,5 @@
|
||||
return [
|
||||
app\middleware\Auth::class,
|
||||
//'logedcheck' => \app\middleware\logedCheck::class,
|
||||
app\middleware\AdminLoginCookie::class,
|
||||
];
|
@ -5,6 +5,9 @@ namespace app\admin\model;
|
||||
use think\Model;
|
||||
use think\facade\Db;
|
||||
use think\facade\Session;
|
||||
use app\oil\model\Station;
|
||||
use think\facade\Cookie;
|
||||
use think\facade\Config;
|
||||
use think\model\concern\SoftDelete;
|
||||
|
||||
class Admin extends Model
|
||||
@ -21,6 +24,11 @@ class Admin extends Model
|
||||
return $this->belongsTo('AuthGroup','auth_group_id','id');
|
||||
}
|
||||
*/
|
||||
//管理员关联站点
|
||||
public function station()
|
||||
{
|
||||
return $this->belongsTo(Station::class);
|
||||
}
|
||||
|
||||
//远程一对多管理员关联角色
|
||||
public function adminGroup()
|
||||
@ -30,12 +38,12 @@ class Admin extends Model
|
||||
//管理员关联角色分配表
|
||||
public function authGroupAccess()
|
||||
{
|
||||
return $this->hasMany('AuthGroupAccess','uid','id');
|
||||
return $this->hasMany(AuthGroupAccess::class,'uid');
|
||||
}
|
||||
|
||||
//登陆校验
|
||||
public function login($data)
|
||||
{
|
||||
{
|
||||
//查询用户
|
||||
$admin = Db::name('admin')->where('username',$data['username'])->where('delete_time',0)->find();
|
||||
|
||||
@ -51,13 +59,20 @@ class Admin extends Model
|
||||
//将用户数据写入Session
|
||||
Session::set('admin_id',$admin['id']);
|
||||
Session::set('admin_name',$admin['username']);
|
||||
|
||||
if(isset($data['remember'])){
|
||||
$salt = Config::get('taoler.salt');
|
||||
//加密auth存入cookie
|
||||
$auth = md5($admin['username'].$salt).":".$admin['id'];
|
||||
Cookie::set('adminAuth',$auth,604800);
|
||||
}
|
||||
|
||||
Db::name('admin')->where('id',$admin['id'])->update(
|
||||
[
|
||||
'last_login_time' => time(),
|
||||
'last_login_ip' => request()->ip(),
|
||||
]
|
||||
);
|
||||
);
|
||||
|
||||
//用户名密码正确返回1
|
||||
return 1;
|
||||
|
218
app/admin/view/database/index.html
Normal file
218
app/admin/view/database/index.html
Normal file
@ -0,0 +1,218 @@
|
||||
{extend name="public:base" /}
|
||||
|
||||
{block name="body"}
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header layuiadmin-card-header-auto">
|
||||
<button class="layui-btn layuiadmin-btn-database" data-type="back">备份</button>
|
||||
</div>
|
||||
|
||||
<div class="layui-progress layui-progress-big" lay-showpercent="true" lay-filter="demo">
|
||||
<div class="layui-progress-bar layui-bg-red" lay-percent="0%"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card-body">
|
||||
<table id="LAY-app-content-database" lay-filter="LAY-app-content-database"></table>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
|
||||
<button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
|
||||
<button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="tao-database">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="down"><i class="layui-icon layui-icon-edit"></i>下载</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-edit"></i>删除</a>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="js"}
|
||||
<script>
|
||||
|
||||
layui.config({
|
||||
base: '/static/admin/' //静态资源所在路径
|
||||
}).extend({
|
||||
index: 'lib/index' //主入口模块
|
||||
}).use(['index','table','layer','element'], function(){
|
||||
|
||||
var table = layui.table,
|
||||
layer = layui.layer,
|
||||
element = layui.element;
|
||||
var $ = layui.$;
|
||||
|
||||
var active = {
|
||||
|
||||
back: function backup(predate)
|
||||
{
|
||||
var index = layer.load();
|
||||
$.ajax({
|
||||
url: "{:url('admin/Database/backup')}",
|
||||
type: 'POST', //POST
|
||||
async: true, //或false,是否异步
|
||||
dataType: 'json',
|
||||
data:predate,
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
|
||||
if (data.totalpercentage >= 100)
|
||||
{
|
||||
//关闭
|
||||
layer.close(index);
|
||||
layer.alert('备份完成', {icon: 1});
|
||||
table.reload('LAY-app-content-database'); //数据刷新
|
||||
}
|
||||
|
||||
element.progress('demo', data.totalpercentage+'%');
|
||||
|
||||
//循环备份
|
||||
if (data.totalpercentage < 100)
|
||||
{
|
||||
backup(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
//总帐信息
|
||||
table.render({
|
||||
elem: '#LAY-app-content-database'
|
||||
,url: "{:url('admin/Database/index')}" //进列表接口
|
||||
,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
|
||||
,cols: [[
|
||||
{type: 'checkbox', fixed: 'left'}
|
||||
,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
|
||||
,{field: 'time', title: '备份时间',width: 180}
|
||||
,{field: 'name', title: '备份名', minWidth: 200}
|
||||
,{title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#tao-database'}
|
||||
]]
|
||||
,page: true
|
||||
,limit: 15
|
||||
,limits: [10, 15, 20, 25, 30]
|
||||
,text: '对不起,加载出现异常!'
|
||||
});
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(LAY-app-content-database)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'del'){
|
||||
layer.confirm('确定删除此站点?', function(index){
|
||||
$.ajax({
|
||||
type:'post',
|
||||
url:"{:url('Database/delete')}",
|
||||
data:{name:data.name},
|
||||
dataType:'json',
|
||||
success:function(data){
|
||||
if(data.code == 0){
|
||||
layer.msg(data.msg,{
|
||||
icon:6,
|
||||
time:2000
|
||||
},function(){
|
||||
location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.open({
|
||||
title:'删除失败',
|
||||
content:data.msg,
|
||||
icon:5,
|
||||
adim:6
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
//obj.del();
|
||||
layer.close(index);
|
||||
});
|
||||
} else if(obj.event === 'down'){
|
||||
var tr = $(obj.tr);
|
||||
layer.open({
|
||||
type: 2
|
||||
,title: '编辑支出'
|
||||
,content: "{:url('Database/down')}" + '?id='+ data.id
|
||||
,area: ['420px', '460px']
|
||||
,btn: ['确定', '取消']
|
||||
,yes: function(index, layero){
|
||||
|
||||
//获取iframe元素的值
|
||||
var iframeWindow = window['layui-layer-iframe'+ index]
|
||||
,submit = layero.find('iframe').contents().find("#LAY-admin-pay-submit");
|
||||
|
||||
//监听提交
|
||||
iframeWindow.layui.form.on('submit(LAY-admin-pay-submit)', function(data){
|
||||
var field = data.field; //获取提交的字段
|
||||
|
||||
//提交 Ajax 成功后,静态更新表格中的数据
|
||||
$.ajax({
|
||||
type:"post",
|
||||
url:payEdit,
|
||||
data:field,
|
||||
daType:"json",
|
||||
success:function (res){
|
||||
if (res.code == 0) {
|
||||
layer.msg(res.msg,{
|
||||
icon:6,
|
||||
time:2000
|
||||
});
|
||||
} else {
|
||||
layer.open({
|
||||
tiele:'修改失败',
|
||||
content:res.msg,
|
||||
icon:5,
|
||||
anim:6
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
table.reload('LAY-app-content-pay'); //数据刷新
|
||||
layer.close(index); //关闭弹层
|
||||
});
|
||||
|
||||
submit.trigger('click');
|
||||
|
||||
}
|
||||
,success: function(layero, index){
|
||||
//给iframe元素赋值
|
||||
var othis = layero.find('iframe').contents().find("#layuiadmin-app-form-pay").click();
|
||||
othis.find('input[name="pay_value"]').val(Math.abs(data.pay_value))
|
||||
,othis.find('input[name="pay_name"]').val(data.pay_name);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
$('#back1').on('click',function(){
|
||||
|
||||
//询问框
|
||||
layer.confirm('确定备份?', {
|
||||
btn: ['确定','取消'] //按钮
|
||||
}, function(){
|
||||
console.log(123);
|
||||
backup({});
|
||||
//layer.msg('的确很重要', {icon: 1});
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
$('.layui-btn.layuiadmin-btn-database').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
@ -1,14 +1,14 @@
|
||||
{extend name="public/base" /}
|
||||
|
||||
{block name="title"}登入 - TaoLer{/block}
|
||||
{block name="title"}登入 - TaoilSys加油站管理系统{/block}
|
||||
{block name="css"}<link rel="stylesheet" href="/static/admin/style/login.css" media="all">{/block}
|
||||
{block name="body"}
|
||||
<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
|
||||
|
||||
<div class="layadmin-user-login-main">
|
||||
<div class="layadmin-user-login-box layadmin-user-login-header">
|
||||
<h2>TaolerAdmin</h2>
|
||||
<p>TaoLer后台管理系统</p>
|
||||
<h2>TaoilSysAdmin</h2>
|
||||
<p>TaoilSys油站管理系统-专业版</p>
|
||||
</div>
|
||||
<div class="layadmin-user-login-box layadmin-user-login-body layui-form">
|
||||
<div class="layui-form-item">
|
||||
@ -23,7 +23,7 @@
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-xs7">
|
||||
<label class="layadmin-user-login-icon layui-icon layui-icon-vercode" for="LAY-user-login-vercode"></label>
|
||||
<input type="text" name="captcha" id="LAY-user-login-vercode" lay-verify="required" placeholder="图形验证码" class="layui-input">
|
||||
<input type="text" name="captcha" autocomplete="off" id="LAY-user-login-vercode" lay-verify="required" placeholder="图形验证码" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-col-xs5">
|
||||
<div style="margin-left: 10px;">
|
||||
@ -37,7 +37,7 @@
|
||||
<a href="{:url('admin/login/forget')}" class="layadmin-user-jump-change layadmin-link" style="margin-top: 7px;">忘记密码?</a>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
||||
<input type="hidden" class="layui-hide" name="__token__" value="{:token()}" />
|
||||
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit" id="LAY-user-login-submit">登 入</button>
|
||||
</div>
|
||||
<div class="layui-trans layui-form-item layadmin-user-login-other">
|
||||
@ -123,7 +123,7 @@
|
||||
,icon: 1
|
||||
,time: 1000
|
||||
}, function(){
|
||||
location.href = "{:url('admin/index/index')}"; //后台主页
|
||||
location.href = "{:url('index/index')}"; //后台主页
|
||||
});
|
||||
} else {
|
||||
layer.open({
|
||||
|
@ -4,13 +4,13 @@ Navicat MySQL Data Transfer
|
||||
Source Server : lc
|
||||
Source Server Version : 50730
|
||||
Source Host : localhost:3306
|
||||
Source Database : 1127
|
||||
Source Database : taotao
|
||||
|
||||
Target Server Type : MYSQL
|
||||
Target Server Version : 50730
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 2020-11-27 14:48:02
|
||||
Date: 2021-01-30 17:41:02
|
||||
*/
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
@ -41,7 +41,7 @@ CREATE TABLE `tao_admin` (
|
||||
-- ----------------------------
|
||||
-- Records of tao_admin
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_admin` VALUES ('1', 'admin', '管理员', '95d6f8d0d0c3b45e5dbe4057da1b149e', 'taoler@qq.com', '13812345678', '1', '1', '1', '2019.1.1 新年发布新版本!', '127.0.0.1', '1578986287', '1579053025', '1578986600', '0');
|
||||
INSERT INTO `tao_admin` VALUES ('1', 'admin', '管理员', '95d6f8d0d0c3b45e5dbe4057da1b149e', 'taoler@qq.com', '13812345678', '1', '1', '1', '2019.1.1 新年发布新版本!', '127.0.0.1', '1611997302', '1579053025', '1578986600', '0');
|
||||
INSERT INTO `tao_admin` VALUES ('2', 'test', '', '3dbfa76bd34a2a0274f5d52f5529ccb3', 'test@qq.com', '13567891236', '0', '0', '2', '', '127.0.0.1', '1578643147', '1555892325', '1576554415', '0');
|
||||
|
||||
-- ----------------------------
|
||||
@ -127,6 +127,31 @@ CREATE TABLE `tao_auth_group_access` (
|
||||
-- Records of tao_auth_group_access
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_auth_group_copy
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_auth_group_copy`;
|
||||
CREATE TABLE `tao_auth_group_copy` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色ID',
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '角色名称',
|
||||
`rules` char(255) NOT NULL DEFAULT '',
|
||||
`limits` varchar(255) NOT NULL DEFAULT '' COMMENT '权限范围',
|
||||
`descr` varchar(255) NOT NULL DEFAULT '' COMMENT '权限描述',
|
||||
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '角色状态1可用0禁止',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_auth_group_copy
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_auth_group_copy` VALUES ('1', '超级管理员', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,4,20,32,33,34,14,29,30,31,1,65,6,35,36,37,38,7,39,40,41,42,8,43,44,45,66,9,47,48,49,50,46,67,2,10,51,11,18,52,54,55,19,56,57,58,59,60,53,3,12,13', '管理所有的管理员', '所有权限', '1', '0', '1578984825', '0');
|
||||
INSERT INTO `tao_auth_group_copy` VALUES ('2', '管理员', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,1,65,6,35,36,37,38,67,3,12,13', '所有列表的管理', '普通管理员', '1', '0', '1578984832', '0');
|
||||
INSERT INTO `tao_auth_group_copy` VALUES ('3', '帖子管理', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25', '负责帖子的审核', '文章专员', '1', '0', '1578980219', '0');
|
||||
INSERT INTO `tao_auth_group_copy` VALUES ('4', '网站维护', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,90,2,10,51,11,18,52,54,55,19,56,57,58,59,60,53,3,12,13', '对数据进行统计', '网站维护', '1', '0', '1588065032', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_auth_rule
|
||||
-- ----------------------------
|
||||
@ -149,7 +174,7 @@ CREATE TABLE `tao_auth_rule` (
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=93 DEFAULT CHARSET=utf8;
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_auth_rule
|
||||
@ -162,7 +187,7 @@ INSERT INTO `tao_auth_rule` VALUES ('5', 'article', '内容', '', '1', '1', '0',
|
||||
INSERT INTO `tao_auth_rule` VALUES ('6', 'admin/User/list', '用户管理', '', '1', '1', '1', '1', '', '1', '1', '', '0', '1578901015', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('7', 'admin/Admin/index', '管理员', '', '1', '1', '1', '1', '', '1', '6', '', '0', '1578901133', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('8', 'admin/AuthGroup/list', '角色管理', '', '1', '1', '1', '1', '', '1', '11', '', '0', '1578901282', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('9', 'admin/AuthRule/index', '权限管理', '', '1', '1', '1', '1', '', '1', '16', '', '0', '1578981541', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('9', 'admin/AuthRule/index', '权限菜单', '', '1', '1', '2', '1', '', '1', '16', '', '0', '1611998671', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('10', 'admin/Set/index', '网站设置', '', '1', '1', '2', '1', '', '1', '1', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('11', 'admin/Set/server', '综合服务', '', '1', '1', '2', '1', '', '1', '3', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('12', 'admin/Admin/info', '基本资料', '', '1', '1', '3', '1', '', '1', '50', '', '0', '1578980034', '0');
|
||||
@ -170,70 +195,74 @@ INSERT INTO `tao_auth_rule` VALUES ('13', 'admin/Admin/repass', '修改密码',
|
||||
INSERT INTO `tao_auth_rule` VALUES ('15', 'admin/Forum/list', '帖子管理', '', '1', '1', '5', '1', '', '1', '1', '', '0', '1578902605', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('16', 'admin/Forum/tags', '分类管理', '', '1', '1', '5', '1', '', '1', '11', '', '0', '1578904950', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('17', 'admin/Forum/replys', '评论管理', '', '1', '1', '5', '1', '', '1', '7', '', '0', '1578904590', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('18', 'admin/Slider/index', '广告投放', '', '1', '1', '2', '1', '', '1', '4', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('18', 'admin/Slider/index', '广告投放', '', '1', '1', '93', '1', '', '1', '4', '', '0', '1611999603', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('19', 'admin/Upgrade/index', '系统升级', '', '1', '1', '2', '1', '', '1', '8', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('21', 'admin/Forum/listform', '编辑帖子', '', '1', '1', '5', '1', '', '0', '2', '', '0', '1578903229', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('22', 'admin/Forum/listdel', '删除帖子', '', '1', '1', '5', '1', '', '0', '3', '', '0', '1578903919', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('23', 'admin/Forum/check', '审核帖子', '', '1', '1', '5', '1', '', '0', '6', '', '0', '1578904476', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('24', 'admin/Forum/addtags', '添加分类', '', '1', '1', '5', '1', '', '0', '12', '', '0', '1578904966', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('25', 'admin/Forum/tagsform', '编辑分类', '', '1', '1', '5', '1', '', '0', '14', '', '0', '1578905046', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('26', 'admin/Forum/tagsdelete', '删除分类', '', '1', '1', '5', '1', '', '0', '13', '', '0', '1578904996', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('27', 'admin/Forum/replysform', '编辑评论', '', '1', '1', '5', '1', '', '0', '8', '', '0', '1578904627', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('28', 'admin/Forum/redel', '删除评论', '', '1', '1', '5', '1', '', '0', '9', '', '0', '1578904856', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('35', 'admin/User/userForm', '添加用户', '', '1', '1', '1', '1', '', '0', '2', '', '0', '1578901074', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('36', 'admin/User/userEdit', '编辑用户', '', '1', '1', '1', '1', '', '0', '3', '', '0', '1578901089', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('37', 'admin/User/delete', '删除用户', '', '1', '1', '1', '1', '', '0', '4', '', '0', '1578901099', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('38', 'admin/User/check', '审核用户', '', '1', '1', '1', '1', '', '0', '5', '', '0', '1578905291', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('39', 'admin/Admin/add', '添加管理员', '', '1', '1', '1', '1', '', '0', '7', '', '0', '1578901163', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('40', 'admin/Admin/edit', '编辑管理员', '', '1', '1', '1', '1', '', '0', '8', '', '0', '1578901184', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('41', 'admin/Admin/delete', '删除管理员', '', '1', '1', '1', '1', '', '0', '9', '', '0', '1578901198', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('42', 'admin/Admin/check', '审核管理员', '', '1', '1', '1', '1', '', '0', '10', '', '0', '1578901216', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('43', 'admin/AuthGroup/roleAdd', '添加角色', '', '1', '1', '1', '1', '', '0', '12', '', '0', '1578981437', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('44', 'admin/AuthGroup/roleEdit', '编辑角色', '', '1', '1', '1', '1', '', '0', '13', '', '0', '1578901349', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('45', 'admin/AuthGroup/roledel', '删除角色', '', '1', '1', '1', '1', '', '0', '14', '', '0', '1578971659', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('46', 'admin/AuthRule/add', '添加权限', '', '1', '1', '1', '1', '', '0', '21', '', '0', '1578981581', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('47', 'admin/AuthRule/edit', '编辑权限', '', '1', '1', '1', '1', '', '0', '17', '', '0', '1578901457', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('48', 'admin/AuthRule/delete', '删除权限', '', '1', '1', '1', '1', '', '0', '18', '', '0', '1578901469', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('49', 'admin/AuthRule/check', '审核权限', '', '1', '1', '1', '1', '', '0', '19', '', '0', '1578901484', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('50', 'admin/AuthRule/menushow', '菜单权限', '', '1', '1', '1', '1', '', '0', '20', '', '0', '1578901495', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('51', 'admin/Set/upload', '上传logo', '', '1', '1', '2', '1', '', '0', '2', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('52', 'admin/Slider/add', '添加广告', '', '1', '1', '2', '1', '', '0', '5', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('53', 'admin/Slider/edit', '编辑广告', '', '1', '1', '2', '1', '', '0', '14', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('54', 'admin/Slider/delete', '删除广告', '', '1', '1', '2', '1', '', '0', '6', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('55', 'admin/Slider/uploadimg', '上传广告图片', '', '1', '1', '2', '1', '', '0', '7', '', '0', '1578906577', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('56', 'admin/Upgrade/key', '设置key', '', '1', '1', '2', '1', '', '0', '9', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('57', 'admin/Upgrade/keyedit', '修改key', '', '1', '1', '2', '1', '', '0', '10', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('58', 'admin/Upgrade/check', '升级检测', '', '1', '1', '2', '1', '', '0', '11', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('59', 'admin/Upgrade/upload', '自动升级', '', '1', '1', '2', '1', '', '0', '12', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('60', 'admin/Upgrade/uploadzip', '上传升级包', '', '1', '1', '2', '1', '', '0', '13', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('62', 'admin/Forum/top', '置顶帖子', '', '1', '1', '5', '1', '', '0', '4', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('63', 'admin/Forum/hot', '加精帖子', '', '1', '1', '5', '1', '', '0', '5', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('64', 'admin/Froum/recheck', '审核评论', '', '1', '1', '5', '1', '', '0', '10', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('65', 'admin/User/uploadImg', '上传用户头像', '', '1', '1', '1', '1', '', '0', '0', '', '0', '1578981624', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('66', 'admin/AuthGroup/check', '审核角色', '', '1', '1', '1', '1', '', '0', '15', '', '0', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('67', 'admin/Sign/signRule', '签到规则', '', '1', '1', '2', '1', '', '0', '15', '', '1585547595', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('68', 'admin/Sign/add', '添加签到', '', '1', '1', '2', '1', '', '0', '16', '', '1585547705', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('69', 'admin/Sign/signEdit', '编辑签到', '', '1', '1', '2', '1', '', '0', '17', '', '1585547774', '1585548298', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('70', 'admin/Sign/delete', '删除签到', '', '1', '1', '2', '1', '', '0', '18', '', '1585547817', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('71', 'admin/Vip/vipRule', '用户等级', '', '1', '1', '2', '1', '', '0', '19', '', '1585547921', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('72', 'admin/Vip/add', '添加vip等级', '', '1', '1', '2', '1', '', '0', '20', '', '1585547981', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('73', 'admin/Vip/vipEdit', '编辑vip等级', '', '1', '1', '1', '1', '', '0', '21', '', '1585548029', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('74', 'admin/Vip/delete', '删除vip等级', '', '1', '1', '2', '1', '', '0', '22', '', '1585548077', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('75', 'admin/Set/email', '邮箱设置', '', '1', '1', '2', '1', '', '0', '23', '', '1585548143', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('21', 'admin/Forum/listform', '编辑帖子', '', '1', '1', '15', '2', '', '0', '2', '', '0', '1611997428', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('22', 'admin/Forum/listdel', '删除帖子', '', '1', '1', '15', '2', '', '0', '3', '', '0', '1611997448', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('23', 'admin/Forum/check', '审核帖子', '', '1', '1', '15', '2', '', '0', '6', '', '0', '1611997474', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('24', 'admin/Forum/addtags', '添加分类', '', '1', '1', '16', '2', '', '0', '12', '', '0', '1611997513', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('25', 'admin/Forum/tagsform', '编辑分类', '', '1', '1', '16', '2', '', '0', '14', '', '0', '1611997535', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('26', 'admin/Forum/tagsdelete', '删除分类', '', '1', '1', '16', '2', '', '0', '13', '', '0', '1611997523', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('27', 'admin/Forum/replysform', '编辑评论', '', '1', '1', '17', '2', '', '0', '8', '', '0', '1611997484', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('28', 'admin/Forum/redel', '删除评论', '', '1', '1', '17', '2', '', '0', '9', '', '0', '1611997494', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('35', 'admin/User/userForm', '添加用户', '', '1', '1', '6', '2', '', '0', '2', '', '0', '1611997673', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('36', 'admin/User/userEdit', '编辑用户', '', '1', '1', '6', '2', '', '0', '3', '', '0', '1611997690', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('37', 'admin/User/delete', '删除用户', '', '1', '1', '6', '2', '', '0', '4', '', '0', '1611997701', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('38', 'admin/User/check', '审核用户', '', '1', '1', '6', '2', '', '0', '5', '', '0', '1611997713', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('39', 'admin/Admin/add', '添加管理员', '', '1', '1', '7', '2', '', '0', '7', '', '0', '1611997732', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('40', 'admin/Admin/edit', '编辑管理员', '', '1', '1', '7', '2', '', '0', '8', '', '0', '1611997747', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('41', 'admin/Admin/delete', '删除管理员', '', '1', '1', '7', '2', '', '0', '9', '', '0', '1611997760', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('42', 'admin/Admin/check', '审核管理员', '', '1', '1', '7', '2', '', '0', '10', '', '0', '1611997772', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('43', 'admin/AuthGroup/roleAdd', '添加角色', '', '1', '1', '8', '2', '', '0', '12', '', '0', '1611997790', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('44', 'admin/AuthGroup/roleEdit', '编辑角色', '', '1', '1', '8', '2', '', '0', '13', '', '0', '1611997805', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('45', 'admin/AuthGroup/roledel', '删除角色', '', '1', '1', '8', '2', '', '0', '14', '', '0', '1611997820', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('46', 'admin/AuthRule/add', '添加权限', '', '1', '1', '9', '2', '', '0', '21', '', '0', '1611997901', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('47', 'admin/AuthRule/edit', '编辑权限', '', '1', '1', '9', '2', '', '0', '17', '', '0', '1611997849', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('48', 'admin/AuthRule/delete', '删除权限', '', '1', '1', '9', '2', '', '0', '18', '', '0', '1611997869', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('49', 'admin/AuthRule/check', '审核权限', '', '1', '1', '9', '2', '', '0', '19', '', '0', '1611997884', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('50', 'admin/AuthRule/menushow', '菜单权限', '', '1', '1', '9', '2', '', '0', '20', '', '0', '1611997929', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('51', 'admin/Set/upload', '上传logo', '', '1', '1', '10', '2', '', '0', '2', '', '0', '1611998097', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('52', 'admin/Slider/add', '添加广告', '', '1', '1', '18', '2', '', '0', '5', '', '0', '1611998128', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('53', 'admin/Slider/edit', '编辑广告', '', '1', '1', '18', '2', '', '0', '14', '', '0', '1611998263', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('54', 'admin/Slider/delete', '删除广告', '', '1', '1', '18', '2', '', '0', '6', '', '0', '1611998141', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('55', 'admin/Slider/uploadimg', '上传广告图片', '', '1', '1', '18', '2', '', '0', '7', '', '0', '1611998156', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('56', 'admin/Upgrade/key', '设置key', '', '1', '1', '19', '2', '', '0', '9', '', '0', '1611998178', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('57', 'admin/Upgrade/keyedit', '修改key', '', '1', '1', '19', '2', '', '0', '10', '', '0', '1611998192', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('58', 'admin/Upgrade/check', '升级检测', '', '1', '1', '19', '2', '', '0', '11', '', '0', '1611998214', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('59', 'admin/Upgrade/upload', '自动升级', '', '1', '1', '19', '2', '', '0', '12', '', '0', '1611998230', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('60', 'admin/Upgrade/uploadzip', '上传升级包', '', '1', '1', '19', '2', '', '0', '13', '', '0', '1611998245', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('62', 'admin/Forum/top', '置顶帖子', '', '1', '1', '15', '2', '', '0', '4', '', '0', '1611997455', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('63', 'admin/Forum/hot', '加精帖子', '', '1', '1', '15', '2', '', '0', '5', '', '0', '1611997465', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('64', 'admin/Froum/recheck', '审核评论', '', '1', '1', '17', '2', '', '0', '10', '', '0', '1611997503', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('65', 'admin/User/uploadImg', '上传用户头像', '', '1', '1', '6', '2', '', '0', '0', '', '0', '1611997661', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('66', 'admin/AuthGroup/check', '审核角色', '', '1', '1', '8', '2', '', '0', '15', '', '0', '1611997835', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('67', 'admin/Sign/signRule', '签到规则', '', '1', '1', '11', '2', '', '0', '15', '', '1585547595', '1611998427', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('68', 'admin/Sign/add', '添加签到', '', '1', '1', '11', '2', '', '0', '16', '', '1585547705', '1611998444', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('69', 'admin/Sign/signEdit', '编辑签到', '', '1', '1', '11', '2', '', '0', '17', '', '1585547774', '1611998457', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('70', 'admin/Sign/delete', '删除签到', '', '1', '1', '11', '2', '', '0', '18', '', '1585547817', '1611998470', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('71', 'admin/Vip/vipRule', '用户等级', '', '1', '1', '11', '2', '', '0', '19', '', '1585547921', '1611998481', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('72', 'admin/Vip/add', '添加vip等级', '', '1', '1', '11', '2', '', '0', '20', '', '1585547981', '1611998492', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('73', 'admin/Vip/vipEdit', '编辑vip等级', '', '1', '1', '11', '2', '', '0', '21', '', '1585548029', '1611998556', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('74', 'admin/Vip/delete', '删除vip等级', '', '1', '1', '11', '2', '', '0', '22', '', '1585548077', '1611998503', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('75', 'admin/Set/email', '邮箱设置', '', '1', '1', '10', '2', '', '0', '23', '', '1585548143', '1611998372', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('76', 'admin/Notice/index', '发布通知', '', '1', '1', '4', '1', '', '1', '10', '', '1585618141', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('77', 'admin/Notice/add', '添加通知', '', '1', '1', '4', '1', '', '0', '11', '', '1585663336', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('78', 'admin/Notice/edit', '编辑通知', '', '1', '1', '4', '1', '', '0', '12', '', '1585663366', '1585663465', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('79', 'admin/Notice/delete', '删除通知', '', '1', '1', '4', '1', '', '0', '13', '', '1585663412', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('77', 'admin/Notice/add', '添加通知', '', '1', '1', '76', '2', '', '0', '11', '', '1585663336', '1611997580', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('78', 'admin/Notice/edit', '编辑通知', '', '1', '1', '76', '2', '', '0', '12', '', '1585663366', '1611997590', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('79', 'admin/Notice/delete', '删除通知', '', '1', '1', '76', '2', '', '0', '13', '', '1585663412', '1611997601', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('83', 'admin/AuthAccess/index', '管理员权限', '', '1', '1', '1', '1', '', '1', '22', '', '1585794015', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('84', 'admin/AuthAccess/add', '添加管理员权限', '', '1', '1', '1', '1', '', '0', '23', '', '1585806544', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('85', 'admin/AuthAccess/edit', '编辑管理员权限', '', '1', '1', '1', '1', '', '0', '24', '', '1585806592', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('86', 'admin/AuthAccess/delete', '删除管理员权限', '', '1', '1', '1', '1', '', '0', '25', '', '1585806620', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('87', 'admin/AuthAccess/check', '审核管理员权限', '', '1', '1', '1', '1', '', '0', '26', '', '1585806653', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('88', 'admin/Set/website', '网站信息保存', '', '1', '1', '2', '1', '', '0', '24', '', '1585819936', '1585820211', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('89', 'admin/User/auth', '设置超级用户', '', '1', '1', '1', '1', '', '0', '22', '', '1578984801', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('90', 'admin/Forum/tagshot', '开启热点', '', '1', '1', '5', '1', '', '0', '15', '', '1585841826', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('91', 'admin/Admin/infoSet', '资料设置', '', '1', '1', '3', '1', '', '0', '62', '', '1586245669', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('92', 'admin/Admin/repassSet', '密码设置', '', '1', '1', '3', '1', '', '0', '64', '', '1586245727', '0', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('84', 'admin/AuthAccess/add', '添加管理员权限', '', '1', '1', '83', '2', '', '0', '23', '', '1585806544', '1611998012', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('85', 'admin/AuthAccess/edit', '编辑管理员权限', '', '1', '1', '83', '2', '', '0', '24', '', '1585806592', '1611998030', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('86', 'admin/AuthAccess/delete', '删除管理员权限', '', '1', '1', '83', '2', '', '0', '25', '', '1585806620', '1611998046', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('87', 'admin/AuthAccess/check', '审核管理员权限', '', '1', '1', '83', '2', '', '0', '26', '', '1585806653', '1611998060', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('88', 'admin/Set/website', '网站信息保存', '', '1', '1', '10', '2', '', '0', '24', '', '1585819936', '1611998395', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('89', 'admin/User/auth', '设置超级用户', '', '1', '1', '6', '2', '', '0', '22', '', '1578984801', '1611997990', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('90', 'admin/Forum/tagshot', '开启热点', '', '1', '1', '16', '2', '', '0', '15', '', '1585841826', '1611997546', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('91', 'admin/Admin/infoSet', '资料设置', '', '1', '1', '12', '2', '', '0', '62', '', '1586245669', '1611998517', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('92', 'admin/Admin/repassSet', '密码设置', '', '1', '1', '13', '2', '', '0', '64', '', '1586245727', '1611998534', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('93', 'servers', '服务', '', '1', '1', '0', '0', 'layui-icon-cols', '1', '2', '', '1611286515', '1611997619', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('94', 'admin/Database/index', '数据备份', '', '1', '1', '93', '1', '', '1', '9', '', '1611897141', '1611902589', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('95', 'admin/Database/backup', '进行备份', '', '1', '1', '94', '2', '', '0', '10', '', '1611897285', '1611902610', '0');
|
||||
INSERT INTO `tao_auth_rule` VALUES ('96', 'admin/Database/delete', '备份删除', '', '1', '1', '94', '2', '', '0', '0', '', '1611902429', '0', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_cate
|
||||
@ -304,6 +333,28 @@ CREATE TABLE `tao_comment` (
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_comment` VALUES ('1', 'https://www.aieok.com', '1', '1', '0', '0', '1', '1555127897', '1578977505', '1578977505');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_friend_link
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_friend_link`;
|
||||
CREATE TABLE `tao_friend_link` (
|
||||
`id` int(2) unsigned NOT NULL AUTO_INCREMENT COMMENT '友情链接id',
|
||||
`linkname` varchar(10) NOT NULL COMMENT '链接名称',
|
||||
`linksrc` varchar(60) NOT NULL COMMENT '链接地址',
|
||||
`linkimg` varchar(60) NOT NULL COMMENT '链接图片',
|
||||
`creat_time` int(10) NOT NULL COMMENT '创建时间',
|
||||
`update_time` int(10) NOT NULL COMMENT '更新时间',
|
||||
`delete_time` int(10) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_friend_link
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_friend_link` VALUES ('1', 'taobao', 'https://www.taobao.com', '', '0', '0', '0');
|
||||
INSERT INTO `tao_friend_link` VALUES ('2', 'baidu', 'https://www.baidu.com', '', '0', '0', '0');
|
||||
INSERT INTO `tao_friend_link` VALUES ('3', 'tensent', 'https://www.qq.com', '', '0', '0', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_mail_server
|
||||
-- ----------------------------
|
||||
@ -366,6 +417,52 @@ CREATE TABLE `tao_message_to` (
|
||||
-- Records of tao_message_to
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_plugins
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_plugins`;
|
||||
CREATE TABLE `tao_plugins` (
|
||||
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`plugins_name` varchar(20) NOT NULL COMMENT '插件名称',
|
||||
`plugins_version` varchar(20) NOT NULL COMMENT '插件版本',
|
||||
`plugins_auther` varchar(20) NOT NULL COMMENT '插件作者',
|
||||
`plugins_resume` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
|
||||
`plugins_price` int(5) NOT NULL COMMENT '差价售价',
|
||||
`plugins_src` varchar(70) NOT NULL DEFAULT '' COMMENT '插件获取路径',
|
||||
`plugins_status` enum('0','1') NOT NULL DEFAULT '1' COMMENT '插件状态1开启0禁止',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`,`plugins_version`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_plugins
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_plugins` VALUES ('1', '1.1.1', '', '', '第1个版本', '0', '/storage/version/20191215/536c65fc4df42100016fa3d97b584d26.zip', '1', '1575862901', '0', '0');
|
||||
INSERT INTO `tao_plugins` VALUES ('2', '1.1.2', '', '', '第2个版本', '0', '/storage/version/20191215/832e150dfbc0e88e04a408e475bce8bb.zip', '1', '1575862901', '0', '0');
|
||||
INSERT INTO `tao_plugins` VALUES ('3', '1.1.3', '', '', '第3个版本', '0', '/storage/version/20191215/9ff1153045f1ad1e26c74aad148bdde3.zip', '1', '1575862901', '1575862901', '0');
|
||||
INSERT INTO `tao_plugins` VALUES ('4', '1.1.4', '1.0.0', 'au', '第四个版本', '5', '/storage/version/20191209/1fae8a15fcd41181490a0c02e0218ef1.zip', '1', '1575864450', '1575864587', '0');
|
||||
INSERT INTO `tao_plugins` VALUES ('5', 'hello', 'v0.0.1', 'taoler', '第一款欢迎插件', '10', '/storage/addons/20201016/2c5b581d90a92b6b154fa9bc0c73d494.zip', '1', '1602833500', '1602833500', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_point_note
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_point_note`;
|
||||
CREATE TABLE `tao_point_note` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`controller` varchar(255) NOT NULL,
|
||||
`uid` int(10) unsigned NOT NULL,
|
||||
`pointid` int(10) unsigned NOT NULL,
|
||||
`score` int(10) NOT NULL,
|
||||
`add_time` int(10) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_point_note
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_slider
|
||||
-- ----------------------------
|
||||
@ -416,6 +513,7 @@ CREATE TABLE `tao_system` (
|
||||
`blackname` varchar(255) NOT NULL COMMENT '注册黑名单',
|
||||
`sys_version_num` varchar(5) NOT NULL COMMENT '系统版本',
|
||||
`key` varchar(60) DEFAULT NULL COMMENT 'key',
|
||||
`api_url` varchar(80) NOT NULL COMMENT 'api',
|
||||
`base_url` varchar(50) NOT NULL DEFAULT '',
|
||||
`upcheck_url` varchar(255) NOT NULL COMMENT '版本检测',
|
||||
`upgrade_url` varchar(255) NOT NULL COMMENT '升级地址',
|
||||
@ -427,7 +525,103 @@ CREATE TABLE `tao_system` (
|
||||
-- ----------------------------
|
||||
-- Records of tao_system
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_system` VALUES ('1', 'TaoLer社区演示站', '轻论坛系统', 'http://www.xxx.com', 'taoler', '/storage/logo/logo.png', '10', '2048', 'png|gif|jpg|jpeg|zip|rarr', '<a href=\"http://www.aieok.com\" target=\"_blank\">aieok.com 版权所有</a>', 'TaoLer,轻社区系统,bbs,论坛,Thinkphp6,layui,fly模板,', '这是一个Taoler轻社区论坛系统', '1', '1', '1', '0.0.0.0', '管理员|admin|审核员|超级|垃圾', '1.6.3', '', 'http://api.aieok.com/v1/index/cy', 'http://api.aieok.com/v1/upload/check', 'http://api.aieok.com/v1/upload/api', '1581221008', '1577419197');
|
||||
INSERT INTO `tao_system` VALUES ('1', 'TaoLer社区演示站', '轻论坛系统', 'http://www.xxx.com', 'taoler', '/storage/logo/logo.png', '10', '2048', 'png|gif|jpg|jpeg|zip|rarr', '<a href=\"http://www.aieok.com\" target=\"_blank\">aieok.com 版权所有</a>', 'TaoLer,轻社区系统,bbs,论坛,Thinkphp6,layui,fly模板,', '这是一个Taoler轻社区论坛系统', '1', '1', '1', '0.0.0.0', '管理员|admin|审核员|超级|垃圾', '1.6.3', '', 'http://api.aieok.com', 'http://api.aieok.com/v1/index/cy', 'http://api.aieok.com/v1/upload/check', 'http://api.aieok.com/v1/upload/api', '1581221008', '1577419197');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_time_line
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_time_line`;
|
||||
CREATE TABLE `tao_time_line` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '时间线Id',
|
||||
`timeline_title` varchar(255) NOT NULL COMMENT '时间线标题',
|
||||
`timeline_content` text NOT NULL COMMENT '时间线内容',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_time_line
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_time_line` VALUES ('8', '2019年5月1日', '<p>thinkphp5.1+layui2.4+fly3.0</p><p>TBLs0.1</p>', '1584870099', '1584870099', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('9', '2019年5月5日', '<p>创建数据表结构,</p><p>建立前台框架,</p><p>构建用户端html;</p><p>登录,注册,密码找回。</p>', '1584871136', '1584871136', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('10', '2019年5月10日', '<p>[新增] 注册模块,进行动态密码双重加密</p><p>[新增]登录模块,加入validata验证</p><p>[新增]密码找回</p><p>[安装]phpmailer插件</p><p>[优化]验证码captcha</p>', '1584871314', '1584871314', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('11', '2019年5月15日', '<p><span>[优化]</span><span> </span>注册模块,邮箱用户名多态登录</p><p>[优化]密码找回,更新验证码</p>', '1584871602', '1584871602', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('12', '2019年5月25日', '<p>[新增]文章添加,编辑,删除</p><p>[新增]首页,分类,详情</p><p>[新增]回帖</p><p>[优化]多态登录</p><p>[优化]邮件首发验证码</p>', '1585208263', '1585208263', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('13', '2019年6月1日', '<p>[新增]右栏各模块</p><p>[新增]签到</p><p>[优化]帖子发布</p><p>[更新]layui2.5</p>', '1585208481', '1585208481', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('14', '2019年6月10日', '<p>[优化]前台分类导航选择</p><p>[优化]前台分类筛选选择</p><p>[优化]cate控制</p><p>[修复]未登录状态点文章发布跳转</p>', '1585208796', '1585208796', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('15', '2019年6月20日', '<p>[新增]后台模版的更换</p><p>[新增]账户管理</p>', '1585209047', '1585209047', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('16', '2019年7月5日', '<p>[新增]内容的管理模块</p><p>[新增]设置管理模块</p><p>[修复]前台用户页面bug</p>', '1585209329', '1585209329', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('17', '2019年7月25日', '<p>[新增]应用模块,系统升级,版本发布,授权管理等</p><p><br></p>', '1585209434', '1585209434', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('18', '2019年8月10日', '[优化]管理,用户,管理员,角色,权限', '1585209551', '1585209551', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('19', '2019年9月10日', '<p>[更新]layui2.5.5</p><p>[修复]授权前后台</p><p>[修复]前台版本升级系统的检测</p><p><br></p>', '1585209783', '1585209783', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('20', '2019年9月25日 ', '<p>[修复]权限控制</p><p>[修复]角色管理</p><p>[优化]网站设置Logo保存</p><p>[优化]前台注册在一些信息</p><p><br></p>', '1585210095', '1585210095', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('21', '2019年10月5日', '[修复]一些已知bug', '1585210220', '1585210220', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('22', '2019年10月25日', '<p>[更新] 升级Thinkphp6框架为正式版</p><p>[优化] 各查询条件相关优化</p>', '1585210342', '1585210342', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('23', '2019年11月5日', '<p><span>[优化] 后台多模块功能的优化</span></p><p><span>[新增] 后台多个功能的增加</span></p>', '1585210449', '1585210449', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('24', '2019年11月20日', '<p>[新增]广告管理</p><p>[优化]幻灯和广告合并</p><p>[修复] 账户密码,基本资料设置</p>', '1585210712', '1585210712', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('25', '2019年12月5日', '<p>[新增] 安装引导程序</p><p>[优化] 数据库表</p><p>[优化] 后台数个页面的优化和新增</p>', '1585210905', '1585210905', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('26', '2019年12月15日', '<p>[修复] 修复多数已知问题</p><p>[修复] 转移测试平台</p>', '1585211052', '1585211052', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('27', '2019年12月30日', '<p><span>[修复] 安装引导文件的修复</span></p><p><span>[新增] 发布测试版本前的准备</span></p><p><span>[新增] 系统的介绍</span></p>', '1585211146', '1585211146', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('28', '2020年1月1日 Beat 1.0', '[新增] 发布1.0测试版本,命名TaoLer。', '1585211259', '1585211259', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('29', '2020年1月1-31日', '<p><span>[修复] 数个问题修复和完善</span></p>', '1585211340', '1585211340', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('30', '2020年2月1-29日', '<p>[新增] 帖子tags</p><p>[优化] 帖子文章的SEO</p><p>[新增] auth模块发布至github</p><p>[更新] auth权限管理插件</p><p>[修复] 引导文件的数据库配置</p><p>[修复] 授权在某些服务器的获取</p><p>[修复] 文件上传</p>', '1585211685', '1585211685', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('31', '2020年3月10', '<p><span>[优化] 帖子,分类各类缓存,数据库查询,性能优化等</span></p><p>[优化] 前台超级管理员权限的分配</p><p><span>[修复] 编辑帖子,发帖人改变的bug</span></p><p>[新增] 插件管理模块</p><p>[新增] 登录日志文件,浏览帖子日志</p>', '1585212061', '1585212061', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('32', '2020年3月20', '<p>[新增] 版本更新日志线</p><p>[修复] 前台会员页面展示</p><p>[优化] 多个页面的缓存</p><p>[优化] 前台用户授权页面</p>', '1585212188', '1585212188', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('33', '2020年3月26', '<p>[新增] 站内信消息模块</p><p><br></p>', '1585212283', '1585212283', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('34', '2020年3月29', '<p><span>[新增] 用户后台签到模块</span></p><p>[新增] 积分等级后台设置</p><p>[优化] 消息通知功能</p>', '1585484428', '1585484428', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('35', '2020年3月30', '<p>[新增] VIP模块</p><p>[优化] 优化签到积分规则</p><p>[修复] 权限规则</p>', '1585577995', '1585577995', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('36', 'TaoLer V1.0.0正式版', '<p>[新增] 后台消息管理模块,发全站内信,单独推送用户消息</p><p>[优化] 前台用户系统消息和接收系统消息 </p><p>[版本] 框架基本定型,推送1.0正式版,其它待优化事项逐步完成</p>', '1585669343', '1585669343', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('37', '222', '222', '1585752242', '1585752256', '1585752256');
|
||||
INSERT INTO `tao_time_line` VALUES ('38', '111', '1111', '1585754796', '1585754830', '1585754830');
|
||||
INSERT INTO `tao_time_line` VALUES ('39', 'TaoLer V1.1.0', '<p>[修复] 后台权限控制更加仔细,权限,角色,用户组分配三级设置</p><p>[修复] 移除管理员的角色直接分配</p><p>[新增] 后台分类的热点的单选设置选项</p><p>[新增] 添加数据库auth_group_access id字段,可以更改用户的编辑操作</p><p>[新增] 权限控制菜单和按钮规则的添加</p><p>[优化] 站内信后台通知和前台之间的系统通知和用户通知的读取</p>', '1585898118', '1585898118', '0');
|
||||
INSERT INTO `tao_time_line` VALUES ('40', 'qqq', 'qqqqqq', '1588050588', '1605504731', '1605504731');
|
||||
INSERT INTO `tao_time_line` VALUES ('41', 'ddd', 'dddd', '1605507216', '1605507216', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_upgrade_auth
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_upgrade_auth`;
|
||||
CREATE TABLE `tao_upgrade_auth` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`user` varchar(20) NOT NULL COMMENT '用户',
|
||||
`domain` varchar(30) NOT NULL COMMENT '域名',
|
||||
`key` varchar(60) NOT NULL COMMENT '授权秘钥',
|
||||
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',
|
||||
`auth_level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '授权等级0无授权1初级2中级3高级',
|
||||
`end_time` int(11) NOT NULL DEFAULT '0' COMMENT '结束时间',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_upgrade_auth
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('1', 'admin', 'http://www.tp6.com', '9ee40f0c4f5c8f2f10b06ae2e1ddda96ac709c4a', '1', '0', '0', '0', '0', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('2', 'tao', 'http://www.tp6.com', '123456', '1', '1', '1577721600', '0', '1577172802', '1577172802');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('3', 'admin', 'https://www.tp.com', 'e49183beee30d0b463fbf415d63cce3908d95599', '1', '0', '0', '1576835663', '1583765865', '1583765865');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('4', 'admin', 'https://www.tp6.com', '9ee40f0c4f5c8f2f10b06ae2e1ddda96ac709c4a', '1', '1', '0', '1576835915', '1576835915', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('5', 'admin', 'http://www.baidu.com', 'fd27553322b3ed27ff7114b1c540901d36ac1ef8', '1', '0', '0', '1576836110', '1576836110', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('6', 'admin', 'https://www.taobao.com', 'b5d63bc7ae0d86c4d4019e2aea8d828f06818cc7', '1', '1', '0', '1576836142', '1583765908', '1583765908');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('7', 'admin', 'http://www.taobao.com', '4931b81d82673528828d2fd64a0414e8925c9221', '1', '0', '0', '1576836211', '1583765821', '1583765821');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('8', 'admin', 'http://qianniu.com', '0106c5c4f8e0a1d97745353bee6201783d481ac2', '1', '1', '0', '1576836529', '1583765837', '1583765837');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('9', 'admin', 'http://baidu.com', '4ce7a1d87218353d09081a291f38ddb290b0630b', '1', '0', '0', '1576836712', '1583765886', '1583765886');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('10', 'zhao', 'http://tao.tp6.com', '374f2e2a63f1201924a07561095cd078acae238b', '1', '1', '0', '1576837200', '1576837200', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('11', 'ZhiQ', 'http://www.hicheng.cn', '20b32d07aa9c2fb24afed0bf72f420144928fd22', '1', '0', '0', '1579012640', '1579012640', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('12', 'ZhiQ', 'https://www.hicheng.cn', '9a2e0b92f54238760c48d6021adba6e20c9ede0a', '1', '0', '0', '1579012652', '1579012652', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('13', 'lingkur', 'http://demo.biudj.com', '15eacf288cc4e8a1a9b69da3338607d0710b8cd1', '1', '0', '0', '1579455284', '1579455284', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('14', '云飞', 'https://www.cqtl520.com', 'db88afaedaacc1cabc15013dd3ea5f412f6086c9', '1', '0', '0', '1579665257', '1579665257', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('15', '123', 'http://http://www.aieok.com/', '13971a9975a4e4eb9827a01767a2796c68e03b69', '1', '0', '0', '1583659119', '1583659119', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('16', '22553456', 'http://www.srsn.com', 'fb86db60328ada7c0180a3f32765777dc4250a7f', '1', '0', '0', '1584153862', '1584153862', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('17', 'maqiang', 'https://www.wujiangpu.com', 'b4c22df2a87ecd0524b90cf8d56eeadeba58a8a1', '1', '0', '0', '1584278073', '1584278073', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('18', 'admin', 'https://www.igoke.cn', '8e8a3c05508f853fb06e3d5accd927d949194971', '1', '0', '0', '1585382531', '1590487273', '1590487273');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('19', 'tt', 'http://www.tt.com', 'ff9f48057c831cb5db3af907b799b754f0499050', '1', '0', '2020', '1590486647', '1590487269', '1590487269');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('20', 'dfdf', 'http://wwerw.com', '1675905f7042fcdbca2c2de43ba79827ee62631f', '1', '0', '2020', '1590486715', '1590486715', '0');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('21', 'fdfdf', 'dfdfdsf', 'cb71fef668253fe6b2761f10500af9440acdcd8d', '1', '0', '2020', '1590486752', '1590487269', '1590487269');
|
||||
INSERT INTO `tao_upgrade_auth` VALUES ('22', 'fdfdf', 'http://wwwe.com', '1db68d6d7d0cb9fd44ad51e22611680f3aa26a7d', '1', '0', '1590854400', '1590486950', '1590486950', '0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_user
|
||||
@ -569,6 +763,30 @@ CREATE TABLE `tao_user_zan` (
|
||||
-- Records of tao_user_zan
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_version
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_version`;
|
||||
CREATE TABLE `tao_version` (
|
||||
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`version_name` varchar(20) NOT NULL COMMENT '版本名称',
|
||||
`version_src` varchar(70) NOT NULL DEFAULT '' COMMENT '版本文件路径',
|
||||
`version_resume` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
|
||||
`version_status` enum('0','1') NOT NULL DEFAULT '1' COMMENT '1开启0禁止',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_version
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_version` VALUES ('1', '1.1.1', '/storage/version/20191215/536c65fc4df42100016fa3d97b584d26.zip', '第1个版本', '1', '1575862901', '0', '1575864587');
|
||||
INSERT INTO `tao_version` VALUES ('2', '1.1.2', '/storage/version/20191215/832e150dfbc0e88e04a408e475bce8bb.zip', '第2个版本', '1', '1575862901', '0', '1575864587');
|
||||
INSERT INTO `tao_version` VALUES ('3', '1.1.3', '/storage/version/20191215/9ff1153045f1ad1e26c74aad148bdde3.zip', '第3个版本', '1', '1575862901', '1575862901', '1575864587');
|
||||
INSERT INTO `tao_version` VALUES ('4', '1.1.4', '/storage/version/20191209/1fae8a15fcd41181490a0c02e0218ef1.zip', '第四个版本', '1', '1575864450', '1575864587', '1575864587');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_webconfig
|
||||
-- ----------------------------
|
||||
|
33
app/middleware/AdminLoginCookie.php
Normal file
33
app/middleware/AdminLoginCookie.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace app\middleware;
|
||||
use think\facade\Session;
|
||||
use think\facade\Cookie;
|
||||
use think\facade\Db;
|
||||
use think\facade\Config;
|
||||
|
||||
class AdminLoginCookie
|
||||
{
|
||||
public function handle($request, \Closure $next)
|
||||
{
|
||||
//登陆前获取加密的Cookie
|
||||
$cooAuth = Cookie::get('adminAuth');
|
||||
if(!empty($cooAuth)){
|
||||
$resArr = explode(':',$cooAuth);
|
||||
$userId = end($resArr);
|
||||
//检验用户
|
||||
$user = Db::name('admin')->where('id',$userId)->find();
|
||||
if(!is_null($user)){
|
||||
//验证cookie
|
||||
$salt = Config::get('taoler.salt');
|
||||
$auth = md5($user['username'].$salt).":".$userId;
|
||||
if($auth==$cooAuth){
|
||||
Session::set('admin_name',$user['username']);
|
||||
Session::set('admin_id',$userId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@ class Auth
|
||||
}
|
||||
|
||||
// 排除公共权限
|
||||
$not_check = ['admin/login/index','admin/index/index','admin/index/home','admin/Set/info','admin/Set/password','admin/Admin/logout','admin/captcha'];
|
||||
$not_check = ['admin/','admin/login/index','admin/index/index','admin/index/home','admin/Admin/info','admin/Admin/repass','admin/Admin/logout','admin/captcha'];
|
||||
|
||||
if (!in_array($path, $not_check)) {
|
||||
$auth = new UserAuth();
|
||||
@ -39,8 +39,6 @@ class Auth
|
||||
|
||||
if (!$auth->check($path, $admin_id) && $admin_id != 1) {
|
||||
return view('public/auth');
|
||||
//return json(['status'=>-1,'msg'=>'没有权限!']);
|
||||
//return response("<script> alert('没有权限!'); </script>");
|
||||
}
|
||||
}
|
||||
return $next($request);
|
||||
|
@ -25,7 +25,8 @@
|
||||
"topthink/think-captcha": "^3.0",
|
||||
"phpmailer/phpmailer": "^6.1",
|
||||
"zzstudio/think-addons": "^2.0",
|
||||
"firebase/php-jwt": "^5.2"
|
||||
"firebase/php-jwt": "^5.2",
|
||||
"lotofbadcode/phpspirit_databackup": "^1.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/var-dumper": "^4.2",
|
||||
|
249
composer.lock
generated
249
composer.lock
generated
@ -4,8 +4,68 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "670826f4ed6fc63b8b224456dd1826d9",
|
||||
"content-hash": "f4ac487289cab0dba8660f5759f64a21",
|
||||
"packages": [
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"version": "v5.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/php-jwt.git",
|
||||
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb",
|
||||
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": ">=4.8 <=9"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Firebase\\JWT\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Neuman Vong",
|
||||
"email": "neuman+pear@twilio.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Anant Narayanan",
|
||||
"email": "anant@php.net",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
|
||||
"homepage": "https://github.com/firebase/php-jwt",
|
||||
"keywords": [
|
||||
"jwt",
|
||||
"php"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/firebase/php-jwt/issues",
|
||||
"source": "https://github.com/firebase/php-jwt/tree/master"
|
||||
},
|
||||
"time": "2020-03-25T18:49:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.1.3",
|
||||
@ -166,16 +226,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.5.1",
|
||||
"version": "1.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa"
|
||||
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa",
|
||||
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
|
||||
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -189,8 +249,9 @@
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.36",
|
||||
"phpunit/phpunit": "^8.5.8"
|
||||
"friendsofphp/php-cs-fixer": "^2.18",
|
||||
"phpstan/phpstan": "^0.12.68",
|
||||
"phpunit/phpunit": "^8.5.8 || ^9.3"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@ -211,7 +272,7 @@
|
||||
"description": "Mime-type detection for Flysystem",
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.5.1"
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -223,20 +284,70 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-18T11:50:25+00:00"
|
||||
"time": "2021-01-18T20:58:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.1.7",
|
||||
"name": "lotofbadcode/phpspirit_databackup",
|
||||
"version": "v1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
|
||||
"url": "https://github.com/lotofbadcode/phpspirit_databackup.git",
|
||||
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
|
||||
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
|
||||
"url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/2627b2e4206031731c94c8d637fb06b3b96e8860",
|
||||
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"phpspirit\\databackup\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "代码庸医",
|
||||
"email": "3359964266@qq.com"
|
||||
}
|
||||
],
|
||||
"description": "一个PHP数据库备份恢复的插件",
|
||||
"keywords": [
|
||||
"library",
|
||||
"php"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/lotofbadcode/phpspirit_databackup/issues",
|
||||
"source": "https://github.com/lotofbadcode/phpspirit_databackup/tree/v1.1"
|
||||
},
|
||||
"time": "2020-10-18T08:14:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "e38888a75c070304ca5514197d4847a59a5c853f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f",
|
||||
"reference": "e38888a75c070304ca5514197d4847a59a5c853f",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -248,12 +359,16 @@
|
||||
"require": {
|
||||
"ext-ctype": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"doctrine/annotations": "^1.2",
|
||||
"friendsofphp/php-cs-fixer": "^2.2",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7"
|
||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"squizlabs/php_codesniffer": "^3.5.6",
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
@ -293,15 +408,15 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/synchro",
|
||||
"url": "https://github.com/Synchro",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-14T18:50:27+00:00"
|
||||
"time": "2020-11-25T15:24:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@ -591,16 +706,16 @@
|
||||
},
|
||||
{
|
||||
"name": "topthink/framework",
|
||||
"version": "v6.0.5",
|
||||
"version": "v6.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/framework.git",
|
||||
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc"
|
||||
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/framework/zipball/85625d984f5c96699dc27d384869f206c3aec1cc",
|
||||
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc",
|
||||
"url": "https://api.github.com/repos/top-think/framework/zipball/db8fe22520a9660dd5e4c87e304034ac49e39270",
|
||||
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -656,9 +771,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/framework/issues",
|
||||
"source": "https://github.com/top-think/framework/tree/v6.0.5"
|
||||
"source": "https://github.com/top-think/framework/tree/v6.0.7"
|
||||
},
|
||||
"time": "2020-10-26T07:18:00+00:00"
|
||||
"time": "2021-01-25T14:48:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-captcha",
|
||||
@ -824,16 +939,16 @@
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-orm",
|
||||
"version": "v2.0.34",
|
||||
"version": "v2.0.36",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/think-orm.git",
|
||||
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629"
|
||||
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/think-orm/zipball/57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
|
||||
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
|
||||
"url": "https://api.github.com/repos/top-think/think-orm/zipball/f48dc09050f25029d41a66bfc9c3c403e4f82024",
|
||||
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -873,22 +988,22 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/think-orm/issues",
|
||||
"source": "https://github.com/top-think/think-orm/tree/v2.0.34"
|
||||
"source": "https://github.com/top-think/think-orm/tree/v2.0.36"
|
||||
},
|
||||
"time": "2020-09-28T08:24:57+00:00"
|
||||
"time": "2021-01-12T09:08:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-template",
|
||||
"version": "v2.0.7",
|
||||
"version": "v2.0.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/think-template.git",
|
||||
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19"
|
||||
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/think-template/zipball/e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
|
||||
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
|
||||
"url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368",
|
||||
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -920,9 +1035,9 @@
|
||||
"description": "the php template engine",
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/think-template/issues",
|
||||
"source": "https://github.com/top-think/think-template/tree/v2.0.7"
|
||||
"source": "https://github.com/top-think/think-template/tree/v2.0.8"
|
||||
},
|
||||
"time": "2019-09-20T15:31:04+00:00"
|
||||
"time": "2020-12-10T07:52:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-view",
|
||||
@ -1037,16 +1152,16 @@
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1064,7 +1179,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -1103,7 +1218,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1119,20 +1234,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1147,7 +1262,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -1185,7 +1300,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1201,20 +1316,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1229,7 +1344,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -1274,7 +1389,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1290,20 +1405,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v4.4.16",
|
||||
"version": "v4.4.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "3718e18b68d955348ad860e505991802c09f5f73"
|
||||
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3718e18b68d955348ad860e505991802c09f5f73",
|
||||
"reference": "3718e18b68d955348ad860e505991802c09f5f73",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
|
||||
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1326,7 +1441,7 @@
|
||||
"ext-iconv": "*",
|
||||
"symfony/console": "^3.4|^4.0|^5.0",
|
||||
"symfony/process": "^4.4|^5.0",
|
||||
"twig/twig": "^1.34|^2.4|^3.0"
|
||||
"twig/twig": "^1.43|^2.13|^3.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
|
||||
@ -1362,14 +1477,14 @@
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony mechanism for exploring and dumping PHP variables",
|
||||
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"dump"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v4.4.16"
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v4.4.19"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1385,7 +1500,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-26T20:47:51+00:00"
|
||||
"time": "2021-01-27T09:09:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-trace",
|
||||
|
@ -33,7 +33,7 @@ return [
|
||||
// 错误显示信息,非调试模式有效
|
||||
'error_message' => '页面错误!请稍后再试~',
|
||||
// 显示错误信息
|
||||
'show_error_msg' => true,
|
||||
'show_error_msg' => false,
|
||||
//异常页面模板
|
||||
'http_exception_template' => [
|
||||
404 => '../view/404.html',
|
||||
|
@ -5,6 +5,6 @@
|
||||
|
||||
return [
|
||||
//版本配置
|
||||
'version' => '1.6.5',
|
||||
'version' => '1.6.6',
|
||||
'salt' => 'taoler'
|
||||
];
|
92
vendor/composer/InstalledVersions.php
vendored
92
vendor/composer/InstalledVersions.php
vendored
@ -20,10 +20,19 @@ private static $installed = array (
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => 'topthink/think',
|
||||
'name' => 'taoser/taoler',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'firebase/php-jwt' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.2.0',
|
||||
'version' => '5.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'feb0e820b8436873675fd3aca04f3728eb2185cb',
|
||||
),
|
||||
'league/flysystem' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.3',
|
||||
@ -44,21 +53,30 @@ private static $installed = array (
|
||||
),
|
||||
'league/mime-type-detection' =>
|
||||
array (
|
||||
'pretty_version' => '1.5.1',
|
||||
'version' => '1.5.1.0',
|
||||
'pretty_version' => '1.7.0',
|
||||
'version' => '1.7.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa',
|
||||
'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3',
|
||||
),
|
||||
'lotofbadcode/phpspirit_databackup' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.1',
|
||||
'version' => '1.1.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2627b2e4206031731c94c8d637fb06b3b96e8860',
|
||||
),
|
||||
'phpmailer/phpmailer' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.1.7',
|
||||
'version' => '6.1.7.0',
|
||||
'pretty_version' => 'v6.2.0',
|
||||
'version' => '6.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
|
||||
'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f',
|
||||
),
|
||||
'psr/cache' =>
|
||||
array (
|
||||
@ -98,39 +116,48 @@ private static $installed = array (
|
||||
),
|
||||
'symfony/polyfill-mbstring' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
|
||||
'reference' => 'f377a3dd1fde44d37b9831d68dc8dea3ffd28e13',
|
||||
),
|
||||
'symfony/polyfill-php72' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930',
|
||||
'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9',
|
||||
),
|
||||
'symfony/polyfill-php80' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de',
|
||||
'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91',
|
||||
),
|
||||
'symfony/var-dumper' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.4.16',
|
||||
'version' => '4.4.16.0',
|
||||
'pretty_version' => 'v4.4.19',
|
||||
'version' => '4.4.19.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3718e18b68d955348ad860e505991802c09f5f73',
|
||||
'reference' => 'a1eab2f69906dc83c5ddba4632180260d0ab4f7f',
|
||||
),
|
||||
'taoser/taoler' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'taoser/think-auth' =>
|
||||
array (
|
||||
@ -143,21 +170,12 @@ private static $installed = array (
|
||||
),
|
||||
'topthink/framework' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.0.5',
|
||||
'version' => '6.0.5.0',
|
||||
'pretty_version' => 'v6.0.7',
|
||||
'version' => '6.0.7.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '85625d984f5c96699dc27d384869f206c3aec1cc',
|
||||
),
|
||||
'topthink/think' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'reference' => 'db8fe22520a9660dd5e4c87e304034ac49e39270',
|
||||
),
|
||||
'topthink/think-captcha' =>
|
||||
array (
|
||||
@ -188,21 +206,21 @@ private static $installed = array (
|
||||
),
|
||||
'topthink/think-orm' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.0.34',
|
||||
'version' => '2.0.34.0',
|
||||
'pretty_version' => 'v2.0.36',
|
||||
'version' => '2.0.36.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629',
|
||||
'reference' => 'f48dc09050f25029d41a66bfc9c3c403e4f82024',
|
||||
),
|
||||
'topthink/think-template' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.0.7',
|
||||
'version' => '2.0.7.0',
|
||||
'pretty_version' => 'v2.0.8',
|
||||
'version' => '2.0.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e98bdbb4a4c94b442f17dfceba81e0134d4fbd19',
|
||||
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
|
||||
),
|
||||
'topthink/think-trace' =>
|
||||
array (
|
||||
|
2
vendor/composer/autoload_psr4.php
vendored
2
vendor/composer/autoload_psr4.php
vendored
@ -12,6 +12,7 @@ return array(
|
||||
'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
|
||||
'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/zzstudio/think-addons/src'),
|
||||
'taoser\\think\\' => array($vendorDir . '/taoser/think-auth/src'),
|
||||
'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'),
|
||||
'app\\' => array($baseDir . '/app'),
|
||||
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
|
||||
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
|
||||
@ -25,4 +26,5 @@ return array(
|
||||
'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'),
|
||||
'League\\Flysystem\\Cached\\' => array($vendorDir . '/league/flysystem-cached-adapter/src'),
|
||||
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
|
||||
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
|
||||
);
|
||||
|
16
vendor/composer/autoload_static.php
vendored
16
vendor/composer/autoload_static.php
vendored
@ -26,6 +26,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
|
||||
'think\\' => 6,
|
||||
'taoser\\think\\' => 13,
|
||||
),
|
||||
'p' =>
|
||||
array (
|
||||
'phpspirit\\databackup\\' => 21,
|
||||
),
|
||||
'a' =>
|
||||
array (
|
||||
'app\\' => 4,
|
||||
@ -51,6 +55,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
|
||||
'League\\Flysystem\\Cached\\' => 24,
|
||||
'League\\Flysystem\\' => 17,
|
||||
),
|
||||
'F' =>
|
||||
array (
|
||||
'Firebase\\JWT\\' => 13,
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
@ -82,6 +90,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/taoser/think-auth/src',
|
||||
),
|
||||
'phpspirit\\databackup\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/lotofbadcode/phpspirit_databackup/src',
|
||||
),
|
||||
'app\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/../..' . '/app',
|
||||
@ -134,6 +146,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/league/flysystem/src',
|
||||
),
|
||||
'Firebase\\JWT\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
|
||||
),
|
||||
);
|
||||
|
||||
public static $fallbackDirsPsr0 = array (
|
||||
|
275
vendor/composer/installed.json
vendored
275
vendor/composer/installed.json
vendored
@ -1,5 +1,68 @@
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"version": "v5.2.0",
|
||||
"version_normalized": "5.2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/php-jwt.git",
|
||||
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb",
|
||||
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": ">=4.8 <=9"
|
||||
},
|
||||
"time": "2020-03-25T18:49:23+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Firebase\\JWT\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Neuman Vong",
|
||||
"email": "neuman+pear@twilio.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Anant Narayanan",
|
||||
"email": "anant@php.net",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
|
||||
"homepage": "https://github.com/firebase/php-jwt",
|
||||
"keywords": [
|
||||
"jwt",
|
||||
"php"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/firebase/php-jwt/issues",
|
||||
"source": "https://github.com/firebase/php-jwt/tree/master"
|
||||
},
|
||||
"install-path": "../firebase/php-jwt"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.1.3",
|
||||
@ -152,17 +215,17 @@
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.5.1",
|
||||
"version_normalized": "1.5.1.0",
|
||||
"version": "1.7.0",
|
||||
"version_normalized": "1.7.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa"
|
||||
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa",
|
||||
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
|
||||
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -176,10 +239,11 @@
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.36",
|
||||
"phpunit/phpunit": "^8.5.8"
|
||||
"friendsofphp/php-cs-fixer": "^2.18",
|
||||
"phpstan/phpstan": "^0.12.68",
|
||||
"phpunit/phpunit": "^8.5.8 || ^9.3"
|
||||
},
|
||||
"time": "2020-10-18T11:50:25+00:00",
|
||||
"time": "2021-01-18T20:58:21+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -200,7 +264,7 @@
|
||||
"description": "Mime-type detection for Flysystem",
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.5.1"
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -215,18 +279,71 @@
|
||||
"install-path": "../league/mime-type-detection"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.1.7",
|
||||
"version_normalized": "6.1.7.0",
|
||||
"name": "lotofbadcode/phpspirit_databackup",
|
||||
"version": "v1.1",
|
||||
"version_normalized": "1.1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
|
||||
"url": "https://github.com/lotofbadcode/phpspirit_databackup.git",
|
||||
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
|
||||
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
|
||||
"url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/2627b2e4206031731c94c8d637fb06b3b96e8860",
|
||||
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"time": "2020-10-18T08:14:55+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"phpspirit\\databackup\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "代码庸医",
|
||||
"email": "3359964266@qq.com"
|
||||
}
|
||||
],
|
||||
"description": "一个PHP数据库备份恢复的插件",
|
||||
"keywords": [
|
||||
"library",
|
||||
"php"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/lotofbadcode/phpspirit_databackup/issues",
|
||||
"source": "https://github.com/lotofbadcode/phpspirit_databackup/tree/v1.1"
|
||||
},
|
||||
"install-path": "../lotofbadcode/phpspirit_databackup"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.2.0",
|
||||
"version_normalized": "6.2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "e38888a75c070304ca5514197d4847a59a5c853f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f",
|
||||
"reference": "e38888a75c070304ca5514197d4847a59a5c853f",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -238,12 +355,16 @@
|
||||
"require": {
|
||||
"ext-ctype": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"doctrine/annotations": "^1.2",
|
||||
"friendsofphp/php-cs-fixer": "^2.2",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7"
|
||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"squizlabs/php_codesniffer": "^3.5.6",
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
@ -253,7 +374,7 @@
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||
},
|
||||
"time": "2020-07-14T18:50:27+00:00",
|
||||
"time": "2020-11-25T15:24:57+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -285,11 +406,11 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/synchro",
|
||||
"url": "https://github.com/Synchro",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
@ -523,17 +644,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.20.0",
|
||||
"version_normalized": "1.20.0.0",
|
||||
"version": "v1.22.0",
|
||||
"version_normalized": "1.22.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -548,11 +669,11 @@
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"time": "2020-10-23T14:02:19+00:00",
|
||||
"time": "2021-01-07T16:49:33+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -592,7 +713,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -612,17 +733,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.20.0",
|
||||
"version_normalized": "1.20.0.0",
|
||||
"version": "v1.22.0",
|
||||
"version_normalized": "1.22.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -634,11 +755,11 @@
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"time": "2020-10-23T14:02:19+00:00",
|
||||
"time": "2021-01-07T16:49:33+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -677,7 +798,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -697,17 +818,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.20.0",
|
||||
"version_normalized": "1.20.0.0",
|
||||
"version": "v1.22.0",
|
||||
"version_normalized": "1.22.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -719,11 +840,11 @@
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"time": "2020-10-23T14:02:19+00:00",
|
||||
"time": "2021-01-07T16:49:33+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@ -769,7 +890,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -789,17 +910,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v4.4.16",
|
||||
"version_normalized": "4.4.16.0",
|
||||
"version": "v4.4.19",
|
||||
"version_normalized": "4.4.19.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "3718e18b68d955348ad860e505991802c09f5f73"
|
||||
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3718e18b68d955348ad860e505991802c09f5f73",
|
||||
"reference": "3718e18b68d955348ad860e505991802c09f5f73",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
|
||||
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -822,14 +943,14 @@
|
||||
"ext-iconv": "*",
|
||||
"symfony/console": "^3.4|^4.0|^5.0",
|
||||
"symfony/process": "^4.4|^5.0",
|
||||
"twig/twig": "^1.34|^2.4|^3.0"
|
||||
"twig/twig": "^1.43|^2.13|^3.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
|
||||
"ext-intl": "To show region name in time zone dump",
|
||||
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
|
||||
},
|
||||
"time": "2020-10-26T20:47:51+00:00",
|
||||
"time": "2021-01-27T09:09:26+00:00",
|
||||
"bin": [
|
||||
"Resources/bin/var-dump-server"
|
||||
],
|
||||
@ -860,14 +981,14 @@
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony mechanism for exploring and dumping PHP variables",
|
||||
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"dump"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v4.4.16"
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v4.4.19"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -945,17 +1066,17 @@
|
||||
},
|
||||
{
|
||||
"name": "topthink/framework",
|
||||
"version": "v6.0.5",
|
||||
"version_normalized": "6.0.5.0",
|
||||
"version": "v6.0.7",
|
||||
"version_normalized": "6.0.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/framework.git",
|
||||
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc"
|
||||
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/framework/zipball/85625d984f5c96699dc27d384869f206c3aec1cc",
|
||||
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc",
|
||||
"url": "https://api.github.com/repos/top-think/framework/zipball/db8fe22520a9660dd5e4c87e304034ac49e39270",
|
||||
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -981,7 +1102,7 @@
|
||||
"mockery/mockery": "^1.2",
|
||||
"phpunit/phpunit": "^7.0"
|
||||
},
|
||||
"time": "2020-10-26T07:18:00+00:00",
|
||||
"time": "2021-01-25T14:48:29+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1013,7 +1134,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/framework/issues",
|
||||
"source": "https://github.com/top-think/framework/tree/v6.0.5"
|
||||
"source": "https://github.com/top-think/framework/tree/v6.0.7"
|
||||
},
|
||||
"install-path": "../topthink/framework"
|
||||
},
|
||||
@ -1178,17 +1299,17 @@
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-orm",
|
||||
"version": "v2.0.34",
|
||||
"version_normalized": "2.0.34.0",
|
||||
"version": "v2.0.36",
|
||||
"version_normalized": "2.0.36.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/think-orm.git",
|
||||
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629"
|
||||
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/think-orm/zipball/57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
|
||||
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
|
||||
"url": "https://api.github.com/repos/top-think/think-orm/zipball/f48dc09050f25029d41a66bfc9c3c403e4f82024",
|
||||
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1204,7 +1325,7 @@
|
||||
"psr/simple-cache": "^1.0",
|
||||
"topthink/think-helper": "^3.1"
|
||||
},
|
||||
"time": "2020-09-28T08:24:57+00:00",
|
||||
"time": "2021-01-12T09:08:52+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1228,21 +1349,25 @@
|
||||
"database",
|
||||
"orm"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/think-orm/issues",
|
||||
"source": "https://github.com/top-think/think-orm/tree/v2.0.36"
|
||||
},
|
||||
"install-path": "../topthink/think-orm"
|
||||
},
|
||||
{
|
||||
"name": "topthink/think-template",
|
||||
"version": "v2.0.7",
|
||||
"version_normalized": "2.0.7.0",
|
||||
"version": "v2.0.8",
|
||||
"version_normalized": "2.0.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/top-think/think-template.git",
|
||||
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19"
|
||||
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/top-think/think-template/zipball/e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
|
||||
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
|
||||
"url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368",
|
||||
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -1255,7 +1380,7 @@
|
||||
"php": ">=7.1.0",
|
||||
"psr/simple-cache": "^1.0"
|
||||
},
|
||||
"time": "2019-09-20T15:31:04+00:00",
|
||||
"time": "2020-12-10T07:52:03+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1274,6 +1399,10 @@
|
||||
}
|
||||
],
|
||||
"description": "the php template engine",
|
||||
"support": {
|
||||
"issues": "https://github.com/top-think/think-template/issues",
|
||||
"source": "https://github.com/top-think/think-template/tree/v2.0.8"
|
||||
},
|
||||
"install-path": "../topthink/think-template"
|
||||
},
|
||||
{
|
||||
|
92
vendor/composer/installed.php
vendored
92
vendor/composer/installed.php
vendored
@ -7,10 +7,19 @@
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => 'topthink/think',
|
||||
'name' => 'taoser/taoler',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'firebase/php-jwt' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.2.0',
|
||||
'version' => '5.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'feb0e820b8436873675fd3aca04f3728eb2185cb',
|
||||
),
|
||||
'league/flysystem' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.3',
|
||||
@ -31,21 +40,30 @@
|
||||
),
|
||||
'league/mime-type-detection' =>
|
||||
array (
|
||||
'pretty_version' => '1.5.1',
|
||||
'version' => '1.5.1.0',
|
||||
'pretty_version' => '1.7.0',
|
||||
'version' => '1.7.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa',
|
||||
'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3',
|
||||
),
|
||||
'lotofbadcode/phpspirit_databackup' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.1',
|
||||
'version' => '1.1.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2627b2e4206031731c94c8d637fb06b3b96e8860',
|
||||
),
|
||||
'phpmailer/phpmailer' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.1.7',
|
||||
'version' => '6.1.7.0',
|
||||
'pretty_version' => 'v6.2.0',
|
||||
'version' => '6.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
|
||||
'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f',
|
||||
),
|
||||
'psr/cache' =>
|
||||
array (
|
||||
@ -85,39 +103,48 @@
|
||||
),
|
||||
'symfony/polyfill-mbstring' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
|
||||
'reference' => 'f377a3dd1fde44d37b9831d68dc8dea3ffd28e13',
|
||||
),
|
||||
'symfony/polyfill-php72' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930',
|
||||
'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9',
|
||||
),
|
||||
'symfony/polyfill-php80' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.20.0',
|
||||
'version' => '1.20.0.0',
|
||||
'pretty_version' => 'v1.22.0',
|
||||
'version' => '1.22.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de',
|
||||
'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91',
|
||||
),
|
||||
'symfony/var-dumper' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.4.16',
|
||||
'version' => '4.4.16.0',
|
||||
'pretty_version' => 'v4.4.19',
|
||||
'version' => '4.4.19.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3718e18b68d955348ad860e505991802c09f5f73',
|
||||
'reference' => 'a1eab2f69906dc83c5ddba4632180260d0ab4f7f',
|
||||
),
|
||||
'taoser/taoler' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'taoser/think-auth' =>
|
||||
array (
|
||||
@ -130,21 +157,12 @@
|
||||
),
|
||||
'topthink/framework' =>
|
||||
array (
|
||||
'pretty_version' => 'v6.0.5',
|
||||
'version' => '6.0.5.0',
|
||||
'pretty_version' => 'v6.0.7',
|
||||
'version' => '6.0.7.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '85625d984f5c96699dc27d384869f206c3aec1cc',
|
||||
),
|
||||
'topthink/think' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'reference' => 'db8fe22520a9660dd5e4c87e304034ac49e39270',
|
||||
),
|
||||
'topthink/think-captcha' =>
|
||||
array (
|
||||
@ -175,21 +193,21 @@
|
||||
),
|
||||
'topthink/think-orm' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.0.34',
|
||||
'version' => '2.0.34.0',
|
||||
'pretty_version' => 'v2.0.36',
|
||||
'version' => '2.0.36.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629',
|
||||
'reference' => 'f48dc09050f25029d41a66bfc9c3c403e4f82024',
|
||||
),
|
||||
'topthink/think-template' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.0.7',
|
||||
'version' => '2.0.7.0',
|
||||
'pretty_version' => 'v2.0.8',
|
||||
'version' => '2.0.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e98bdbb4a4c94b442f17dfceba81e0134d4fbd19',
|
||||
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
|
||||
),
|
||||
'topthink/think-trace' =>
|
||||
array (
|
||||
|
1
vendor/composer/platform_check.php
vendored
1
vendor/composer/platform_check.php
vendored
@ -12,6 +12,7 @@ $missingExtensions = array();
|
||||
extension_loaded('ctype') || $missingExtensions[] = 'ctype';
|
||||
extension_loaded('fileinfo') || $missingExtensions[] = 'fileinfo';
|
||||
extension_loaded('filter') || $missingExtensions[] = 'filter';
|
||||
extension_loaded('hash') || $missingExtensions[] = 'hash';
|
||||
extension_loaded('json') || $missingExtensions[] = 'json';
|
||||
extension_loaded('mbstring') || $missingExtensions[] = 'mbstring';
|
||||
|
||||
|
30
vendor/firebase/php-jwt/LICENSE
vendored
Normal file
30
vendor/firebase/php-jwt/LICENSE
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
Copyright (c) 2011, Neuman Vong
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of Neuman Vong nor the names of other
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
200
vendor/firebase/php-jwt/README.md
vendored
Normal file
200
vendor/firebase/php-jwt/README.md
vendored
Normal file
@ -0,0 +1,200 @@
|
||||
[](https://travis-ci.org/firebase/php-jwt)
|
||||
[](https://packagist.org/packages/firebase/php-jwt)
|
||||
[](https://packagist.org/packages/firebase/php-jwt)
|
||||
[](https://packagist.org/packages/firebase/php-jwt)
|
||||
|
||||
PHP-JWT
|
||||
=======
|
||||
A simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Use composer to manage your dependencies and download PHP-JWT:
|
||||
|
||||
```bash
|
||||
composer require firebase/php-jwt
|
||||
```
|
||||
|
||||
Example
|
||||
-------
|
||||
```php
|
||||
<?php
|
||||
use \Firebase\JWT\JWT;
|
||||
|
||||
$key = "example_key";
|
||||
$payload = array(
|
||||
"iss" => "http://example.org",
|
||||
"aud" => "http://example.com",
|
||||
"iat" => 1356999524,
|
||||
"nbf" => 1357000000
|
||||
);
|
||||
|
||||
/**
|
||||
* IMPORTANT:
|
||||
* You must specify supported algorithms for your application. See
|
||||
* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
|
||||
* for a list of spec-compliant algorithms.
|
||||
*/
|
||||
$jwt = JWT::encode($payload, $key);
|
||||
$decoded = JWT::decode($jwt, $key, array('HS256'));
|
||||
|
||||
print_r($decoded);
|
||||
|
||||
/*
|
||||
NOTE: This will now be an object instead of an associative array. To get
|
||||
an associative array, you will need to cast it as such:
|
||||
*/
|
||||
|
||||
$decoded_array = (array) $decoded;
|
||||
|
||||
/**
|
||||
* You can add a leeway to account for when there is a clock skew times between
|
||||
* the signing and verifying servers. It is recommended that this leeway should
|
||||
* not be bigger than a few minutes.
|
||||
*
|
||||
* Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
|
||||
*/
|
||||
JWT::$leeway = 60; // $leeway in seconds
|
||||
$decoded = JWT::decode($jwt, $key, array('HS256'));
|
||||
|
||||
?>
|
||||
```
|
||||
Example with RS256 (openssl)
|
||||
----------------------------
|
||||
```php
|
||||
<?php
|
||||
use \Firebase\JWT\JWT;
|
||||
|
||||
$privateKey = <<<EOD
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn
|
||||
vuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t0tyazyZ8JXw+KgXTxldMPEL9
|
||||
5+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB
|
||||
AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz
|
||||
bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg+6wGyd/LrGVEB+Xre0J
|
||||
Nil0GReM2AHDNZUYRv+HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1
|
||||
cP59UHiHjPZYC0loEsk7s+hUmT3QHerAQJMZWC11Qrn2N+ybwwNblDKv+s5qgMQ5
|
||||
5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck
|
||||
ZkcvY3SK2iRIL4c9yY6hlIhs+K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe
|
||||
k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb
|
||||
qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k
|
||||
eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH+N2LtujCdkQZjXAsGdm
|
||||
B2zNzvrlgRmgBrklMTrMYgm1NPcW+bRLGcwgW2PTvNM=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
EOD;
|
||||
|
||||
$publicKey = <<<EOD
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H
|
||||
4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t
|
||||
0tyazyZ8JXw+KgXTxldMPEL95+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4
|
||||
ehde/zUxo6UvS7UrBQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
EOD;
|
||||
|
||||
$payload = array(
|
||||
"iss" => "example.org",
|
||||
"aud" => "example.com",
|
||||
"iat" => 1356999524,
|
||||
"nbf" => 1357000000
|
||||
);
|
||||
|
||||
$jwt = JWT::encode($payload, $privateKey, 'RS256');
|
||||
echo "Encode:\n" . print_r($jwt, true) . "\n";
|
||||
|
||||
$decoded = JWT::decode($jwt, $publicKey, array('RS256'));
|
||||
|
||||
/*
|
||||
NOTE: This will now be an object instead of an associative array. To get
|
||||
an associative array, you will need to cast it as such:
|
||||
*/
|
||||
|
||||
$decoded_array = (array) $decoded;
|
||||
echo "Decode:\n" . print_r($decoded_array, true) . "\n";
|
||||
?>
|
||||
```
|
||||
|
||||
Changelog
|
||||
---------
|
||||
|
||||
#### 5.0.0 / 2017-06-26
|
||||
- Support RS384 and RS512.
|
||||
See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!
|
||||
- Add an example for RS256 openssl.
|
||||
See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!
|
||||
- Detect invalid Base64 encoding in signature.
|
||||
See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!
|
||||
- Update `JWT::verify` to handle OpenSSL errors.
|
||||
See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!
|
||||
- Add `array` type hinting to `decode` method
|
||||
See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!
|
||||
- Add all JSON error types.
|
||||
See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!
|
||||
- Bugfix 'kid' not in given key list.
|
||||
See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!
|
||||
- Miscellaneous cleanup, documentation and test fixes.
|
||||
See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),
|
||||
[#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and
|
||||
[#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),
|
||||
[@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!
|
||||
|
||||
#### 4.0.0 / 2016-07-17
|
||||
- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!
|
||||
- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!
|
||||
- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!
|
||||
- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!
|
||||
|
||||
#### 3.0.0 / 2015-07-22
|
||||
- Minimum PHP version updated from `5.2.0` to `5.3.0`.
|
||||
- Add `\Firebase\JWT` namespace. See
|
||||
[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to
|
||||
[@Dashron](https://github.com/Dashron)!
|
||||
- Require a non-empty key to decode and verify a JWT. See
|
||||
[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to
|
||||
[@sjones608](https://github.com/sjones608)!
|
||||
- Cleaner documentation blocks in the code. See
|
||||
[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to
|
||||
[@johanderuijter](https://github.com/johanderuijter)!
|
||||
|
||||
#### 2.2.0 / 2015-06-22
|
||||
- Add support for adding custom, optional JWT headers to `JWT::encode()`. See
|
||||
[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to
|
||||
[@mcocaro](https://github.com/mcocaro)!
|
||||
|
||||
#### 2.1.0 / 2015-05-20
|
||||
- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew
|
||||
between signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!
|
||||
- Add support for passing an object implementing the `ArrayAccess` interface for
|
||||
`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!
|
||||
|
||||
#### 2.0.0 / 2015-04-01
|
||||
- **Note**: It is strongly recommended that you update to > v2.0.0 to address
|
||||
known security vulnerabilities in prior versions when both symmetric and
|
||||
asymmetric keys are used together.
|
||||
- Update signature for `JWT::decode(...)` to require an array of supported
|
||||
algorithms to use when verifying token signatures.
|
||||
|
||||
|
||||
Tests
|
||||
-----
|
||||
Run the tests using phpunit:
|
||||
|
||||
```bash
|
||||
$ pear install PHPUnit
|
||||
$ phpunit --configuration phpunit.xml.dist
|
||||
PHPUnit 3.7.10 by Sebastian Bergmann.
|
||||
.....
|
||||
Time: 0 seconds, Memory: 2.50Mb
|
||||
OK (5 tests, 5 assertions)
|
||||
```
|
||||
|
||||
New Lines in private keys
|
||||
-----
|
||||
|
||||
If your private key contains `\n` characters, be sure to wrap it in double quotes `""`
|
||||
and not single quotes `''` in order to properly interpret the escaped characters.
|
||||
|
||||
License
|
||||
-------
|
||||
[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).
|
33
vendor/firebase/php-jwt/composer.json
vendored
Normal file
33
vendor/firebase/php-jwt/composer.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
|
||||
"homepage": "https://github.com/firebase/php-jwt",
|
||||
"keywords": [
|
||||
"php",
|
||||
"jwt"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Neuman Vong",
|
||||
"email": "neuman+pear@twilio.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Anant Narayanan",
|
||||
"email": "anant@php.net",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"license": "BSD-3-Clause",
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Firebase\\JWT\\": "src"
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": ">=4.8 <=9"
|
||||
}
|
||||
}
|
6
vendor/firebase/php-jwt/src/BeforeValidException.php
vendored
Normal file
6
vendor/firebase/php-jwt/src/BeforeValidException.php
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
namespace Firebase\JWT;
|
||||
|
||||
class BeforeValidException extends \UnexpectedValueException
|
||||
{
|
||||
}
|
6
vendor/firebase/php-jwt/src/ExpiredException.php
vendored
Normal file
6
vendor/firebase/php-jwt/src/ExpiredException.php
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
namespace Firebase\JWT;
|
||||
|
||||
class ExpiredException extends \UnexpectedValueException
|
||||
{
|
||||
}
|
171
vendor/firebase/php-jwt/src/JWK.php
vendored
Normal file
171
vendor/firebase/php-jwt/src/JWK.php
vendored
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace Firebase\JWT;
|
||||
|
||||
use DomainException;
|
||||
use UnexpectedValueException;
|
||||
|
||||
/**
|
||||
* JSON Web Key implementation, based on this spec:
|
||||
* https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category Authentication
|
||||
* @package Authentication_JWT
|
||||
* @author Bui Sy Nguyen <nguyenbs@gmail.com>
|
||||
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
||||
* @link https://github.com/firebase/php-jwt
|
||||
*/
|
||||
class JWK
|
||||
{
|
||||
/**
|
||||
* Parse a set of JWK keys
|
||||
*
|
||||
* @param array $jwks The JSON Web Key Set as an associative array
|
||||
*
|
||||
* @return array An associative array that represents the set of keys
|
||||
*
|
||||
* @throws InvalidArgumentException Provided JWK Set is empty
|
||||
* @throws UnexpectedValueException Provided JWK Set was invalid
|
||||
* @throws DomainException OpenSSL failure
|
||||
*
|
||||
* @uses parseKey
|
||||
*/
|
||||
public static function parseKeySet(array $jwks)
|
||||
{
|
||||
$keys = array();
|
||||
|
||||
if (!isset($jwks['keys'])) {
|
||||
throw new UnexpectedValueException('"keys" member must exist in the JWK Set');
|
||||
}
|
||||
if (empty($jwks['keys'])) {
|
||||
throw new InvalidArgumentException('JWK Set did not contain any keys');
|
||||
}
|
||||
|
||||
foreach ($jwks['keys'] as $k => $v) {
|
||||
$kid = isset($v['kid']) ? $v['kid'] : $k;
|
||||
if ($key = self::parseKey($v)) {
|
||||
$keys[$kid] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 === \count($keys)) {
|
||||
throw new UnexpectedValueException('No supported algorithms found in JWK Set');
|
||||
}
|
||||
|
||||
return $keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a JWK key
|
||||
*
|
||||
* @param array $jwk An individual JWK
|
||||
*
|
||||
* @return resource|array An associative array that represents the key
|
||||
*
|
||||
* @throws InvalidArgumentException Provided JWK is empty
|
||||
* @throws UnexpectedValueException Provided JWK was invalid
|
||||
* @throws DomainException OpenSSL failure
|
||||
*
|
||||
* @uses createPemFromModulusAndExponent
|
||||
*/
|
||||
private static function parseKey(array $jwk)
|
||||
{
|
||||
if (empty($jwk)) {
|
||||
throw new InvalidArgumentException('JWK must not be empty');
|
||||
}
|
||||
if (!isset($jwk['kty'])) {
|
||||
throw new UnexpectedValueException('JWK must contain a "kty" parameter');
|
||||
}
|
||||
|
||||
switch ($jwk['kty']) {
|
||||
case 'RSA':
|
||||
if (\array_key_exists('d', $jwk)) {
|
||||
throw new UnexpectedValueException('RSA private keys are not supported');
|
||||
}
|
||||
if (!isset($jwk['n']) || !isset($jwk['e'])) {
|
||||
throw new UnexpectedValueException('RSA keys must contain values for both "n" and "e"');
|
||||
}
|
||||
|
||||
$pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);
|
||||
$publicKey = \openssl_pkey_get_public($pem);
|
||||
if (false === $publicKey) {
|
||||
throw new DomainException(
|
||||
'OpenSSL error: ' . \openssl_error_string()
|
||||
);
|
||||
}
|
||||
return $publicKey;
|
||||
default:
|
||||
// Currently only RSA is supported
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a public key represented in PEM format from RSA modulus and exponent information
|
||||
*
|
||||
* @param string $n The RSA modulus encoded in Base64
|
||||
* @param string $e The RSA exponent encoded in Base64
|
||||
*
|
||||
* @return string The RSA public key represented in PEM format
|
||||
*
|
||||
* @uses encodeLength
|
||||
*/
|
||||
private static function createPemFromModulusAndExponent($n, $e)
|
||||
{
|
||||
$modulus = JWT::urlsafeB64Decode($n);
|
||||
$publicExponent = JWT::urlsafeB64Decode($e);
|
||||
|
||||
$components = array(
|
||||
'modulus' => \pack('Ca*a*', 2, self::encodeLength(\strlen($modulus)), $modulus),
|
||||
'publicExponent' => \pack('Ca*a*', 2, self::encodeLength(\strlen($publicExponent)), $publicExponent)
|
||||
);
|
||||
|
||||
$rsaPublicKey = \pack(
|
||||
'Ca*a*a*',
|
||||
48,
|
||||
self::encodeLength(\strlen($components['modulus']) + \strlen($components['publicExponent'])),
|
||||
$components['modulus'],
|
||||
$components['publicExponent']
|
||||
);
|
||||
|
||||
// sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
|
||||
$rsaOID = \pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
|
||||
$rsaPublicKey = \chr(0) . $rsaPublicKey;
|
||||
$rsaPublicKey = \chr(3) . self::encodeLength(\strlen($rsaPublicKey)) . $rsaPublicKey;
|
||||
|
||||
$rsaPublicKey = \pack(
|
||||
'Ca*a*',
|
||||
48,
|
||||
self::encodeLength(\strlen($rsaOID . $rsaPublicKey)),
|
||||
$rsaOID . $rsaPublicKey
|
||||
);
|
||||
|
||||
$rsaPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
|
||||
\chunk_split(\base64_encode($rsaPublicKey), 64) .
|
||||
'-----END PUBLIC KEY-----';
|
||||
|
||||
return $rsaPublicKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* DER-encode the length
|
||||
*
|
||||
* DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
|
||||
* {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
|
||||
*
|
||||
* @param int $length
|
||||
* @return string
|
||||
*/
|
||||
private static function encodeLength($length)
|
||||
{
|
||||
if ($length <= 0x7F) {
|
||||
return \chr($length);
|
||||
}
|
||||
|
||||
$temp = \ltrim(\pack('N', $length), \chr(0));
|
||||
|
||||
return \pack('Ca*', 0x80 | \strlen($temp), $temp);
|
||||
}
|
||||
}
|
512
vendor/firebase/php-jwt/src/JWT.php
vendored
Normal file
512
vendor/firebase/php-jwt/src/JWT.php
vendored
Normal file
@ -0,0 +1,512 @@
|
||||
<?php
|
||||
|
||||
namespace Firebase\JWT;
|
||||
|
||||
use \DomainException;
|
||||
use \InvalidArgumentException;
|
||||
use \UnexpectedValueException;
|
||||
use \DateTime;
|
||||
|
||||
/**
|
||||
* JSON Web Token implementation, based on this spec:
|
||||
* https://tools.ietf.org/html/rfc7519
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category Authentication
|
||||
* @package Authentication_JWT
|
||||
* @author Neuman Vong <neuman@twilio.com>
|
||||
* @author Anant Narayanan <anant@php.net>
|
||||
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
||||
* @link https://github.com/firebase/php-jwt
|
||||
*/
|
||||
class JWT
|
||||
{
|
||||
const ASN1_INTEGER = 0x02;
|
||||
const ASN1_SEQUENCE = 0x10;
|
||||
const ASN1_BIT_STRING = 0x03;
|
||||
|
||||
/**
|
||||
* When checking nbf, iat or expiration times,
|
||||
* we want to provide some extra leeway time to
|
||||
* account for clock skew.
|
||||
*/
|
||||
public static $leeway = 0;
|
||||
|
||||
/**
|
||||
* Allow the current timestamp to be specified.
|
||||
* Useful for fixing a value within unit testing.
|
||||
*
|
||||
* Will default to PHP time() value if null.
|
||||
*/
|
||||
public static $timestamp = null;
|
||||
|
||||
public static $supported_algs = array(
|
||||
'ES256' => array('openssl', 'SHA256'),
|
||||
'HS256' => array('hash_hmac', 'SHA256'),
|
||||
'HS384' => array('hash_hmac', 'SHA384'),
|
||||
'HS512' => array('hash_hmac', 'SHA512'),
|
||||
'RS256' => array('openssl', 'SHA256'),
|
||||
'RS384' => array('openssl', 'SHA384'),
|
||||
'RS512' => array('openssl', 'SHA512'),
|
||||
);
|
||||
|
||||
/**
|
||||
* Decodes a JWT string into a PHP object.
|
||||
*
|
||||
* @param string $jwt The JWT
|
||||
* @param string|array|resource $key The key, or map of keys.
|
||||
* If the algorithm used is asymmetric, this is the public key
|
||||
* @param array $allowed_algs List of supported verification algorithms
|
||||
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
|
||||
*
|
||||
* @return object The JWT's payload as a PHP object
|
||||
*
|
||||
* @throws UnexpectedValueException Provided JWT was invalid
|
||||
* @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
|
||||
* @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
|
||||
* @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
|
||||
* @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
|
||||
*
|
||||
* @uses jsonDecode
|
||||
* @uses urlsafeB64Decode
|
||||
*/
|
||||
public static function decode($jwt, $key, array $allowed_algs = array())
|
||||
{
|
||||
$timestamp = \is_null(static::$timestamp) ? \time() : static::$timestamp;
|
||||
|
||||
if (empty($key)) {
|
||||
throw new InvalidArgumentException('Key may not be empty');
|
||||
}
|
||||
$tks = \explode('.', $jwt);
|
||||
if (\count($tks) != 3) {
|
||||
throw new UnexpectedValueException('Wrong number of segments');
|
||||
}
|
||||
list($headb64, $bodyb64, $cryptob64) = $tks;
|
||||
if (null === ($header = static::jsonDecode(static::urlsafeB64Decode($headb64)))) {
|
||||
throw new UnexpectedValueException('Invalid header encoding');
|
||||
}
|
||||
if (null === $payload = static::jsonDecode(static::urlsafeB64Decode($bodyb64))) {
|
||||
throw new UnexpectedValueException('Invalid claims encoding');
|
||||
}
|
||||
if (false === ($sig = static::urlsafeB64Decode($cryptob64))) {
|
||||
throw new UnexpectedValueException('Invalid signature encoding');
|
||||
}
|
||||
if (empty($header->alg)) {
|
||||
throw new UnexpectedValueException('Empty algorithm');
|
||||
}
|
||||
if (empty(static::$supported_algs[$header->alg])) {
|
||||
throw new UnexpectedValueException('Algorithm not supported');
|
||||
}
|
||||
if (!\in_array($header->alg, $allowed_algs)) {
|
||||
throw new UnexpectedValueException('Algorithm not allowed');
|
||||
}
|
||||
if ($header->alg === 'ES256') {
|
||||
// OpenSSL expects an ASN.1 DER sequence for ES256 signatures
|
||||
$sig = self::signatureToDER($sig);
|
||||
}
|
||||
|
||||
if (\is_array($key) || $key instanceof \ArrayAccess) {
|
||||
if (isset($header->kid)) {
|
||||
if (!isset($key[$header->kid])) {
|
||||
throw new UnexpectedValueException('"kid" invalid, unable to lookup correct key');
|
||||
}
|
||||
$key = $key[$header->kid];
|
||||
} else {
|
||||
throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
|
||||
}
|
||||
}
|
||||
|
||||
// Check the signature
|
||||
if (!static::verify("$headb64.$bodyb64", $sig, $key, $header->alg)) {
|
||||
throw new SignatureInvalidException('Signature verification failed');
|
||||
}
|
||||
|
||||
// Check the nbf if it is defined. This is the time that the
|
||||
// token can actually be used. If it's not yet that time, abort.
|
||||
if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) {
|
||||
throw new BeforeValidException(
|
||||
'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->nbf)
|
||||
);
|
||||
}
|
||||
|
||||
// Check that this token has been created before 'now'. This prevents
|
||||
// using tokens that have been created for later use (and haven't
|
||||
// correctly used the nbf claim).
|
||||
if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) {
|
||||
throw new BeforeValidException(
|
||||
'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->iat)
|
||||
);
|
||||
}
|
||||
|
||||
// Check if this token has expired.
|
||||
if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {
|
||||
throw new ExpiredException('Expired token');
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts and signs a PHP object or array into a JWT string.
|
||||
*
|
||||
* @param object|array $payload PHP object or array
|
||||
* @param string $key The secret key.
|
||||
* If the algorithm used is asymmetric, this is the private key
|
||||
* @param string $alg The signing algorithm.
|
||||
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
|
||||
* @param mixed $keyId
|
||||
* @param array $head An array with header elements to attach
|
||||
*
|
||||
* @return string A signed JWT
|
||||
*
|
||||
* @uses jsonEncode
|
||||
* @uses urlsafeB64Encode
|
||||
*/
|
||||
public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)
|
||||
{
|
||||
$header = array('typ' => 'JWT', 'alg' => $alg);
|
||||
if ($keyId !== null) {
|
||||
$header['kid'] = $keyId;
|
||||
}
|
||||
if (isset($head) && \is_array($head)) {
|
||||
$header = \array_merge($head, $header);
|
||||
}
|
||||
$segments = array();
|
||||
$segments[] = static::urlsafeB64Encode(static::jsonEncode($header));
|
||||
$segments[] = static::urlsafeB64Encode(static::jsonEncode($payload));
|
||||
$signing_input = \implode('.', $segments);
|
||||
|
||||
$signature = static::sign($signing_input, $key, $alg);
|
||||
$segments[] = static::urlsafeB64Encode($signature);
|
||||
|
||||
return \implode('.', $segments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign a string with a given key and algorithm.
|
||||
*
|
||||
* @param string $msg The message to sign
|
||||
* @param string|resource $key The secret key
|
||||
* @param string $alg The signing algorithm.
|
||||
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
|
||||
*
|
||||
* @return string An encrypted message
|
||||
*
|
||||
* @throws DomainException Unsupported algorithm was specified
|
||||
*/
|
||||
public static function sign($msg, $key, $alg = 'HS256')
|
||||
{
|
||||
if (empty(static::$supported_algs[$alg])) {
|
||||
throw new DomainException('Algorithm not supported');
|
||||
}
|
||||
list($function, $algorithm) = static::$supported_algs[$alg];
|
||||
switch ($function) {
|
||||
case 'hash_hmac':
|
||||
return \hash_hmac($algorithm, $msg, $key, true);
|
||||
case 'openssl':
|
||||
$signature = '';
|
||||
$success = \openssl_sign($msg, $signature, $key, $algorithm);
|
||||
if (!$success) {
|
||||
throw new DomainException("OpenSSL unable to sign data");
|
||||
} else {
|
||||
if ($alg === 'ES256') {
|
||||
$signature = self::signatureFromDER($signature, 256);
|
||||
}
|
||||
return $signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify a signature with the message, key and method. Not all methods
|
||||
* are symmetric, so we must have a separate verify and sign method.
|
||||
*
|
||||
* @param string $msg The original message (header and body)
|
||||
* @param string $signature The original signature
|
||||
* @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key
|
||||
* @param string $alg The algorithm
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws DomainException Invalid Algorithm or OpenSSL failure
|
||||
*/
|
||||
private static function verify($msg, $signature, $key, $alg)
|
||||
{
|
||||
if (empty(static::$supported_algs[$alg])) {
|
||||
throw new DomainException('Algorithm not supported');
|
||||
}
|
||||
|
||||
list($function, $algorithm) = static::$supported_algs[$alg];
|
||||
switch ($function) {
|
||||
case 'openssl':
|
||||
$success = \openssl_verify($msg, $signature, $key, $algorithm);
|
||||
if ($success === 1) {
|
||||
return true;
|
||||
} elseif ($success === 0) {
|
||||
return false;
|
||||
}
|
||||
// returns 1 on success, 0 on failure, -1 on error.
|
||||
throw new DomainException(
|
||||
'OpenSSL error: ' . \openssl_error_string()
|
||||
);
|
||||
case 'hash_hmac':
|
||||
default:
|
||||
$hash = \hash_hmac($algorithm, $msg, $key, true);
|
||||
if (\function_exists('hash_equals')) {
|
||||
return \hash_equals($signature, $hash);
|
||||
}
|
||||
$len = \min(static::safeStrlen($signature), static::safeStrlen($hash));
|
||||
|
||||
$status = 0;
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
$status |= (\ord($signature[$i]) ^ \ord($hash[$i]));
|
||||
}
|
||||
$status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash));
|
||||
|
||||
return ($status === 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a JSON string into a PHP object.
|
||||
*
|
||||
* @param string $input JSON string
|
||||
*
|
||||
* @return object Object representation of JSON string
|
||||
*
|
||||
* @throws DomainException Provided string was invalid JSON
|
||||
*/
|
||||
public static function jsonDecode($input)
|
||||
{
|
||||
if (\version_compare(PHP_VERSION, '5.4.0', '>=') && !(\defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
|
||||
/** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
|
||||
* to specify that large ints (like Steam Transaction IDs) should be treated as
|
||||
* strings, rather than the PHP default behaviour of converting them to floats.
|
||||
*/
|
||||
$obj = \json_decode($input, false, 512, JSON_BIGINT_AS_STRING);
|
||||
} else {
|
||||
/** Not all servers will support that, however, so for older versions we must
|
||||
* manually detect large ints in the JSON string and quote them (thus converting
|
||||
*them to strings) before decoding, hence the preg_replace() call.
|
||||
*/
|
||||
$max_int_length = \strlen((string) PHP_INT_MAX) - 1;
|
||||
$json_without_bigints = \preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
|
||||
$obj = \json_decode($json_without_bigints);
|
||||
}
|
||||
|
||||
if ($errno = \json_last_error()) {
|
||||
static::handleJsonError($errno);
|
||||
} elseif ($obj === null && $input !== 'null') {
|
||||
throw new DomainException('Null result with non-null input');
|
||||
}
|
||||
return $obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode a PHP object into a JSON string.
|
||||
*
|
||||
* @param object|array $input A PHP object or array
|
||||
*
|
||||
* @return string JSON representation of the PHP object or array
|
||||
*
|
||||
* @throws DomainException Provided object could not be encoded to valid JSON
|
||||
*/
|
||||
public static function jsonEncode($input)
|
||||
{
|
||||
$json = \json_encode($input);
|
||||
if ($errno = \json_last_error()) {
|
||||
static::handleJsonError($errno);
|
||||
} elseif ($json === 'null' && $input !== null) {
|
||||
throw new DomainException('Null result with non-null input');
|
||||
}
|
||||
return $json;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a string with URL-safe Base64.
|
||||
*
|
||||
* @param string $input A Base64 encoded string
|
||||
*
|
||||
* @return string A decoded string
|
||||
*/
|
||||
public static function urlsafeB64Decode($input)
|
||||
{
|
||||
$remainder = \strlen($input) % 4;
|
||||
if ($remainder) {
|
||||
$padlen = 4 - $remainder;
|
||||
$input .= \str_repeat('=', $padlen);
|
||||
}
|
||||
return \base64_decode(\strtr($input, '-_', '+/'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode a string with URL-safe Base64.
|
||||
*
|
||||
* @param string $input The string you want encoded
|
||||
*
|
||||
* @return string The base64 encode of what you passed in
|
||||
*/
|
||||
public static function urlsafeB64Encode($input)
|
||||
{
|
||||
return \str_replace('=', '', \strtr(\base64_encode($input), '+/', '-_'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a JSON error.
|
||||
*
|
||||
* @param int $errno An error number from json_last_error()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private static function handleJsonError($errno)
|
||||
{
|
||||
$messages = array(
|
||||
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
|
||||
JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
|
||||
JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
|
||||
JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
|
||||
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3
|
||||
);
|
||||
throw new DomainException(
|
||||
isset($messages[$errno])
|
||||
? $messages[$errno]
|
||||
: 'Unknown JSON error: ' . $errno
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of bytes in cryptographic strings.
|
||||
*
|
||||
* @param string $str
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private static function safeStrlen($str)
|
||||
{
|
||||
if (\function_exists('mb_strlen')) {
|
||||
return \mb_strlen($str, '8bit');
|
||||
}
|
||||
return \strlen($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert an ECDSA signature to an ASN.1 DER sequence
|
||||
*
|
||||
* @param string $sig The ECDSA signature to convert
|
||||
* @return string The encoded DER object
|
||||
*/
|
||||
private static function signatureToDER($sig)
|
||||
{
|
||||
// Separate the signature into r-value and s-value
|
||||
list($r, $s) = \str_split($sig, (int) (\strlen($sig) / 2));
|
||||
|
||||
// Trim leading zeros
|
||||
$r = \ltrim($r, "\x00");
|
||||
$s = \ltrim($s, "\x00");
|
||||
|
||||
// Convert r-value and s-value from unsigned big-endian integers to
|
||||
// signed two's complement
|
||||
if (\ord($r[0]) > 0x7f) {
|
||||
$r = "\x00" . $r;
|
||||
}
|
||||
if (\ord($s[0]) > 0x7f) {
|
||||
$s = "\x00" . $s;
|
||||
}
|
||||
|
||||
return self::encodeDER(
|
||||
self::ASN1_SEQUENCE,
|
||||
self::encodeDER(self::ASN1_INTEGER, $r) .
|
||||
self::encodeDER(self::ASN1_INTEGER, $s)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes a value into a DER object.
|
||||
*
|
||||
* @param int $type DER tag
|
||||
* @param string $value the value to encode
|
||||
* @return string the encoded object
|
||||
*/
|
||||
private static function encodeDER($type, $value)
|
||||
{
|
||||
$tag_header = 0;
|
||||
if ($type === self::ASN1_SEQUENCE) {
|
||||
$tag_header |= 0x20;
|
||||
}
|
||||
|
||||
// Type
|
||||
$der = \chr($tag_header | $type);
|
||||
|
||||
// Length
|
||||
$der .= \chr(\strlen($value));
|
||||
|
||||
return $der . $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes signature from a DER object.
|
||||
*
|
||||
* @param string $der binary signature in DER format
|
||||
* @param int $keySize the number of bits in the key
|
||||
* @return string the signature
|
||||
*/
|
||||
private static function signatureFromDER($der, $keySize)
|
||||
{
|
||||
// OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE
|
||||
list($offset, $_) = self::readDER($der);
|
||||
list($offset, $r) = self::readDER($der, $offset);
|
||||
list($offset, $s) = self::readDER($der, $offset);
|
||||
|
||||
// Convert r-value and s-value from signed two's compliment to unsigned
|
||||
// big-endian integers
|
||||
$r = \ltrim($r, "\x00");
|
||||
$s = \ltrim($s, "\x00");
|
||||
|
||||
// Pad out r and s so that they are $keySize bits long
|
||||
$r = \str_pad($r, $keySize / 8, "\x00", STR_PAD_LEFT);
|
||||
$s = \str_pad($s, $keySize / 8, "\x00", STR_PAD_LEFT);
|
||||
|
||||
return $r . $s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads binary DER-encoded data and decodes into a single object
|
||||
*
|
||||
* @param string $der the binary data in DER format
|
||||
* @param int $offset the offset of the data stream containing the object
|
||||
* to decode
|
||||
* @return array [$offset, $data] the new offset and the decoded object
|
||||
*/
|
||||
private static function readDER($der, $offset = 0)
|
||||
{
|
||||
$pos = $offset;
|
||||
$size = \strlen($der);
|
||||
$constructed = (\ord($der[$pos]) >> 5) & 0x01;
|
||||
$type = \ord($der[$pos++]) & 0x1f;
|
||||
|
||||
// Length
|
||||
$len = \ord($der[$pos++]);
|
||||
if ($len & 0x80) {
|
||||
$n = $len & 0x1f;
|
||||
$len = 0;
|
||||
while ($n-- && $pos < $size) {
|
||||
$len = ($len << 8) | \ord($der[$pos++]);
|
||||
}
|
||||
}
|
||||
|
||||
// Value
|
||||
if ($type == self::ASN1_BIT_STRING) {
|
||||
$pos++; // Skip the first contents octet (padding indicator)
|
||||
$data = \substr($der, $pos, $len - 1);
|
||||
$pos += $len - 1;
|
||||
} elseif (!$constructed) {
|
||||
$data = \substr($der, $pos, $len);
|
||||
$pos += $len;
|
||||
} else {
|
||||
$data = null;
|
||||
}
|
||||
|
||||
return array($pos, $data);
|
||||
}
|
||||
}
|
6
vendor/firebase/php-jwt/src/SignatureInvalidException.php
vendored
Normal file
6
vendor/firebase/php-jwt/src/SignatureInvalidException.php
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
namespace Firebase\JWT;
|
||||
|
||||
class SignatureInvalidException extends \UnexpectedValueException
|
||||
{
|
||||
}
|
13
vendor/league/mime-type-detection/CHANGELOG.md
vendored
Normal file
13
vendor/league/mime-type-detection/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## 1.7.0 - 2021-01-18
|
||||
|
||||
### Added
|
||||
|
||||
- Added a `bufferSampleSize` parameter to the `FinfoMimeTypeDetector` class that allows you to send a reduced content sample which costs less memory.
|
||||
|
||||
## 1.6.0 - 2021-01-18
|
||||
|
||||
### Changes
|
||||
|
||||
- Updated generated mime-type map
|
13
vendor/league/mime-type-detection/composer.json
vendored
13
vendor/league/mime-type-detection/composer.json
vendored
@ -8,17 +8,26 @@
|
||||
"email": "info@frankdejonge.nl"
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"phpstan": "vendor/bin/phpstan analyse -l 6 src"
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0",
|
||||
"ext-fileinfo": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.5.8",
|
||||
"phpstan/phpstan": "^0.12.36"
|
||||
"phpunit/phpunit": "^8.5.8 || ^9.3",
|
||||
"phpstan/phpstan": "^0.12.68",
|
||||
"friendsofphp/php-cs-fixer": "^2.18"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\MimeTypeDetection\\": "src"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "7.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace League\MimeTypeDetection;
|
||||
|
||||
use finfo;
|
||||
|
||||
use const FILEINFO_MIME_TYPE;
|
||||
|
||||
use const PATHINFO_EXTENSION;
|
||||
use finfo;
|
||||
|
||||
class FinfoMimeTypeDetector implements MimeTypeDetector
|
||||
{
|
||||
@ -23,16 +23,25 @@ class FinfoMimeTypeDetector implements MimeTypeDetector
|
||||
*/
|
||||
private $extensionMap;
|
||||
|
||||
public function __construct(string $magicFile = '', ExtensionToMimeTypeMap $extensionMap = null)
|
||||
{
|
||||
/**
|
||||
* @var int|null
|
||||
*/
|
||||
private $bufferSampleSize;
|
||||
|
||||
public function __construct(
|
||||
string $magicFile = '',
|
||||
ExtensionToMimeTypeMap $extensionMap = null,
|
||||
?int $bufferSampleSize = null
|
||||
) {
|
||||
$this->finfo = new finfo(FILEINFO_MIME_TYPE, $magicFile);
|
||||
$this->extensionMap = $extensionMap ?: new GeneratedExtensionToMimeTypeMap();
|
||||
$this->bufferSampleSize = $bufferSampleSize;
|
||||
}
|
||||
|
||||
public function detectMimeType(string $path, $contents): ?string
|
||||
{
|
||||
$mimeType = is_string($contents)
|
||||
? (@$this->finfo->buffer($contents) ?: null)
|
||||
? (@$this->finfo->buffer($this->takeSample($contents)) ?: null)
|
||||
: null;
|
||||
|
||||
if ($mimeType !== null && ! in_array($mimeType, self::INCONCLUSIVE_MIME_TYPES)) {
|
||||
@ -56,7 +65,15 @@ class FinfoMimeTypeDetector implements MimeTypeDetector
|
||||
|
||||
public function detectMimeTypeFromBuffer(string $contents): ?string
|
||||
{
|
||||
return @$this->finfo->buffer($contents) ?: null;
|
||||
return @$this->finfo->buffer($this->takeSample($contents)) ?: null;
|
||||
}
|
||||
|
||||
private function takeSample(string $contents): string
|
||||
{
|
||||
if ($this->bufferSampleSize === null) {
|
||||
return $contents;
|
||||
}
|
||||
|
||||
return (string) substr($contents, 0, $this->bufferSampleSize);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
|
||||
{
|
||||
/**
|
||||
* @var string[]
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public const MIME_TYPES_FOR_EXTENSIONS = [
|
||||
@ -666,6 +667,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
|
||||
'opf' => 'application/oebps-package+xml',
|
||||
'opml' => 'text/x-opml',
|
||||
'oprc' => 'application/vnd.palm',
|
||||
'opus' => 'audio/ogg',
|
||||
'org' => 'text/x-org',
|
||||
'osf' => 'application/vnd.yamaha.openscoreformat',
|
||||
'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
|
||||
|
1
vendor/lotofbadcode/phpspirit_databackup/README.md
vendored
Normal file
1
vendor/lotofbadcode/phpspirit_databackup/README.md
vendored
Normal file
@ -0,0 +1 @@
|
||||
# 一个php备份恢复数据库的扩展 相关文档:https://www.kancloud.cn/lotofbadcode/php_spirit/content
|
24
vendor/lotofbadcode/phpspirit_databackup/composer.json
vendored
Normal file
24
vendor/lotofbadcode/phpspirit_databackup/composer.json
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "lotofbadcode/phpspirit_databackup",
|
||||
"description": "一个PHP数据库备份恢复的插件",
|
||||
"license": "Apache-2.0",
|
||||
"type": "library",
|
||||
"keywords": [
|
||||
"php",
|
||||
"library"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "代码庸医",
|
||||
"email": "3359964266@qq.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"phpspirit\\databackup\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
0
vendor/lotofbadcode/phpspirit_databackup/demo/.htaccess
vendored
Normal file
0
vendor/lotofbadcode/phpspirit_databackup/demo/.htaccess
vendored
Normal file
BIN
vendor/lotofbadcode/phpspirit_databackup/demo/backup.gif
vendored
Normal file
BIN
vendor/lotofbadcode/phpspirit_databackup/demo/backup.gif
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
53
vendor/lotofbadcode/phpspirit_databackup/demo/backup.html
vendored
Normal file
53
vendor/lotofbadcode/phpspirit_databackup/demo/backup.html
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>数据备份</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" ></script>
|
||||
<link href="css/jquery.circliful.css" rel="stylesheet" type="text/css" />
|
||||
<link href="css/font-awesome.min.css" rel="stylesheet" type="text/css" />
|
||||
<script src="js/jquery.circliful.js"></script>
|
||||
<script>
|
||||
function backup(predate)
|
||||
{
|
||||
$.ajax({
|
||||
url: 'backupajax.php',
|
||||
type: 'POST', //POST
|
||||
async: true, //或false,是否异步
|
||||
dataType: 'json',
|
||||
data:predate,
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
|
||||
datainfo = '表[' + data.nowtable + ']完成' + data.tablepercentage + '%';
|
||||
if (data.totalpercentage >= 100)
|
||||
{
|
||||
datainfo = '备份完成';
|
||||
}
|
||||
|
||||
html = '<div id="myStat2" data-dimension="250" data-text="' + data.totalpercentage + '%" data-info="' + datainfo + '" data-width="30" data-fontsize="38" data-percent="' + data.totalpercentage + '" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>';
|
||||
$('#tongji').html(html);
|
||||
$('#myStat2').circliful();
|
||||
if (data.totalpercentage < 100)
|
||||
{
|
||||
backup(data);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div><input type="button" value="备份" onclick="backup({})" /></div>
|
||||
<center>
|
||||
|
||||
<div id="tongji"></div>
|
||||
</center>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
35
vendor/lotofbadcode/phpspirit_databackup/demo/backup.php
vendored
Normal file
35
vendor/lotofbadcode/phpspirit_databackup/demo/backup.php
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
set_time_limit(0);
|
||||
error_reporting(-1);
|
||||
ini_set('display_errors', 1);
|
||||
include dirname(__FILE__) . '/../src/BackupFactory.php';
|
||||
include dirname(__FILE__) . '/../src/IBackup.php';
|
||||
include dirname(__FILE__) . '/../src/mysql/backup.php';
|
||||
|
||||
use phpspirit\databackup\BackupFactory;
|
||||
|
||||
//自行判断文件夹
|
||||
$backupdir = '';
|
||||
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
|
||||
$backupdir = $_POST['backdir'];
|
||||
} else {
|
||||
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
|
||||
}
|
||||
|
||||
if (!is_dir($backupdir)) {
|
||||
mkdir($backupdir, 0777, true);
|
||||
}
|
||||
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'smes', 'root', 'root');
|
||||
$backup->setbackdir($backupdir)
|
||||
->settablelist(['md_menu', 'md_api_group'])
|
||||
->setstructuretable(['md_api_group'])
|
||||
->setvolsize(0.2);
|
||||
do {
|
||||
$result = $backup->backup();
|
||||
echo str_repeat(' ', 1000); //这里会把浏览器缓存装满
|
||||
ob_flush(); //把php缓存写入apahce缓存
|
||||
flush(); //把apahce缓存写入浏览器缓存
|
||||
if ($result['totalpercentage'] > 0) {
|
||||
echo '完成' . $result['totalpercentage'] . '%<br />';
|
||||
}
|
||||
} while ($result['totalpercentage'] < 100);
|
31
vendor/lotofbadcode/phpspirit_databackup/demo/backupajax.php
vendored
Normal file
31
vendor/lotofbadcode/phpspirit_databackup/demo/backupajax.php
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
error_reporting(-1);
|
||||
ini_set('display_errors', 1);
|
||||
include dirname(__FILE__) . '/../src/BackupFactory.php';
|
||||
include dirname(__FILE__) . '/../src/IBackup.php';
|
||||
include dirname(__FILE__) . '/../src/mysql/backup.php';
|
||||
|
||||
use phpspirit\databackup\BackupFactory;
|
||||
|
||||
//自行判断文件夹
|
||||
$backupdir = '';
|
||||
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
|
||||
$backupdir = $_POST['backdir'];
|
||||
} else {
|
||||
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
|
||||
}
|
||||
|
||||
if (!is_dir($backupdir)) {
|
||||
mkdir($backupdir, 0777, true);
|
||||
}
|
||||
|
||||
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'smes', 'root', 'root');
|
||||
$result = $backup->setbackdir($backupdir)
|
||||
->setvolsize(0.2)
|
||||
->setonlystructure(false) //设置是否只备份目录结构
|
||||
->settablelist(['md_menu', 'md_api_group','cmseasy_b_category']) //设置要备份的表, 默认全部表
|
||||
->setstructuretable(['md_api_group'])
|
||||
->ajaxbackup($_POST);
|
||||
|
||||
echo json_encode($result);
|
20
vendor/lotofbadcode/phpspirit_databackup/demo/css/jquery.circliful.css
vendored
Normal file
20
vendor/lotofbadcode/phpspirit_databackup/demo/css/jquery.circliful.css
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
.circliful {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.circle-text, .circle-info, .circle-text-half, .circle-info-half {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.circle-info, .circle-info-half {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.circliful .fa {
|
||||
margin: -10px 3px 0 3px;
|
||||
position: relative;
|
||||
bottom: 4px;
|
||||
}
|
191
vendor/lotofbadcode/phpspirit_databackup/demo/js/jquery.circliful.js
vendored
Normal file
191
vendor/lotofbadcode/phpspirit_databackup/demo/js/jquery.circliful.js
vendored
Normal file
@ -0,0 +1,191 @@
|
||||
(function( $ ) {
|
||||
|
||||
$.fn.circliful = function(options) {
|
||||
|
||||
var settings = $.extend({
|
||||
// These are the defaults.
|
||||
foregroundColor: "#556b2f",
|
||||
backgroundColor: "#eee",
|
||||
fillColor: false,
|
||||
width: 15,
|
||||
dimension: 200,
|
||||
size: 15,
|
||||
percent: 50,
|
||||
animationStep: 1.0
|
||||
}, options );
|
||||
return this.each(function() {
|
||||
var dimension = '';
|
||||
var text = '';
|
||||
var info = '';
|
||||
var width = '';
|
||||
var size = 0;
|
||||
var percent = 0;
|
||||
var endPercent = 100;
|
||||
var fgcolor = '';
|
||||
var bgcolor = '';
|
||||
var icon = '';
|
||||
var animationstep = 0.0;
|
||||
|
||||
$(this).addClass('circliful');
|
||||
|
||||
if($(this).data('dimension') != undefined) {
|
||||
dimension = $(this).data('dimension');
|
||||
} else {
|
||||
dimension = settings.dimension;
|
||||
}
|
||||
|
||||
if($(this).data('width') != undefined) {
|
||||
width = $(this).data('width');
|
||||
} else {
|
||||
width = settings.width;
|
||||
}
|
||||
|
||||
if($(this).data('fontsize') != undefined) {
|
||||
size = $(this).data('fontsize');
|
||||
} else {
|
||||
size = settings.size;
|
||||
}
|
||||
|
||||
if($(this).data('percent') != undefined) {
|
||||
percent = $(this).data('percent') / 100;
|
||||
endPercent = $(this).data('percent');
|
||||
} else {
|
||||
percent = settings.percent / 100;
|
||||
}
|
||||
|
||||
if($(this).data('fgcolor') != undefined) {
|
||||
fgcolor = $(this).data('fgcolor');
|
||||
} else {
|
||||
fgcolor = settings.foregroundColor;
|
||||
}
|
||||
|
||||
if($(this).data('bgcolor') != undefined) {
|
||||
bgcolor = $(this).data('bgcolor');
|
||||
} else {
|
||||
bgcolor = settings.backgroundColor;
|
||||
}
|
||||
|
||||
if($(this).data('animation-step') != undefined) {
|
||||
animationstep = parseFloat($(this).data('animation-step'));
|
||||
} else {
|
||||
animationstep = settings.animationStep;
|
||||
}
|
||||
if($(this).data('text') != undefined) {
|
||||
text = $(this).data('text');
|
||||
|
||||
if($(this).data('icon') != undefined) {
|
||||
icon = '<i class="fa ' + $(this).data('icon') + '"></i>';
|
||||
}
|
||||
|
||||
if($(this).data('type') != undefined) {
|
||||
type = $(this).data('type');
|
||||
|
||||
if(type == 'half') {
|
||||
$(this).append('<span class="circle-text-half">' + icon + text + '</span>');
|
||||
$(this).find('.circle-text-half').css({'line-height': (dimension / 1.45) + 'px', 'font-size' : size + 'px' });
|
||||
} else {
|
||||
$(this).append('<span class="circle-text">' + icon + text + '</span>');
|
||||
$(this).find('.circle-text').css({'line-height': dimension + 'px', 'font-size' : size + 'px' });
|
||||
}
|
||||
} else {
|
||||
$(this).append('<span class="circle-text">' + icon + text + '</span>');
|
||||
$(this).find('.circle-text').css({'line-height': dimension + 'px', 'font-size' : size + 'px' });
|
||||
}
|
||||
} else if($(this).data('icon') != undefined) {
|
||||
|
||||
}
|
||||
|
||||
if($(this).data('info') != undefined) {
|
||||
info = $(this).data('info');
|
||||
|
||||
if($(this).data('type') != undefined) {
|
||||
type = $(this).data('type');
|
||||
|
||||
if(type == 'half') {
|
||||
$(this).append('<span class="circle-info-half">' + info + '</span>');
|
||||
$(this).find('.circle-info-half').css({'line-height': (dimension * 0.9) + 'px', });
|
||||
} else {
|
||||
$(this).append('<span class="circle-info">' + info + '</span>');
|
||||
$(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });
|
||||
}
|
||||
} else {
|
||||
$(this).append('<span class="circle-info">' + info + '</span>');
|
||||
$(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });
|
||||
}
|
||||
}
|
||||
|
||||
$(this).width(dimension + 'px');
|
||||
|
||||
var canvas = $('<canvas></canvas>').attr({ width: dimension, height: dimension }).appendTo($(this)).get(0);
|
||||
var context = canvas.getContext('2d');
|
||||
var x = canvas.width / 2;
|
||||
var y = canvas.height / 2;
|
||||
var degrees = percent * 360.0;
|
||||
var radians = degrees * (Math.PI / 180);
|
||||
var radius = canvas.width / 2.5;
|
||||
var startAngle = 2.3 * Math.PI;
|
||||
var endAngle = 0;
|
||||
var counterClockwise = false;
|
||||
var curPerc = animationstep === 0.0 ? endPercent : 0.0;
|
||||
var curStep = Math.max(animationstep, 0.0);
|
||||
var circ = Math.PI * 2;
|
||||
var quart = Math.PI / 2;
|
||||
var type = '';
|
||||
var fill = false;
|
||||
|
||||
if($(this).data('type') != undefined) {
|
||||
type = $(this).data('type');
|
||||
|
||||
if(type == 'half') {
|
||||
var startAngle = 2.0 * Math.PI;
|
||||
var endAngle = 3.13;
|
||||
var circ = Math.PI * 1.0;
|
||||
var quart = Math.PI / 0.996;
|
||||
}
|
||||
}
|
||||
|
||||
if($(this).data('fill') != undefined) {
|
||||
fill = $(this).data('fill');
|
||||
} else {
|
||||
fill = settings.fillColor;
|
||||
}
|
||||
//animate foreground circle
|
||||
function animate(current) {
|
||||
context.clearRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
context.beginPath();
|
||||
context.arc(x, y, radius, endAngle, startAngle, false);
|
||||
context.lineWidth = width - 1;
|
||||
|
||||
// line color
|
||||
context.strokeStyle = bgcolor;
|
||||
context.stroke();
|
||||
|
||||
if(fill) {
|
||||
context.fillStyle = fill;
|
||||
context.fill();
|
||||
}
|
||||
|
||||
context.beginPath();
|
||||
context.arc(x, y, radius, -(quart), ((circ) * current) - quart, false);
|
||||
context.lineWidth = width;
|
||||
// line color
|
||||
context.strokeStyle = fgcolor;
|
||||
context.stroke();
|
||||
|
||||
if (curPerc < endPercent) {
|
||||
curPerc += curStep;
|
||||
// requestAnimationFrame(function () {
|
||||
animate(Math.min(curPerc, endPercent) / 100);
|
||||
//});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
animate(curPerc / 100);
|
||||
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
}( jQuery ));
|
1
vendor/lotofbadcode/phpspirit_databackup/demo/js/jquery.circliful.min.js
vendored
Normal file
1
vendor/lotofbadcode/phpspirit_databackup/demo/js/jquery.circliful.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
(function(a){a.fn.circliful=function(b){var c=a.extend({foregroundColor:"#556b2f",backgroundColor:"#eee",fillColor:false,width:15,dimension:200,size:15,percent:50,animationStep:1},b);return this.each(function(){var F="";var s="";var E="";var v="";var t=0;var e=0;var l=100;var B="";var d="";var D="";var q=0;a(this).addClass("circliful");if(a(this).data("dimension")!=undefined){F=a(this).data("dimension")}else{F=c.dimension}if(a(this).data("width")!=undefined){v=a(this).data("width")}else{v=c.width}if(a(this).data("fontsize")!=undefined){t=a(this).data("fontsize")}else{t=c.size}if(a(this).data("percent")!=undefined){e=a(this).data("percent")/100;l=a(this).data("percent")}else{e=c.percent/100}if(a(this).data("fgcolor")!=undefined){B=a(this).data("fgcolor")}else{B=c.foregroundColor}if(a(this).data("bgcolor")!=undefined){d=a(this).data("bgcolor")}else{d=c.backgroundColor}if(a(this).data("animation-step")!=undefined){q=parseFloat(a(this).data("animation-step"))}else{q=c.animationStep}if(a(this).data("text")!=undefined){s=a(this).data("text");if(a(this).data("icon")!=undefined){D='<i class="fa '+a(this).data("icon")+'"></i>'}if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){a(this).append('<span class="circle-text-half">'+D+s+"</span>");a(this).find(".circle-text-half").css({"line-height":(F/1.45)+"px","font-size":t+"px"})}else{a(this).append('<span class="circle-text">'+D+s+"</span>");a(this).find(".circle-text").css({"line-height":F+"px","font-size":t+"px"})}}else{a(this).append('<span class="circle-text">'+D+s+"</span>");a(this).find(".circle-text").css({"line-height":F+"px","font-size":t+"px"})}}else{if(a(this).data("icon")!=undefined){}}if(a(this).data("info")!=undefined){E=a(this).data("info");if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){a(this).append('<span class="circle-info-half">'+E+"</span>");a(this).find(".circle-info-half").css({"line-height":(F*0.9)+"px",})}else{a(this).append('<span class="circle-info">'+E+"</span>");a(this).find(".circle-info").css({"line-height":(F*1.25)+"px",})}}else{a(this).append('<span class="circle-info">'+E+"</span>");a(this).find(".circle-info").css({"line-height":(F*1.25)+"px",})}}a(this).width(F+"px");var h=a("<canvas></canvas>").attr({width:F,height:F}).appendTo(a(this)).get(0);var f=h.getContext("2d");var p=h.width/2;var o=h.height/2;var A=e*360;var G=A*(Math.PI/180);var j=h.width/2.5;var z=2.3*Math.PI;var u=0;var C=false;var m=q===0?l:0;var n=Math.max(q,0);var r=Math.PI*2;var g=Math.PI/2;var i="";var w=false;if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){var z=2*Math.PI;var u=3.13;var r=Math.PI*1;var g=Math.PI/0.996}}if(a(this).data("fill")!=undefined){w=a(this).data("fill")}else{w=c.fillColor}function k(x){f.clearRect(0,0,h.width,h.height);f.beginPath();f.arc(p,o,j,u,z,false);f.lineWidth=v-1;f.strokeStyle=d;f.stroke();if(w){f.fillStyle=w;f.fill()}f.beginPath();f.arc(p,o,j,-(g),((r)*x)-g,false);f.lineWidth=v;f.strokeStyle=B;f.stroke();if(m<l){m+=n;requestAnimationFrame(function(){k(Math.min(m,l)/100)})}}k(m/100)})}}(jQuery));
|
0
vendor/lotofbadcode/phpspirit_databackup/demo/nginx.htaccess
vendored
Normal file
0
vendor/lotofbadcode/phpspirit_databackup/demo/nginx.htaccess
vendored
Normal file
BIN
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.gif
vendored
Normal file
BIN
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.gif
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 131 KiB |
57
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.html
vendored
Normal file
57
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.html
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>数据恢复</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" ></script>
|
||||
<link href="css/jquery.circliful.css" rel="stylesheet" type="text/css" />
|
||||
<link href="css/font-awesome.min.css" rel="stylesheet" type="text/css" />
|
||||
<script src="js/jquery.circliful.js"></script>
|
||||
<script>
|
||||
|
||||
$(document).ready(function () {
|
||||
$('#myStat2').circliful();
|
||||
});
|
||||
|
||||
function recovey(predate)
|
||||
{
|
||||
$.ajax({
|
||||
url: 'recoveryajax.php',
|
||||
type: 'POST', //GET
|
||||
async: true, //或false,是否异步
|
||||
data:predate,
|
||||
dataType: 'json',
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
|
||||
if (data.totalpercentage < 100)
|
||||
{
|
||||
datainfo = '正在恢复...';
|
||||
} else
|
||||
{
|
||||
datainfo = '恢复完成';
|
||||
}
|
||||
|
||||
html = '<div id="myStat2" data-dimension="250" data-text="' + data.totalpercentage + '%" data-info="' + datainfo + '" data-width="30" data-fontsize="38" data-percent="' + data.totalpercentage + '" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>';
|
||||
$('#tongji').html(html);
|
||||
$('#myStat2').circliful();
|
||||
if (data.totalpercentage < 100)
|
||||
{
|
||||
recovey(data);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div><input type="button" value="恢复" onclick="recovey({})" /></div>
|
||||
<center>
|
||||
|
||||
<div id="tongji">
|
||||
|
||||
<div id="myStat2" data-dimension="250" data-text="0%" data-info="等待恢复" data-width="30" data-fontsize="38" data-percent="0" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
</body>
|
||||
</html>
|
25
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.php
vendored
Normal file
25
vendor/lotofbadcode/phpspirit_databackup/demo/recovery.php
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
set_time_limit(0);
|
||||
error_reporting(-1);
|
||||
ini_set('display_errors', 1);
|
||||
include dirname(__FILE__) . '/../src/RecoveryFactory.php';
|
||||
include dirname(__FILE__) . '/../src/IRecovery.php';
|
||||
include dirname(__FILE__) . '/../src/mysql/Recovery.php';
|
||||
|
||||
use phpspirit\databackup\RecoveryFactory;
|
||||
$recovery = RecoveryFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
|
||||
$recovery->setSqlfiledir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup'.DIRECTORY_SEPARATOR.'20191205010418');
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
$result = $recovery->recovery();
|
||||
echo str_repeat(' ', 1000); //这里会把浏览器缓存装满
|
||||
ob_flush(); //把php缓存写入apahce缓存
|
||||
flush(); //把apahce缓存写入浏览器缓存
|
||||
if ($result['totalpercentage'] > 0)
|
||||
{
|
||||
echo '完成' . $result['totalpercentage'] . '%<br />';
|
||||
}
|
||||
} while ($result['totalpercentage'] < 100);
|
13
vendor/lotofbadcode/phpspirit_databackup/demo/recoveryajax.php
vendored
Normal file
13
vendor/lotofbadcode/phpspirit_databackup/demo/recoveryajax.php
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
include dirname(__FILE__) . '/../vendor/autoload.php';
|
||||
|
||||
include dirname(__FILE__) . '/../src/RecoveryFactory.php';
|
||||
include dirname(__FILE__) . '/../src/IRecovery.php';
|
||||
include dirname(__FILE__) . '/../src/mysql/Recovery.php';
|
||||
use phpspirit\databackup\RecoveryFactory;
|
||||
$recovery = RecoveryFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
|
||||
$result = $recovery->setSqlfiledir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup'.DIRECTORY_SEPARATOR.'20191205010418')
|
||||
->ajaxrecovery($_POST);
|
||||
|
||||
echo json_encode($result);
|
24
vendor/lotofbadcode/phpspirit_databackup/src/BackupFactory.php
vendored
Normal file
24
vendor/lotofbadcode/phpspirit_databackup/src/BackupFactory.php
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup;
|
||||
|
||||
use phpspirit\databackup\mysql\Backup;
|
||||
use PDO;
|
||||
|
||||
class BackupFactory
|
||||
{
|
||||
private static $instance = null;
|
||||
|
||||
public static function instance($scheme, $server, $dbname, $username, $password, $code = 'utf8')
|
||||
{
|
||||
$args = md5(implode('_', func_get_args()));
|
||||
if (!isset(self::$instance[$args]) || self::$instance[$args] == null) {
|
||||
switch ($scheme) {
|
||||
case 'mysql':
|
||||
$pdo = new PDO($scheme . ':host=' . $server . ';dbname=' . $dbname, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'" . $code . "';"]);
|
||||
self::$instance[$args] = new Backup($pdo);
|
||||
}
|
||||
}
|
||||
return self::$instance[$args];
|
||||
}
|
||||
}
|
36
vendor/lotofbadcode/phpspirit_databackup/src/IBackup.php
vendored
Normal file
36
vendor/lotofbadcode/phpspirit_databackup/src/IBackup.php
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup;
|
||||
|
||||
interface IBackup
|
||||
{
|
||||
/**
|
||||
* 设置分卷大小
|
||||
*
|
||||
* @param float|int $size
|
||||
* @return void
|
||||
*/
|
||||
public function setvolsize($size);
|
||||
|
||||
/**
|
||||
* 设置备份路径
|
||||
*
|
||||
* @param string $dir
|
||||
* @return void
|
||||
*/
|
||||
public function setbackdir($dir);
|
||||
|
||||
/**
|
||||
* 备份
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function backup();
|
||||
|
||||
/**
|
||||
* ajax备份
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxbackup();
|
||||
}
|
28
vendor/lotofbadcode/phpspirit_databackup/src/IRecovery.php
vendored
Normal file
28
vendor/lotofbadcode/phpspirit_databackup/src/IRecovery.php
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup;
|
||||
|
||||
interface IRecovery
|
||||
{
|
||||
/**
|
||||
* 待恢复SQL文件目录
|
||||
*
|
||||
* @param [type] $dir
|
||||
* @return void
|
||||
*/
|
||||
public function setSqlfiledir($dir);
|
||||
|
||||
/**
|
||||
*
|
||||
* 恢复
|
||||
* @return void
|
||||
*/
|
||||
public function recovery();
|
||||
|
||||
/**
|
||||
* AJAX恢复
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxrecovery();
|
||||
}
|
24
vendor/lotofbadcode/phpspirit_databackup/src/RecoveryFactory.php
vendored
Normal file
24
vendor/lotofbadcode/phpspirit_databackup/src/RecoveryFactory.php
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup;
|
||||
|
||||
use phpspirit\databackup\mysql\Recovery;
|
||||
use PDO;
|
||||
|
||||
class RecoveryFactory
|
||||
{
|
||||
private static $instance = null;
|
||||
|
||||
public static function instance($scheme, $server, $dbname, $username, $password, $code = 'utf8')
|
||||
{
|
||||
$args = md5(implode('_', func_get_args()));
|
||||
if (self::$instance[$args] == null) {
|
||||
switch ($scheme) {
|
||||
case 'mysql':
|
||||
$pdo = new PDO($scheme . ':host=' . $server . ';dbname=' . $dbname, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'" . $code . "';"]);
|
||||
self::$instance[$args] = new Recovery($pdo);
|
||||
}
|
||||
}
|
||||
return self::$instance[$args];
|
||||
}
|
||||
}
|
347
vendor/lotofbadcode/phpspirit_databackup/src/mysql/Backup.php
vendored
Normal file
347
vendor/lotofbadcode/phpspirit_databackup/src/mysql/Backup.php
vendored
Normal file
@ -0,0 +1,347 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup\mysql;
|
||||
|
||||
use PDO;
|
||||
use Exception;
|
||||
use phpspirit\databackup\IBackup;
|
||||
|
||||
class Backup implements IBackup
|
||||
{
|
||||
|
||||
/**
|
||||
* 分卷大小的 默认2M
|
||||
* @var int
|
||||
*/
|
||||
private $_volsize = 2;
|
||||
|
||||
/**
|
||||
* 备份路径
|
||||
* @var string
|
||||
*/
|
||||
private $_backdir = '';
|
||||
|
||||
/**
|
||||
* 表集合
|
||||
* @var array
|
||||
*/
|
||||
private $_tablelist = [];
|
||||
|
||||
/**
|
||||
* 当前备份表的索引
|
||||
*/
|
||||
private $_nowtableidx = 0;
|
||||
|
||||
/**
|
||||
* 当前表已备份条数
|
||||
* @var int
|
||||
*/
|
||||
private $_nowtableexeccount = 0;
|
||||
|
||||
/**
|
||||
* 当前表的总记录数
|
||||
* @var int
|
||||
*/
|
||||
private $_nowtabletotal = 0;
|
||||
|
||||
/**
|
||||
* 当前表备份百分比
|
||||
*/
|
||||
private $_nowtablepercentage = 0;
|
||||
|
||||
/**
|
||||
* PDO对象
|
||||
* @var PDO
|
||||
*/
|
||||
private $_pdo;
|
||||
|
||||
/**
|
||||
* 保存的文件名
|
||||
* @var string
|
||||
*/
|
||||
private $_filename = '';
|
||||
|
||||
/**
|
||||
* insert Values 总条数
|
||||
* @var type
|
||||
*/
|
||||
private $_totallimit = 200;
|
||||
|
||||
|
||||
/**
|
||||
* 是否仅备份结构不备份数据
|
||||
*/
|
||||
private $_onlystructure = false;
|
||||
/**
|
||||
*
|
||||
* @param string $server 服务器
|
||||
* @param string $dbname 数据库
|
||||
* @param string $username 账户
|
||||
* @param string $password 密码
|
||||
* @param string $code 编码
|
||||
*/
|
||||
|
||||
/**
|
||||
* 仅备份数据结构 不备份数据的表
|
||||
*/
|
||||
private $_structuretable = [];
|
||||
|
||||
public function __construct($pdo)
|
||||
{
|
||||
$this->_pdo = $pdo;
|
||||
}
|
||||
|
||||
public function setvolsize($size)
|
||||
{
|
||||
$this->_volsize = $size;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function settablelist($tablelist = [])
|
||||
{
|
||||
$this->_tablelist = $tablelist;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function gettablelist()
|
||||
{
|
||||
if (!$this->_tablelist) {
|
||||
$rs = $this->_pdo->query('show table status');
|
||||
$res = $rs->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach ($res as $r) {
|
||||
$this->_tablelist[] = $r['Name'];
|
||||
}
|
||||
}
|
||||
return $this->_tablelist;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置备份目录
|
||||
*/
|
||||
public function setbackdir($dir)
|
||||
{
|
||||
if ($this->_backdir) {
|
||||
return $this;
|
||||
}
|
||||
$this->_backdir = $dir;
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0777);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getbackdir()
|
||||
{
|
||||
return $this->_backdir;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置文件名
|
||||
* @param string $filename
|
||||
* @return $this
|
||||
*/
|
||||
public function setfilename($filename)
|
||||
{
|
||||
|
||||
$this->_filename = $filename;
|
||||
if (!is_file($this->_backdir . '/' . $this->_filename)) {
|
||||
fopen($this->_backdir . '/' . $this->_filename, "x+");
|
||||
}
|
||||
// return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件名
|
||||
* @return string
|
||||
*/
|
||||
public function getfilename()
|
||||
{
|
||||
if (!$this->_filename) {
|
||||
$this->_filename = isset($this->_tablelist[$this->_nowtableidx]) ? $this->_tablelist[$this->_nowtableidx] . '#0.sql' : '';
|
||||
}
|
||||
if (!is_file($this->_backdir . '/' . $this->_filename)) {
|
||||
fopen($this->_backdir . '/' . $this->_filename, "x+");
|
||||
}
|
||||
return $this->_filename;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 设置是否仅备份结构
|
||||
*/
|
||||
public function setonlystructure($bool)
|
||||
{
|
||||
$this->_onlystructure = $bool;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getonlystructure()
|
||||
{
|
||||
return $this->_onlystructure;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置仅备份表结构 不备份数据的表
|
||||
*/
|
||||
public function setstructuretable($table = [])
|
||||
{
|
||||
$this->_structuretable = $table;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getstructuretable()
|
||||
{
|
||||
return $this->_structuretable;
|
||||
}
|
||||
/**
|
||||
* 备份
|
||||
*
|
||||
* 正在备份的表
|
||||
* 正在备份的表的索引
|
||||
* 正在备份的表已备份的记录数
|
||||
* 正在备份的表总记录数
|
||||
* 当前备份表百分比
|
||||
* 总百分比
|
||||
*/
|
||||
public function backup()
|
||||
{
|
||||
$totalpercentage = 100; //默认总百分比 0%
|
||||
$tablelist = $this->gettablelist(); //所有的表列表
|
||||
|
||||
$nowtable = '';
|
||||
|
||||
//上一次备份的表完成100% 将备份下一个表
|
||||
if (
|
||||
$this->_nowtablepercentage >= 100 &&
|
||||
isset($tablelist[$this->_nowtableidx + 1])
|
||||
) {
|
||||
$this->_nowtableidx = $this->_nowtableidx + 1;
|
||||
$this->_nowtableexeccount = $this->_nowtabletotal = 0;
|
||||
$this->setfilename($tablelist[$this->_nowtableidx] . '#0.sql');
|
||||
}
|
||||
|
||||
//备份表开始 默认第一个
|
||||
if (isset($tablelist[$this->_nowtableidx])) {
|
||||
|
||||
$nowtable = $tablelist[$this->_nowtableidx]; //当前正在备份的表
|
||||
|
||||
$sqlstr = '';
|
||||
if ($this->_nowtableexeccount == 0) { //将要执行表已备份的sql记录数
|
||||
//Drop 建表
|
||||
$sqlstr .= 'DROP TABLE IF EXISTS `' . $nowtable . '`;' . PHP_EOL;
|
||||
$rs = $this->_pdo->query('SHOW CREATE TABLE `' . $nowtable . '`');
|
||||
$res = $rs->fetchAll();
|
||||
$sqlstr .= $res[0][1] . ';' . PHP_EOL;
|
||||
file_put_contents($this->_backdir . DIRECTORY_SEPARATOR . $this->getfilename(), file_get_contents($this->_backdir . DIRECTORY_SEPARATOR . $this->getfilename()) . $sqlstr);
|
||||
|
||||
if ($this->getonlystructure() === false && !in_array($nowtable, $this->getstructuretable())) {
|
||||
$this->gettabletotal($nowtable); //当前备份表总条数
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->_nowtableexeccount < $this->_nowtabletotal) {
|
||||
|
||||
//建记录SQL语句 并设置已经备份的条数
|
||||
$this->_singleinsertrecord($nowtable, $this->_nowtableexeccount);
|
||||
}
|
||||
|
||||
|
||||
//计算单表百分比
|
||||
if ($this->_nowtabletotal != 0) {
|
||||
$this->_nowtablepercentage = $this->_nowtableexeccount / $this->_nowtabletotal * 100;
|
||||
} else {
|
||||
$this->_nowtablepercentage = 100;
|
||||
}
|
||||
|
||||
if ($this->_nowtablepercentage == 100) {
|
||||
$totalpercentage = ($this->_nowtableidx + 1) / count($tablelist) * 100;
|
||||
} else {
|
||||
$totalpercentage = ($this->_nowtableidx) / count($tablelist) * 100;
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'nowtable' => $nowtable, //当前正在备份的表
|
||||
'nowtableidx' => $this->_nowtableidx, //当前正在备份表的索引
|
||||
'nowtableexeccount' => $this->_nowtableexeccount, //当前表已备份条数
|
||||
'nowtabletotal' => $this->_nowtabletotal, //当前表总条数
|
||||
'totalpercentage' => (int) $totalpercentage, //总百分比
|
||||
'tablepercentage' => (int) $this->_nowtablepercentage, //当前表百分比
|
||||
'backfilename' => $this->getfilename(),
|
||||
];
|
||||
}
|
||||
|
||||
public function ajaxbackup($preresult = [])
|
||||
{
|
||||
|
||||
if ($this->getbackdir() == '' && !isset($preresult['backdir'])) {
|
||||
throw new Exception('请先设置备份目录');
|
||||
}
|
||||
|
||||
if (isset($preresult['backdir'])) {
|
||||
$this->setbackdir($preresult['backdir']);
|
||||
}
|
||||
unset($preresult['backdir']);
|
||||
if ($preresult) {
|
||||
$this->_nowtableidx = $preresult['nowtableidx'];
|
||||
$this->_nowtableexeccount = $preresult['nowtableexeccount'];
|
||||
$this->_nowtabletotal = $preresult['nowtabletotal'];
|
||||
$this->_nowtablepercentage = (int) $preresult['tablepercentage'];
|
||||
$this->setfilename($preresult['backfilename']);
|
||||
}
|
||||
|
||||
$result = $this->backup();
|
||||
$result['backdir'] = $this->getbackdir();
|
||||
return $result;
|
||||
}
|
||||
|
||||
//获取表中总条数
|
||||
public function gettabletotal($table)
|
||||
{
|
||||
$value = $this->_pdo->query('select count(*) from ' . $table);
|
||||
$counts = $value->fetchAll(PDO::FETCH_NUM);
|
||||
return $this->_nowtabletotal = $counts[0][0];
|
||||
}
|
||||
|
||||
private function _singleinsertrecord($tablename, $limit)
|
||||
{
|
||||
$sql = 'select * from `' . $tablename . '` limit ' . $limit . ',' . $this->_totallimit;
|
||||
$valuers = $this->_pdo->query($sql);
|
||||
$valueres = $valuers->fetchAll(PDO::FETCH_NUM);
|
||||
$insertsqlv = '';
|
||||
$insertsql = 'insert into `' . $tablename . '` VALUES ';
|
||||
foreach ($valueres as $v) {
|
||||
$insertsqlv .= ' ( ';
|
||||
|
||||
foreach ($v as $_v) {
|
||||
$insertsqlv .= $this->_pdo->quote($_v) . ",";
|
||||
}
|
||||
$insertsqlv = rtrim($insertsqlv, ',');
|
||||
$insertsqlv .= ' ),';
|
||||
}
|
||||
$insertsql .= rtrim($insertsqlv, ',') . ' ;' . PHP_EOL;
|
||||
$this->_checkfilesize();
|
||||
file_put_contents($this->_backdir . '/' . $this->getfilename(), file_get_contents($this->_backdir . '/' . $this->getfilename()) . $insertsql);
|
||||
$this->_nowtableexeccount += $this->_totallimit;
|
||||
$this->_nowtableexeccount = $this->_nowtableexeccount >= $this->_nowtabletotal ? $this->_nowtabletotal : $this->_nowtableexeccount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查文件大小
|
||||
*/
|
||||
private function _checkfilesize()
|
||||
{
|
||||
clearstatcache();
|
||||
$b = filesize($this->_backdir . '/' . $this->getfilename()) < $this->_volsize * 1024 * 1024 ? true : false;
|
||||
if ($b === false) {
|
||||
$filearr = explode('#', $this->getfilename());
|
||||
if (count($filearr) == 2) {
|
||||
$fileext = explode('.', $filearr[1]); //.sql
|
||||
$filename = $filearr[0] . '#' . ($fileext[0] + 1) . '.sql';
|
||||
$this->setfilename($filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
126
vendor/lotofbadcode/phpspirit_databackup/src/mysql/Recovery.php
vendored
Normal file
126
vendor/lotofbadcode/phpspirit_databackup/src/mysql/Recovery.php
vendored
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace phpspirit\databackup\mysql;
|
||||
|
||||
use PDO;
|
||||
use Exception;
|
||||
use phpspirit\databackup\IRecovery;
|
||||
|
||||
|
||||
class Recovery implements IRecovery
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* SQL文件所在的目录
|
||||
* @var string
|
||||
*/
|
||||
private $_sqlfiledir = '';
|
||||
|
||||
/**
|
||||
* SQL文件数组
|
||||
* @var array
|
||||
*/
|
||||
private $_sqlfilesarr = [];
|
||||
|
||||
/**
|
||||
* 当前恢复文件数组的索引
|
||||
* @var int
|
||||
*/
|
||||
private $_nowfileidx = 0;
|
||||
|
||||
/**
|
||||
* 下一个恢复的文件
|
||||
* @var int
|
||||
*/
|
||||
private $_nextfileidx = 0;
|
||||
|
||||
|
||||
public function __construct($pdo)
|
||||
{
|
||||
$this->_pdo = $pdo;
|
||||
}
|
||||
|
||||
public function setSqlfiledir($dir)
|
||||
{
|
||||
$this->_sqlfiledir = $dir;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getfiles()
|
||||
{
|
||||
if (!$this->_sqlfilesarr) {
|
||||
$dir = $this->_sqlfiledir;
|
||||
$iterator = new \DirectoryIterator($dir);
|
||||
$filesarr = [];
|
||||
foreach ($iterator as $it) {
|
||||
if (!$it->isDot()) {
|
||||
$filenameinfo = explode('#', $it->getFilename());
|
||||
$fileext = explode('.', $filenameinfo[1]);
|
||||
$filesarr[$filenameinfo[0]][$fileext[0]] = $it->getFilename();
|
||||
}
|
||||
}
|
||||
ksort($filesarr);
|
||||
foreach ($filesarr as $k => $f) {
|
||||
ksort($f);
|
||||
$filesarr[$k] = $f;
|
||||
}
|
||||
foreach ($filesarr as $f) {
|
||||
foreach ($f as $_f) {
|
||||
$this->_sqlfilesarr[] = $_f;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->_sqlfilesarr;
|
||||
}
|
||||
|
||||
public function recovery()
|
||||
{
|
||||
try {
|
||||
$filesarr = $this->getfiles();
|
||||
$totalpercentage = 100;
|
||||
$this->_nowfileidx = $this->_nextfileidx;
|
||||
if (isset($filesarr[$this->_nowfileidx])) {
|
||||
$this->_importsqlfile($this->_sqlfiledir . DIRECTORY_SEPARATOR . $filesarr[$this->_nowfileidx]);
|
||||
$totalpercentage = $this->_nowfileidx / count($this->_sqlfilesarr) * 100;
|
||||
$this->_nextfileidx = $this->_nowfileidx + 1;
|
||||
}
|
||||
return [
|
||||
'nowfileidex' => $this->_nowfileidx, //当前正在恢复的文件
|
||||
'nextfileidx' => $this->_nextfileidx,
|
||||
'totalpercentage' => (int) $totalpercentage, //总百分比
|
||||
];
|
||||
} catch (Exception $ex) {
|
||||
throw $ex;
|
||||
}
|
||||
}
|
||||
|
||||
public function ajaxrecovery($preresult = [])
|
||||
{
|
||||
if($preresult)
|
||||
{
|
||||
$this->_nowfileidx = $preresult['nowfileidex'];
|
||||
$this->_nextfileidx = $preresult['nextfileidx'];
|
||||
}
|
||||
$result = $this->recovery();
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function _importsqlfile($sqlfile)
|
||||
{
|
||||
if (is_file($sqlfile)) {
|
||||
try {
|
||||
$content = file_get_contents($sqlfile);
|
||||
$arr = explode(';' . PHP_EOL, $content);
|
||||
foreach ($arr as $a) {
|
||||
if (trim($a) != '') {
|
||||
$this->_pdo->exec($a);
|
||||
}
|
||||
}
|
||||
} catch (Exception $ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
10
vendor/phpmailer/phpmailer/README.md
vendored
10
vendor/phpmailer/phpmailer/README.md
vendored
@ -167,15 +167,9 @@ Build status: [](h
|
||||
If this isn't passing, is there something you can do to help?
|
||||
|
||||
## Security
|
||||
Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately.
|
||||
Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately.
|
||||
|
||||
PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.
|
||||
|
||||
PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).
|
||||
|
||||
PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a critical remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).
|
||||
|
||||
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for more detail on security issues.
|
||||
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for details on security issues.
|
||||
|
||||
## Contributing
|
||||
Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).
|
||||
|
2
vendor/phpmailer/phpmailer/VERSION
vendored
2
vendor/phpmailer/phpmailer/VERSION
vendored
@ -1 +1 @@
|
||||
6.1.7
|
||||
6.2.0
|
22
vendor/phpmailer/phpmailer/composer.json
vendored
22
vendor/phpmailer/phpmailer/composer.json
vendored
@ -21,26 +21,30 @@
|
||||
],
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/synchro",
|
||||
"url": "https://github.com/Synchro",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"ext-ctype": "*",
|
||||
"ext-filter": "*"
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^2.2",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7",
|
||||
"doctrine/annotations": "^1.2"
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"doctrine/annotations": "^1.2",
|
||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"squizlabs/php_codesniffer": "^3.5.6",
|
||||
"yoast/phpunit-polyfills": "^0.2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||
},
|
||||
"autoload": {
|
||||
|
10
vendor/phpmailer/phpmailer/get_oauth_token.php
vendored
10
vendor/phpmailer/phpmailer/get_oauth_token.php
vendored
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHPMailer - PHP email creation and transport class.
|
||||
* PHP Version 5.5
|
||||
@ -8,7 +9,7 @@
|
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
|
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
|
||||
* @author Brent R. Matzelle (original founder)
|
||||
* @copyright 2012 - 2017 Marcus Bointon
|
||||
* @copyright 2012 - 2020 Marcus Bointon
|
||||
* @copyright 2010 - 2012 Jim Jagielski
|
||||
* @copyright 2004 - 2009 Andy Prevost
|
||||
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
|
||||
@ -16,6 +17,7 @@
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get an OAuth2 token from an OAuth2 provider.
|
||||
* * Install this script on your server so that it's accessible
|
||||
@ -44,7 +46,7 @@ use Hayageek\OAuth2\Client\Provider\Yahoo;
|
||||
use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
|
||||
|
||||
if (!isset($_GET['code']) && !isset($_GET['provider'])) {
|
||||
?>
|
||||
?>
|
||||
<html>
|
||||
<body>Select Provider:<br/>
|
||||
<a href='?provider=Google'>Google</a><br/>
|
||||
@ -52,8 +54,8 @@ if (!isset($_GET['code']) && !isset($_GET['provider'])) {
|
||||
<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br/>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
exit;
|
||||
<?php
|
||||
exit;
|
||||
}
|
||||
|
||||
require 'vendor/autoload.php';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Afrikaans PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Arabic PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Azerbaijani PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Bosnian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
@ -23,4 +24,4 @@ $PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP server nije uspjelo.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP greška: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Nije moguće postaviti varijablu ili je vratiti nazad: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: ';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Belarusian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Bulgarian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Catalan PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chinese PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Czech PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,10 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Danish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author John Sebastian <jms@iwb.dk>
|
||||
* Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
|
||||
*
|
||||
* Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
|
||||
*
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* German PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
@ -15,6 +16,8 @@ $PHPMAILER_LANG['file_open'] = 'Dateifehler: Konnte folgende Datei ni
|
||||
$PHPMAILER_LANG['from_failed'] = 'Die folgende Absenderadresse ist nicht korrekt: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Mail-Funktion konnte nicht initialisiert werden.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Die Adresse ist ungültig: ';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Ungültiger Hosteintrag: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Ungültiger Host: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Greek PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Esperanto PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Spanish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Estonian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Persian/Farsi PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Finnish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Faroese PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* French PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
@ -19,6 +20,8 @@ $PHPMAILER_LANG['file_open'] = 'Ouverture du fichier impossible : '
|
||||
$PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a échoué : ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'L\'adresse courriel n\'est pas valide : ';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'L\'entrée hôte n\'est pas valide : ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'L\'hôte n\'est pas valide : ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : les destinataires suivants sont en erreur : ';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Galician PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Hebrew PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,10 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Hindi PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Yash Karanke <mr.karanke@gmail.com>
|
||||
*/
|
||||
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। ';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। ';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। ';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Croatian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Hungarian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,10 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Armenian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Hrayr Grigoryan <hrayr@bits.am>
|
||||
*/
|
||||
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';
|
||||
|
@ -1,9 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Indonesian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Cecep Prawiro <cecep.prawiro@gmail.com>
|
||||
* @author @januridp
|
||||
* @author Ian Mustafa <mail@ianmustafa.com>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';
|
||||
@ -11,17 +13,19 @@ $PHPMAILER_LANG['connect_host'] = 'Kesalahan SMTP: Tidak dapat terhubung
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Kesalahan SMTP: Data tidak diterima.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Isi pesan kosong';
|
||||
$PHPMAILER_LANG['encoding'] = 'Pengkodean karakter tidak dikenali: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses : ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas : ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Kesalahan File: Berkas tidak dapat dibuka : ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan : ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak benar : ';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Harus disediakan minimal satu alamat tujuan';
|
||||
$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Kesalahan Berkas: Berkas tidak dapat dibuka: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak sesuai: ';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Gagal terkirim, entri host tidak sesuai: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Gagal terkirim, host tidak sesuai: ';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Harus tersedia minimal satu alamat tujuan';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan kesalahan : ';
|
||||
$PHPMAILER_LANG['signing'] = 'Kesalahan dalam tanda tangan : ';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Kesalahan dalam penandatangan SSL: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() gagal.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP : ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variable : ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Ekstensi hilang: ';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variabel: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Ekstensi PHP tidak tersedia: ';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Italian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Japanese PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Georgian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Korean PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Lithuanian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Latvian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,9 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Malagasy PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Hackinet <piyushjha8164@gmail.com>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP diso: tsy voarakitra ny angona.';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Malaysian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Norwegian Bokmål PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Polish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
@ -14,7 +15,7 @@ $PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, '.
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' .
|
||||
'następujący adres Odbiorcy jest nieprawidłowy: ';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Portuguese (European) PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Romanian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Russian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Slovak PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,9 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Slovene PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Klemen Tušar <techouse@gmail.com>
|
||||
* @author Filip Š <projects@filips.si>
|
||||
* @author Blaž Oražem <blaz@orazem.si>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.';
|
||||
@ -17,8 +19,10 @@ $PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Neveljaven vnos gostitelja: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Neveljaven gostitelj: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Prosim vnesite vsaj enega naslovnika.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Prosimo, vnesite vsaj enega naslovnika.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Serbian PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Swedish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user