@vtecx/vtecxnext 1.1.10 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/vtecxnext.d.ts +32 -0
- package/dist/vtecxnext.js +160 -10
- package/package.json +1 -1
package/dist/vtecxnext.d.ts
CHANGED
|
@@ -438,6 +438,38 @@ export declare const execBQ: (req: IncomingMessage, res: ServerResponse, sql: st
|
|
|
438
438
|
* @return true
|
|
439
439
|
*/
|
|
440
440
|
export declare const getBQCsv: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], filename?: string, parent?: string) => Promise<boolean>;
|
|
441
|
+
/**
|
|
442
|
+
* Execute a query SQL to the database and get the result.
|
|
443
|
+
* @param req request (for authentication)
|
|
444
|
+
* @param res response (for authentication)
|
|
445
|
+
* @param sql query sql
|
|
446
|
+
* @param values values of query arguments
|
|
447
|
+
* @param parent parent name of result json
|
|
448
|
+
* @return query results in JSON format
|
|
449
|
+
*/
|
|
450
|
+
export declare const queryRDB: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], parent?: string) => Promise<any>;
|
|
451
|
+
/**
|
|
452
|
+
* Search RDB and return results in CSV format.
|
|
453
|
+
* @param req request (for authentication)
|
|
454
|
+
* @param res response
|
|
455
|
+
* @param sql query sql
|
|
456
|
+
* @param values values of query arguments
|
|
457
|
+
* @param filename file name of csv
|
|
458
|
+
* @param parent parent name of result json
|
|
459
|
+
* @return true
|
|
460
|
+
*/
|
|
461
|
+
export declare const queryRDBCsv: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], filename?: string, parent?: string) => Promise<boolean>;
|
|
462
|
+
/**
|
|
463
|
+
* Execute SQL to the database.
|
|
464
|
+
* If there are multiple SQLs, they will be wrapped in a transaction.
|
|
465
|
+
* @param req request (for authentication)
|
|
466
|
+
* @param res response (for authentication)
|
|
467
|
+
* @param sqls sql list
|
|
468
|
+
* @param values values of query arguments
|
|
469
|
+
* @param async execute async
|
|
470
|
+
* @param isbulk execute with autocommit
|
|
471
|
+
*/
|
|
472
|
+
export declare const execRDB: (req: IncomingMessage, res: ServerResponse, sqls: string[], values?: any[][], async?: boolean, isbulk?: boolean) => Promise<any>;
|
|
441
473
|
/**
|
|
442
474
|
* Create PDF.
|
|
443
475
|
* Writes a PDF to the response.
|
package/dist/vtecxnext.js
CHANGED
|
@@ -27,8 +27,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.execBQ = exports.getBQ = exports.deleteBQ = exports.postBQ = exports.getPage = exports.pagination = exports.getSessionLong = exports.getSessionString = exports.getSessionEntry = exports.getSessionFeed = exports.deleteSessionLong = exports.deleteSessionString = exports.deleteSessionEntry = exports.deleteSessionFeed = exports.incrementSession = exports.setSessionLong = exports.setSessionString = exports.setSessionEntry = exports.setSessionFeed = exports.getRangeids = exports.rangeids = exports.setids = exports.getids = exports.addids = exports.allocids = exports.clearFolder = exports.deleteFolder = exports.deleteEntry = exports.put = exports.post = exports.countResponse = exports.count = exports.getFeedResponse = exports.getFeed = exports.getEntry = exports.log = exports.rxid = exports.service = exports.isLoggedin = exports.whoami = exports.account = exports.uid = exports.now = exports.logout = exports.loginWithTotp = exports.loginWithRxid = exports.login = exports.sendMessage = exports.checkXRequestedWith = exports.hello = void 0;
|
|
30
|
-
exports.
|
|
31
|
-
exports.FetchError = exports.VtecxNextError = exports.VtecxResponse = exports.isBlank = void 0;
|
|
30
|
+
exports.createTotp = exports.getTotpLink = exports.buffer = exports.oauthCallbackLine = exports.oauthLine = exports.removealias = exports.addalias = exports.removeacl = exports.addacl = exports.getcontenturl = exports.getcontent = exports.deletecontent = exports.putcontent = exports.savefiles = exports.deleteusers = exports.deleteuser = exports.canceluser = exports.activateusers = exports.activateuser = exports.revokeusers = exports.revokeuser = exports.userstatus = exports.changeaccount_verify = exports.changeaccount = exports.changepassByAdmin = exports.changepass = exports.passreset = exports.adduserByAdmin = exports.adduser = exports.isAdmin = exports.isGroupMember = exports.getGroups = exports.noGroupMember = exports.leaveGroup = exports.joinGroup = exports.getMessageQueue = exports.setMessageQueue = exports.getMessageQueueStatus = exports.setMessageQueueStatus = exports.pushNotification = exports.sendMail = exports.checkSignature = exports.deleteSignature = exports.putSignatures = exports.putSignature = exports.toPdf = exports.execRDB = exports.queryRDBCsv = exports.queryRDB = exports.getBQCsv = void 0;
|
|
31
|
+
exports.FetchError = exports.VtecxNextError = exports.VtecxResponse = exports.isBlank = exports.mergeOAuthUserLine = exports.changeTdid = exports.deleteTotp = void 0;
|
|
32
32
|
const sqlstring_1 = __importDefault(require("sqlstring"));
|
|
33
33
|
const formidable_1 = __importDefault(require("formidable"));
|
|
34
34
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -1513,7 +1513,7 @@ const execBQ = async (req, res, sql, values, parent) => {
|
|
|
1513
1513
|
// 入力チェック
|
|
1514
1514
|
checkNotNull(sql, 'Query SQL');
|
|
1515
1515
|
// 引数生成
|
|
1516
|
-
const feed =
|
|
1516
|
+
const feed = editSqlArgument(sql, values, parent);
|
|
1517
1517
|
// vte.cxへリクエスト
|
|
1518
1518
|
const method = 'PUT';
|
|
1519
1519
|
const url = `${SERVLETPATH_PROVIDER}/?_querybq`;
|
|
@@ -1550,7 +1550,7 @@ const getBQCsv = async (req, res, sql, values, filename, parent) => {
|
|
|
1550
1550
|
// 入力チェック
|
|
1551
1551
|
checkNotNull(sql, 'Query SQL');
|
|
1552
1552
|
// 引数生成
|
|
1553
|
-
const feed =
|
|
1553
|
+
const feed = editSqlArgument(sql, values, parent);
|
|
1554
1554
|
// vte.cxへリクエスト
|
|
1555
1555
|
const method = 'PUT';
|
|
1556
1556
|
const url = `${SERVLETPATH_PROVIDER}/?_querybq&_csv${filename ? '=' + filename : ''}`;
|
|
@@ -1580,6 +1580,124 @@ const getBQCsv = async (req, res, sql, values, filename, parent) => {
|
|
|
1580
1580
|
return true;
|
|
1581
1581
|
};
|
|
1582
1582
|
exports.getBQCsv = getBQCsv;
|
|
1583
|
+
/**
|
|
1584
|
+
* Execute a query SQL to the database and get the result.
|
|
1585
|
+
* @param req request (for authentication)
|
|
1586
|
+
* @param res response (for authentication)
|
|
1587
|
+
* @param sql query sql
|
|
1588
|
+
* @param values values of query arguments
|
|
1589
|
+
* @param parent parent name of result json
|
|
1590
|
+
* @return query results in JSON format
|
|
1591
|
+
*/
|
|
1592
|
+
const queryRDB = async (req, res, sql, values, parent) => {
|
|
1593
|
+
//console.log(`[vtecxnext queryRDB] start. sql=${sql} values=${values}`)
|
|
1594
|
+
// 入力チェック
|
|
1595
|
+
checkNotNull(sql, 'Query SQL');
|
|
1596
|
+
// 引数生成
|
|
1597
|
+
const feed = editSqlArgument(sql, values, parent);
|
|
1598
|
+
// vte.cxへリクエスト
|
|
1599
|
+
const method = 'PUT';
|
|
1600
|
+
const url = `${SERVLETPATH_PROVIDER}/?_queryrdb`;
|
|
1601
|
+
let response;
|
|
1602
|
+
try {
|
|
1603
|
+
response = await requestVtecx(method, url, req, JSON.stringify(feed));
|
|
1604
|
+
}
|
|
1605
|
+
catch (e) {
|
|
1606
|
+
throw newFetchError(e, true);
|
|
1607
|
+
}
|
|
1608
|
+
//console.log(`[vtecxnext execBQ] response. status=${response.status}`)
|
|
1609
|
+
// vte.cxからのset-cookieを転記
|
|
1610
|
+
setCookie(response, res);
|
|
1611
|
+
//console.log(`[vtecxnext execBQ] setCookie end.`)
|
|
1612
|
+
// レスポンスのエラーチェック
|
|
1613
|
+
await checkVtecxResponse(response);
|
|
1614
|
+
//console.log(`[vtecxnext execBQ] checkVtecxResponse end.`)
|
|
1615
|
+
// 戻り値
|
|
1616
|
+
return await response.json();
|
|
1617
|
+
};
|
|
1618
|
+
exports.queryRDB = queryRDB;
|
|
1619
|
+
/**
|
|
1620
|
+
* Search RDB and return results in CSV format.
|
|
1621
|
+
* @param req request (for authentication)
|
|
1622
|
+
* @param res response
|
|
1623
|
+
* @param sql query sql
|
|
1624
|
+
* @param values values of query arguments
|
|
1625
|
+
* @param filename file name of csv
|
|
1626
|
+
* @param parent parent name of result json
|
|
1627
|
+
* @return true
|
|
1628
|
+
*/
|
|
1629
|
+
const queryRDBCsv = async (req, res, sql, values, filename, parent) => {
|
|
1630
|
+
//console.log(`[vtecxnext queryRDBCsv] start. sql=${sql} values=${values}`)
|
|
1631
|
+
// 入力チェック
|
|
1632
|
+
checkNotNull(sql, 'Query SQL');
|
|
1633
|
+
// 引数生成
|
|
1634
|
+
const feed = editSqlArgument(sql, values, parent);
|
|
1635
|
+
// vte.cxへリクエスト
|
|
1636
|
+
const method = 'PUT';
|
|
1637
|
+
const url = `${SERVLETPATH_PROVIDER}/?_queryrdb&_csv${filename ? '=' + filename : ''}`;
|
|
1638
|
+
let response;
|
|
1639
|
+
try {
|
|
1640
|
+
response = await requestVtecx(method, url, req, JSON.stringify(feed));
|
|
1641
|
+
}
|
|
1642
|
+
catch (e) {
|
|
1643
|
+
throw newFetchError(e, true);
|
|
1644
|
+
}
|
|
1645
|
+
//console.log(`[vtecxnext queryRDBCsv] response. status=${response.status}`)
|
|
1646
|
+
// vte.cxからのset-cookieを転記
|
|
1647
|
+
setCookie(response, res);
|
|
1648
|
+
//console.log(`[vtecxnext queryRDBCsv] setCookie end.`)
|
|
1649
|
+
// レスポンスのエラーチェック
|
|
1650
|
+
await checkVtecxResponse(response);
|
|
1651
|
+
//console.log(`[vtecxnext queryRDBCsv] checkVtecxResponse end.`)
|
|
1652
|
+
// 戻り値
|
|
1653
|
+
const resData = await response.blob();
|
|
1654
|
+
//console.log(`[vtecxnext queryRDBCsv] response.blob()`)
|
|
1655
|
+
setResponseHeaders(response, res);
|
|
1656
|
+
//console.log(`[vtecxnext queryRDBCsv] setResponseHeaders`)
|
|
1657
|
+
const csvData = await resData.arrayBuffer();
|
|
1658
|
+
//console.log(`[vtecxnext queryRDBCsv] await resData.arrayBuffer()`)
|
|
1659
|
+
res.end(new Uint8Array(csvData));
|
|
1660
|
+
//console.log(`[vtecxnext queryRDBCsv] res.end(new Uint8Array(csvData))`)
|
|
1661
|
+
return true;
|
|
1662
|
+
};
|
|
1663
|
+
exports.queryRDBCsv = queryRDBCsv;
|
|
1664
|
+
/**
|
|
1665
|
+
* Execute SQL to the database.
|
|
1666
|
+
* If there are multiple SQLs, they will be wrapped in a transaction.
|
|
1667
|
+
* @param req request (for authentication)
|
|
1668
|
+
* @param res response (for authentication)
|
|
1669
|
+
* @param sqls sql list
|
|
1670
|
+
* @param values values of query arguments
|
|
1671
|
+
* @param async execute async
|
|
1672
|
+
* @param isbulk execute with autocommit
|
|
1673
|
+
*/
|
|
1674
|
+
const execRDB = async (req, res, sqls, values, async, isbulk) => {
|
|
1675
|
+
//console.log(`[vtecxnext execRDB] start. sql=${sql} values=${values}`)
|
|
1676
|
+
// 入力チェック
|
|
1677
|
+
checkNotNull(sqls, 'exec SQL');
|
|
1678
|
+
// 引数生成
|
|
1679
|
+
const feed = editSqlsArgument(sqls, values);
|
|
1680
|
+
// vte.cxへリクエスト
|
|
1681
|
+
const method = 'PUT';
|
|
1682
|
+
const url = `${SERVLETPATH_PROVIDER}/?_execrdb${async ? '&_async' : ''}${isbulk ? '&_bulk' : ''}`;
|
|
1683
|
+
let response;
|
|
1684
|
+
try {
|
|
1685
|
+
response = await requestVtecx(method, url, req, JSON.stringify(feed));
|
|
1686
|
+
}
|
|
1687
|
+
catch (e) {
|
|
1688
|
+
throw newFetchError(e, true);
|
|
1689
|
+
}
|
|
1690
|
+
//console.log(`[vtecxnext execRDB] response. status=${response.status}`)
|
|
1691
|
+
// vte.cxからのset-cookieを転記
|
|
1692
|
+
setCookie(response, res);
|
|
1693
|
+
//console.log(`[vtecxnext execBQ] setCookie end.`)
|
|
1694
|
+
// レスポンスのエラーチェック
|
|
1695
|
+
await checkVtecxResponse(response);
|
|
1696
|
+
//console.log(`[vtecxnext execRDB] checkVtecxResponse end.`)
|
|
1697
|
+
// 戻り値
|
|
1698
|
+
return await response.json();
|
|
1699
|
+
};
|
|
1700
|
+
exports.execRDB = execRDB;
|
|
1583
1701
|
/**
|
|
1584
1702
|
* Create PDF.
|
|
1585
1703
|
* Writes a PDF to the response.
|
|
@@ -3433,20 +3551,52 @@ const editBqTableNames = (tablenames) => {
|
|
|
3433
3551
|
return result;
|
|
3434
3552
|
};
|
|
3435
3553
|
/**
|
|
3436
|
-
*
|
|
3554
|
+
* SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
|
|
3437
3555
|
* @param sql SQL
|
|
3438
3556
|
* @param values SQLに指定する値
|
|
3439
3557
|
* @param parent 戻り値JSONの親項目(任意)か、CSVのヘッダ(任意)
|
|
3440
|
-
* @returns
|
|
3558
|
+
* @returns SQLをセットしたfeed
|
|
3441
3559
|
*/
|
|
3442
|
-
const
|
|
3560
|
+
const editSqlArgument = (sql, values, parent) => {
|
|
3443
3561
|
// SQLに引数を代入(SQLインジェクション対応)
|
|
3444
3562
|
const editSql = values ? formatSql(sql, values) : sql;
|
|
3445
|
-
//console.log(`[vtecxnext
|
|
3563
|
+
//console.log(`[vtecxnext editSqlArgument] sql=${editSql}`)
|
|
3446
3564
|
// 引数
|
|
3447
|
-
const
|
|
3565
|
+
const entry = { 'title': editSql };
|
|
3448
3566
|
if (parent) {
|
|
3449
|
-
|
|
3567
|
+
entry['subtitle'] = parent;
|
|
3568
|
+
}
|
|
3569
|
+
const feed = [entry];
|
|
3570
|
+
return feed;
|
|
3571
|
+
};
|
|
3572
|
+
/**
|
|
3573
|
+
* SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
|
|
3574
|
+
* @param sqls SQLリスト
|
|
3575
|
+
* @param values SQLに指定する値
|
|
3576
|
+
* @returns SQLをセットしたfeed
|
|
3577
|
+
*/
|
|
3578
|
+
const editSqlsArgument = (sqls, values) => {
|
|
3579
|
+
// SQLに引数を代入(SQLインジェクション対応)
|
|
3580
|
+
const len = sqls.length;
|
|
3581
|
+
let editedSqls;
|
|
3582
|
+
if (values) {
|
|
3583
|
+
if (sqls.length !== values.length) {
|
|
3584
|
+
throw new VtecxNextError(400, ``);
|
|
3585
|
+
}
|
|
3586
|
+
editedSqls = new Array(len);
|
|
3587
|
+
for (let i = 0; i < len; i++) {
|
|
3588
|
+
editedSqls[i] = formatSql(sqls[i], values[i]);
|
|
3589
|
+
}
|
|
3590
|
+
}
|
|
3591
|
+
else {
|
|
3592
|
+
editedSqls = sqls;
|
|
3593
|
+
}
|
|
3594
|
+
const feed = [];
|
|
3595
|
+
let i = 0;
|
|
3596
|
+
for (const editSql of editedSqls) {
|
|
3597
|
+
const entry = { 'title': editSql };
|
|
3598
|
+
feed[i] = entry;
|
|
3599
|
+
i++;
|
|
3450
3600
|
}
|
|
3451
3601
|
return feed;
|
|
3452
3602
|
};
|