@vtecx/vtecxnext 1.1.10 → 1.1.11
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 +30 -0
- package/dist/vtecxnext.js +158 -10
- package/package.json +1 -1
package/dist/vtecxnext.d.ts
CHANGED
|
@@ -438,6 +438,36 @@ 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
|
+
*/
|
|
470
|
+
export declare const execRDB: (req: IncomingMessage, res: ServerResponse, sqls: string[], values?: any[][]) => Promise<any>;
|
|
441
471
|
/**
|
|
442
472
|
* Create PDF.
|
|
443
473
|
* 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,122 @@ 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
|
+
*/
|
|
1672
|
+
const execRDB = async (req, res, sqls, values) => {
|
|
1673
|
+
//console.log(`[vtecxnext execRDB] start. sql=${sql} values=${values}`)
|
|
1674
|
+
// 入力チェック
|
|
1675
|
+
checkNotNull(sqls, 'exec SQL');
|
|
1676
|
+
// 引数生成
|
|
1677
|
+
const feed = editSqlsArgument(sqls, values);
|
|
1678
|
+
// vte.cxへリクエスト
|
|
1679
|
+
const method = 'PUT';
|
|
1680
|
+
const url = `${SERVLETPATH_PROVIDER}/?_execrdb`;
|
|
1681
|
+
let response;
|
|
1682
|
+
try {
|
|
1683
|
+
response = await requestVtecx(method, url, req, JSON.stringify(feed));
|
|
1684
|
+
}
|
|
1685
|
+
catch (e) {
|
|
1686
|
+
throw newFetchError(e, true);
|
|
1687
|
+
}
|
|
1688
|
+
//console.log(`[vtecxnext execRDB] response. status=${response.status}`)
|
|
1689
|
+
// vte.cxからのset-cookieを転記
|
|
1690
|
+
setCookie(response, res);
|
|
1691
|
+
//console.log(`[vtecxnext execBQ] setCookie end.`)
|
|
1692
|
+
// レスポンスのエラーチェック
|
|
1693
|
+
await checkVtecxResponse(response);
|
|
1694
|
+
//console.log(`[vtecxnext execRDB] checkVtecxResponse end.`)
|
|
1695
|
+
// 戻り値
|
|
1696
|
+
return await response.json();
|
|
1697
|
+
};
|
|
1698
|
+
exports.execRDB = execRDB;
|
|
1583
1699
|
/**
|
|
1584
1700
|
* Create PDF.
|
|
1585
1701
|
* Writes a PDF to the response.
|
|
@@ -3433,20 +3549,52 @@ const editBqTableNames = (tablenames) => {
|
|
|
3433
3549
|
return result;
|
|
3434
3550
|
};
|
|
3435
3551
|
/**
|
|
3436
|
-
*
|
|
3552
|
+
* SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
|
|
3437
3553
|
* @param sql SQL
|
|
3438
3554
|
* @param values SQLに指定する値
|
|
3439
3555
|
* @param parent 戻り値JSONの親項目(任意)か、CSVのヘッダ(任意)
|
|
3440
|
-
* @returns
|
|
3556
|
+
* @returns SQLをセットしたfeed
|
|
3441
3557
|
*/
|
|
3442
|
-
const
|
|
3558
|
+
const editSqlArgument = (sql, values, parent) => {
|
|
3443
3559
|
// SQLに引数を代入(SQLインジェクション対応)
|
|
3444
3560
|
const editSql = values ? formatSql(sql, values) : sql;
|
|
3445
|
-
//console.log(`[vtecxnext
|
|
3561
|
+
//console.log(`[vtecxnext editSqlArgument] sql=${editSql}`)
|
|
3446
3562
|
// 引数
|
|
3447
|
-
const
|
|
3563
|
+
const entry = { 'title': editSql };
|
|
3448
3564
|
if (parent) {
|
|
3449
|
-
|
|
3565
|
+
entry['subtitle'] = parent;
|
|
3566
|
+
}
|
|
3567
|
+
const feed = [entry];
|
|
3568
|
+
return feed;
|
|
3569
|
+
};
|
|
3570
|
+
/**
|
|
3571
|
+
* SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
|
|
3572
|
+
* @param sqls SQLリスト
|
|
3573
|
+
* @param values SQLに指定する値
|
|
3574
|
+
* @returns SQLをセットしたfeed
|
|
3575
|
+
*/
|
|
3576
|
+
const editSqlsArgument = (sqls, values) => {
|
|
3577
|
+
// SQLに引数を代入(SQLインジェクション対応)
|
|
3578
|
+
const len = sqls.length;
|
|
3579
|
+
let editedSqls;
|
|
3580
|
+
if (values) {
|
|
3581
|
+
if (sqls.length !== values.length) {
|
|
3582
|
+
throw new VtecxNextError(400, ``);
|
|
3583
|
+
}
|
|
3584
|
+
editedSqls = new Array(len);
|
|
3585
|
+
for (let i = 0; i < len; i++) {
|
|
3586
|
+
editedSqls[i] = formatSql(sqls[i], values[i]);
|
|
3587
|
+
}
|
|
3588
|
+
}
|
|
3589
|
+
else {
|
|
3590
|
+
editedSqls = sqls;
|
|
3591
|
+
}
|
|
3592
|
+
const feed = [];
|
|
3593
|
+
let i = 0;
|
|
3594
|
+
for (const editSql of editedSqls) {
|
|
3595
|
+
const entry = { 'title': editSql };
|
|
3596
|
+
feed[i] = entry;
|
|
3597
|
+
i++;
|
|
3450
3598
|
}
|
|
3451
3599
|
return feed;
|
|
3452
3600
|
};
|