@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.
@@ -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.mergeOAuthUserLine = exports.changeTdid = exports.deleteTotp = 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.getBQCsv = void 0;
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 = editGetBqArgument(sql, values, parent);
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 = editGetBqArgument(sql, values, parent);
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
- * BigQuery検索の引数を生成
3552
+ * SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
3437
3553
  * @param sql SQL
3438
3554
  * @param values SQLに指定する値
3439
3555
  * @param parent 戻り値JSONの親項目(任意)か、CSVのヘッダ(任意)
3440
- * @returns BigQuery検索の引数
3556
+ * @returns SQLをセットしたfeed
3441
3557
  */
3442
- const editGetBqArgument = (sql, values, parent) => {
3558
+ const editSqlArgument = (sql, values, parent) => {
3443
3559
  // SQLに引数を代入(SQLインジェクション対応)
3444
3560
  const editSql = values ? formatSql(sql, values) : sql;
3445
- //console.log(`[vtecxnext editGetBqArgument] sql=${editSql}`)
3561
+ //console.log(`[vtecxnext editSqlArgument] sql=${editSql}`)
3446
3562
  // 引数
3447
- const feed = { 'feed': { 'title': editSql } };
3563
+ const entry = { 'title': editSql };
3448
3564
  if (parent) {
3449
- feed.feed['subtitle'] = parent;
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtecx/vtecxnext",
3
- "version": "1.1.10",
3
+ "version": "1.1.11",
4
4
  "description": "vte.cx Next.js api",
5
5
  "main": "dist/index.js",
6
6
  "files": [