From 428c9b4935bbc9dd81fded7b53f3b2fb98070638 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 09:28:19 +0800 Subject: [PATCH 1/6] node api-0.1.0-alpha --- Node.JS/Md5.js | 15 ------ Node.JS/SqlDrive.js | 84 ---------------------------------- Node/.gitignore | 2 + Node/README.md | 24 ++++++++++ Node/drive.ts | 96 +++++++++++++++++++++++++++++++++++++++ {Node.JS => Node}/main.js | 0 Node/package.json | 29 ++++++++++++ {Node.JS => Node}/test.js | 0 Python/drive/driver.py | 34 +++++++------- 9 files changed, 168 insertions(+), 116 deletions(-) delete mode 100755 Node.JS/Md5.js delete mode 100755 Node.JS/SqlDrive.js create mode 100644 Node/.gitignore create mode 100644 Node/README.md create mode 100644 Node/drive.ts rename {Node.JS => Node}/main.js (100%) mode change 100755 => 100644 create mode 100644 Node/package.json rename {Node.JS => Node}/test.js (100%) mode change 100755 => 100644 diff --git a/Node.JS/Md5.js b/Node.JS/Md5.js deleted file mode 100755 index 74afbc7..0000000 --- a/Node.JS/Md5.js +++ /dev/null @@ -1,15 +0,0 @@ -const crypto = require('crypto') - -/** - * md5 加密 - * @param {String} content 明文 - */ -function _md5(content) { - const md5 = crypto.createHash('md5') - return md5.update(content).digest('hex') -} -function doCrypto(content) { - const str = `password=${content}&key=${CRYPTO_SECRET_KEY}` - return _md5(str) -} -module.exports = {_md5,doCrypto}; \ No newline at end of file diff --git a/Node.JS/SqlDrive.js b/Node.JS/SqlDrive.js deleted file mode 100755 index ac413cb..0000000 --- a/Node.JS/SqlDrive.js +++ /dev/null @@ -1,84 +0,0 @@ - -var _md5 = require("./Md5"); -function setRemote(remote) { - /** - * Remote Value = Url + Port || Or only use url; - */ - this.remote = remote; -} -function setLoginUser(user) { - this.user = user; -} -function setLoginPasswd(passwd){ - this.passwd = _md5._md5(passwd); -} -function run(command) { - //console.log(this.user+" "+this.passwd+" "+this.command); - var http = require('http'); - try{ - http.get(this.remote+"/?Logon="+this.user+"?Passwd="+this.passwd+"?Command="+command, function(res) { - var data = ''; - var mes = ""; - res.setEncoding("utf8"); - res.on('data', function(chunk) { - data += chunk; - }).on('end', function() { - var s = data.split("\n"); - for (var i = 0 ; i < s.length ; i++) { - if (s[i] == "") { - break; - } - console.log(" -- "+s[i]); - } - }).on('err', function () { - return false; - }); - }); - return true; - }catch (err) { - console.log(err); - return false; - } -} -function createData(name,value,note,database) { - run("create data '"+name+"' setting('"+value+"','"+note+"') in "+database); -} -function createDatabase(name) { - run("create database '"+name+"'"); -} -function deleteData(name,database) { - run("delete data '"+name+"' in "+database); -} -function deleteDatabase(name) { - run("delete database "+name); -} -function findData(name) { - run("find data "+name); -} -function findDatabase(name) { - run("find database "+name); -} -function indexData(name,database) { - run("index '"+name+"' in "+database); -} -function reNameDatabase(database,rename) { - run("rename database '"+database+"' '"+rename+"'"); -} -function reNameData(data,rename,database) { - run("rename data '"+database+"' '"+rename+"' in "+database); -} - -module.exports = { - createData, - createDatabase, - deleteData, - deleteDatabase, - findData, - findDatabase, - indexData, - reNameData, - reNameDatabase, - setLoginPasswd, - setLoginUser, - setRemote -}; \ No newline at end of file diff --git a/Node/.gitignore b/Node/.gitignore new file mode 100644 index 0000000..25c8fdb --- /dev/null +++ b/Node/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json \ No newline at end of file diff --git a/Node/README.md b/Node/README.md new file mode 100644 index 0000000..a108698 --- /dev/null +++ b/Node/README.md @@ -0,0 +1,24 @@ +# Node Api +### 安装依赖 +>npm 安装 +>```commandline +>npm install +>``` + +>yarn 安装 +>```commandline +>yarn install +>``` + +>pnpm 安装 +>```commandline +>pnpm install +>``` + +### 示例 +```typescript + +``` + +### Shell +示例 \ No newline at end of file diff --git a/Node/drive.ts b/Node/drive.ts new file mode 100644 index 0000000..1fec973 --- /dev/null +++ b/Node/drive.ts @@ -0,0 +1,96 @@ +const md5 = require("md5-node"); +const http = require('http'); + +console.log(md5("123456")) +export class Driver { + public host: string; + public port: number; + public username: string; + public password: string; + public enable_ssl: boolean; + public remote: string; + public constructor (username: string, password: string, host: string = "127.0.0.1", port: number = 8888, enable_ssl: boolean = false) { + /** + * @param username: user name (like root, linwin) + * @param password: raw password (like 123456) + * @param host: host name of the database (like 127.0.0.1, localhost, example.org) + * @param port: port of the database, default is 8888 + * @param enable_ssl: enable ssl. if the variable is true, it will be https:// . + **/ + + this.host = host; + this.port = port; + this.enable_ssl = enable_ssl; + this.remote = `${this.enable_ssl?'https':'http'}://${this.host}:${this.port}/` + this.username = username; + this.password = md5(password); + } + protected _execute(script: string, callback: (data: string) => any): void { + http.get( + `${this.remote}/?Logon=${this.username}?Passwd=${this.password}?Command=${script}`, + function (response) { + response.setEncoding("utf8"); + let data: string = ''; + response.on('data', function (chunk) { + data += chunk; + }).on('end', callback); + } + ) + } + + public execute(script: string, callback: (data: string) => any): void { + this._execute(script, function(data: string) { + if (data == '\n') { + throw new Error('Request execution failure!'); + } else { + return callback(data.trim()); + } + }) + } + + public execute_ignore(script: string, callback : (response: boolean) => any): void { + this._execute(script, function(data: string) { + return callback(data !== '\n'); + }) + } + + public createData(name: string, value: string, note: string, database: string, callback: (data: string) => any): void { + this.execute(`create data '${name}' setting('${value}','${note}') in ${database}`, callback); + } + public createDatabase(name: string, callback: (data: boolean) => any): void { + this.execute_ignore(`create database '${name}'`, callback); + } + public renameDatabase(database: string, rename: string, callback: (data: boolean) => any): void { + this.execute_ignore(`rename database '${database}' '${rename}'`, callback); + } + public renameData(data: string, rename: string, database: string, callback: (data: boolean) => any): void { + this.execute_ignore(`rename data '${database}' '${rename}' in ${database}`, callback); + } + public findData(name: string, callback: (data: object) => any): void { + this.execute(`find data ${name}`, (data: string) => (callback(data.split("\n")))); + } + public findDatabase(name: string, callback: (data: object) => any): void { + this.execute(`find database ${name}`, (data: string) => callback(data.split("\n"))); + } + public getData(name: string, type: string, database: string, callback: (data: string) => any): void { + this.execute(``, (data: string) => (callback(data.replace("\n", "")))) + } + public indexData(name: string,database: string, callback : (data : object) => any): void { + this.execute(`index '${name}' in ${database}`, (data: string) => (callback(data.split("\n")))); + } + public deleteData(name: string, database: string, callback: (data: boolean) => any): void { + this.execute_ignore(`delete data '${name}' in ${database}`, callback); + } + public deleteDatabase(name: string, callback: (data: boolean) => any): void { + this.execute_ignore(`delete database ${name}`, callback); + } + public copyDatabase(name: string, target: string, callback: (data: boolean) => any): void { + this.execute_ignore(`copy '${name}' '${target}'`, callback) + } + public listDatabase(callback: (data: object) => any): void { + this.execute('list database', (data: string) => (data.split("\n"))) + } + public listDataFromDatabase(database: string, callback: (data: object) => any): void { + this.execute(`ls ${database}`, (data: string) => (data.split("\n"))) + } +} \ No newline at end of file diff --git a/Node.JS/main.js b/Node/main.js old mode 100755 new mode 100644 similarity index 100% rename from Node.JS/main.js rename to Node/main.js diff --git a/Node/package.json b/Node/package.json new file mode 100644 index 0000000..5021de9 --- /dev/null +++ b/Node/package.json @@ -0,0 +1,29 @@ +{ + "name": "linwindb", + "version": "1.0.0", + "description": "the node API of Linwin DB Server", + "main": "main.js", + "scripts": { + "test": "test.js" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/LinwinSoft/open-data-api" + }, + "keywords": [ + "Linwin DB Server", + "database", + "api" + ], + "author": "Linwin-cloud & zmh-program", + "license": "Apache-2.0", + "dependencies": { + "http": "^0.0.1-security", + "md5-node": "^1.0.1", + "ts-node": "^10.9.1" + }, + "devDependencies": { + "@types/node": "^18.11.18", + "typescript": "^4.9.5" + } +} diff --git a/Node.JS/test.js b/Node/test.js old mode 100755 new mode 100644 similarity index 100% rename from Node.JS/test.js rename to Node/test.js diff --git a/Python/drive/driver.py b/Python/drive/driver.py index 5378405..98c60a0 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -57,27 +57,18 @@ class Driver(object): def __str__(self) -> str: return f"Driver(username={self.username}, password={self.password}, remote={self.remote})" - def listDatabase(self) -> List[str]: - return self.execute("list database").split("\n") - - def deleteDatabase(self, name: str) -> bool: - return self.execute_ignore(f"delete database {name}") - - def deleteData(self, name: str, database: str) -> bool: - return self.execute_ignore(f"delete data '{name}' in {database}") - - def renameDatabase(self, name: str, NewName: str) -> bool: - return self.execute_ignore(f"rename database '{name}' '{NewName}'") - - def renameData(self, name: str, NewName: str, database: str) -> bool: - return self.execute_ignore(f"rename data '{name}' '{NewName}' in {database}") - def createDatabase(self, name: str) -> bool: return self.execute_ignore(f"create database '{name}'") def createData(self, name: str, database: str) -> bool: return self.execute_ignore(f"create data '{name}' in {database}") + def renameDatabase(self, name: str, rename: str) -> bool: + return self.execute_ignore(f"rename database '{name}' '{rename}'") + + def renameData(self, name: str, rename: str, database: str) -> bool: + return self.execute_ignore(f"rename data '{name}' '{rename}' in {database}") + def findDatabase(self, index: str) -> List[str]: return self.execute(f"find database {index}").split("\n") @@ -90,8 +81,17 @@ class Driver(object): def indexData(self, index: str, database: str) -> List[str]: return self.execute(f"index '{index}' in {database}").split("\n") + def deleteDatabase(self, name: str) -> bool: + return self.execute_ignore(f"delete database {name}") + + def deleteData(self, name: str, database: str) -> bool: + return self.execute_ignore(f"delete data '{name}' in {database}") + def copyDatabase(self, name: str, target: str) -> bool: return self.execute_ignore(f"copy '{name}' '{target}'") - def iterFromDatabase(self, database: str) -> Iterable[str]: - return iter(self.execute(f"ls {database}").split("\n")) + def listDatabase(self) -> List[str]: + return self.execute("list database").split("\n") + + def listDataFromDatabase(self, database: str) -> List[str]: + return self.execute(f"ls {database}").split("\n") -- Gitee From 178d149093f5c988ed52ed2712b20fe8e633d8eb Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 09:32:05 +0800 Subject: [PATCH 2/6] node api-0.1.0-beta --- Node/drive.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Node/drive.ts b/Node/drive.ts index 1fec973..17a9577 100644 --- a/Node/drive.ts +++ b/Node/drive.ts @@ -8,7 +8,8 @@ export class Driver { public username: string; public password: string; public enable_ssl: boolean; - public remote: string; + private readonly remote: string; + public constructor (username: string, password: string, host: string = "127.0.0.1", port: number = 8888, enable_ssl: boolean = false) { /** * @param username: user name (like root, linwin) @@ -38,6 +39,10 @@ export class Driver { ) } + public getRemote(): string { + return this.remote; + } + public execute(script: string, callback: (data: string) => any): void { this._execute(script, function(data: string) { if (data == '\n') { @@ -88,9 +93,9 @@ export class Driver { this.execute_ignore(`copy '${name}' '${target}'`, callback) } public listDatabase(callback: (data: object) => any): void { - this.execute('list database', (data: string) => (data.split("\n"))) + this.execute('list database', (data: string) => (callback(data.split("\n")))) } public listDataFromDatabase(database: string, callback: (data: object) => any): void { - this.execute(`ls ${database}`, (data: string) => (data.split("\n"))) + this.execute(`ls ${database}`, (data: string) => (callback(data.split("\n")))) } } \ No newline at end of file -- Gitee From b8196c4dafa8d3f9e38721239d5d61b129a1583d Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 09:56:48 +0800 Subject: [PATCH 3/6] node api-0.1 --- Node/drive.ts | 10 ++++---- Node/main.js | 54 ------------------------------------------ Node/main.ts | 1 + Node/package.json | 4 ++-- Node/test.js | 6 ----- Node/test.ts | 12 ++++++++++ Python/drive/driver.py | 4 ++-- 7 files changed, 23 insertions(+), 68 deletions(-) delete mode 100644 Node/main.js create mode 100644 Node/main.ts delete mode 100644 Node/test.js create mode 100644 Node/test.ts diff --git a/Node/drive.ts b/Node/drive.ts index 17a9577..a716892 100644 --- a/Node/drive.ts +++ b/Node/drive.ts @@ -1,8 +1,10 @@ +import {IncomingMessage} from "http"; + const md5 = require("md5-node"); const http = require('http'); console.log(md5("123456")) -export class Driver { +export default class Driver { public host: string; public port: number; public username: string; @@ -29,10 +31,10 @@ export class Driver { protected _execute(script: string, callback: (data: string) => any): void { http.get( `${this.remote}/?Logon=${this.username}?Passwd=${this.password}?Command=${script}`, - function (response) { + function (response: IncomingMessage) { response.setEncoding("utf8"); - let data: string = ''; - response.on('data', function (chunk) { + let data = ''; + response.on('data', function (chunk: any) { data += chunk; }).on('end', callback); } diff --git a/Node/main.js b/Node/main.js deleted file mode 100644 index 9d14288..0000000 --- a/Node/main.js +++ /dev/null @@ -1,54 +0,0 @@ -var _md5 = require("./Md5"); - -var message = ""; - -function setLoginUser(user) { - this.user = user; -} -function setLoginPasswd(passwd){ - this.passwd = _md5._md5(passwd); -} -function setCommand(line) { - this.command = line; -} -function setRemote(remote) { - /** - * Remote Value = Url + Port || Or only use url; - */ - this.remote = remote; -} -function setMes(mes) { - message = mes; -} -function getContent() { - return message; -} -function run() { - //console.log(this.user+" "+this.passwd+" "+this.command); - var http = require('http'); - try{ - http.get(this.remote+"/?Logon="+this.user+"?Passwd="+this.passwd+"?Command="+this.command, function(res) { - var data = ''; - var mes = ""; - res.setEncoding("utf8"); - res.on('data', function(chunk) { - data += chunk; - }).on('end', function() { - var s = data.split("\n"); - for (var i = 0 ; i < s.length ; i++) { - if (s[i] == "") { - break; - } - console.log(" -- "+s[i]); - } - }).on('err', function () { - return false; - }); - }); - return true; - }catch (err) { - console.log(err); - return false; - } -} -module.exports = {setLoginUser,setCommand,setLoginPasswd,run,setRemote,getContent,message}; \ No newline at end of file diff --git a/Node/main.ts b/Node/main.ts new file mode 100644 index 0000000..4dac671 --- /dev/null +++ b/Node/main.ts @@ -0,0 +1 @@ +export const Driver = require("./drive").default; diff --git a/Node/package.json b/Node/package.json index 5021de9..9797b46 100644 --- a/Node/package.json +++ b/Node/package.json @@ -2,9 +2,9 @@ "name": "linwindb", "version": "1.0.0", "description": "the node API of Linwin DB Server", - "main": "main.js", + "main": "main.ts", "scripts": { - "test": "test.js" + "test": "ts-node test.ts" }, "repository": { "type": "git", diff --git a/Node/test.js b/Node/test.js deleted file mode 100644 index 7505d4e..0000000 --- a/Node/test.js +++ /dev/null @@ -1,6 +0,0 @@ -var a = require( "./main" ); - -a.setCommand("list database"); -a.setLoginPasswd("123456"); -a.setLoginUser("root"); -a.setRemote("http://127.0.0.1:8888/"); \ No newline at end of file diff --git a/Node/test.ts b/Node/test.ts new file mode 100644 index 0000000..01b7254 --- /dev/null +++ b/Node/test.ts @@ -0,0 +1,12 @@ +const Driver = require("./main"); +const driver = new Driver.Driver( + "root", + "123456", + "127.0.0.1", + 8888, + false, +); + +driver.listDatabase( + console.log +); \ No newline at end of file diff --git a/Python/drive/driver.py b/Python/drive/driver.py index 98c60a0..cea73c7 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -60,8 +60,8 @@ class Driver(object): def createDatabase(self, name: str) -> bool: return self.execute_ignore(f"create database '{name}'") - def createData(self, name: str, database: str) -> bool: - return self.execute_ignore(f"create data '{name}' in {database}") + def createData(self, name: str, value: str, note: str, database: str) -> bool: + return self.execute_ignore(f"create data '{name}' setting('{value}','{note}') in {database}") def renameDatabase(self, name: str, rename: str) -> bool: return self.execute_ignore(f"rename database '{name}' '{rename}'") -- Gitee From 1bb8e904915ea73c8ce8c58de783e91b0c637904 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 10:33:57 +0800 Subject: [PATCH 4/6] node api-0.1 release --- Node/README.md | 35 ++++++++++++++++++++++++++--------- Node/drive.ts | 8 ++++---- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/Node/README.md b/Node/README.md index a108698..c35786b 100644 --- a/Node/README.md +++ b/Node/README.md @@ -1,24 +1,41 @@ # Node Api -### 安装依赖 ->npm 安装 ->```commandline +### 安装依赖 (npm, yarn, pnpm) +>**npm** 安装 +>```shell >npm install >``` ->yarn 安装 ->```commandline +>**yarn** 安装 +>```shell >yarn install >``` ->pnpm 安装 ->```commandline +>**pnpm** 安装 +>```shell >pnpm install >``` +### 测试 (以**npm**为例) +```commandline +npm test +``` ### 示例 +*example.**ts*** ```typescript +const Driver = require("./main"); +const driver = new Driver.Driver( + "root", // username + "123456", // password + "127.0.0.1", // hostname +); +driver.listDatabase( + console.log // callback +); ``` +运行 +```commandline +$ ts-node example.ts -### Shell -示例 \ No newline at end of file +[ 'linwin', 'wangguana', 'zmh-program' ] +``` \ No newline at end of file diff --git a/Node/drive.ts b/Node/drive.ts index a716892..91b8b98 100644 --- a/Node/drive.ts +++ b/Node/drive.ts @@ -1,9 +1,7 @@ -import {IncomingMessage} from "http"; - +import { IncomingMessage } from "http"; const md5 = require("md5-node"); const http = require('http'); -console.log(md5("123456")) export default class Driver { public host: string; public port: number; @@ -36,7 +34,9 @@ export default class Driver { let data = ''; response.on('data', function (chunk: any) { data += chunk; - }).on('end', callback); + }).on('end', function () { + callback(data); + }); } ) } -- Gitee From 175601909cb1e9cf75153f1b5176f9713a9c4d1b Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 10:35:20 +0800 Subject: [PATCH 5/6] node api-0.1 docs --- Node/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Node/README.md b/Node/README.md index c35786b..dea8b15 100644 --- a/Node/README.md +++ b/Node/README.md @@ -33,7 +33,7 @@ driver.listDatabase( console.log // callback ); ``` -运行 +##### 运行 ```commandline $ ts-node example.ts -- Gitee From 8ecd7c972b31b54bfffb50f15ca0d86dcfdd36bd Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Feb 2023 10:44:13 +0800 Subject: [PATCH 6/6] node api-0.1 fixed bug --- Node/drive.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Node/drive.ts b/Node/drive.ts index 91b8b98..f12f6d0 100644 --- a/Node/drive.ts +++ b/Node/drive.ts @@ -80,7 +80,7 @@ export default class Driver { this.execute(`find database ${name}`, (data: string) => callback(data.split("\n"))); } public getData(name: string, type: string, database: string, callback: (data: string) => any): void { - this.execute(``, (data: string) => (callback(data.replace("\n", "")))) + this.execute(`get '${name}'.${type} in ${database}`, (data: string) => (callback(data.replace("\n", "")))) } public indexData(name: string,database: string, callback : (data : object) => any): void { this.execute(`index '${name}' in ${database}`, (data: string) => (callback(data.split("\n")))); -- Gitee