Bläddra i källkod

Added regexp validation

hakumizuki 4 år sedan
förälder
incheckning
1b00615269
2 ändrade filer med 16 tillägg och 2 borttagningar
  1. 1 1
      src/server/service/slack-command-handler/togetter.js
  2. 15 1
      src/server/service/slackbot.js

+ 1 - 1
src/server/service/slack-command-handler/togetter.js

@@ -25,7 +25,7 @@ module.exports = (crowi) => {
 
   handler.togetterMessageBlocks = function(messages, body, args, limit) {
     return [
-      markdownSectionBlock('Select the oldest and latest datetime of the messages to use'),
+      markdownSectionBlock('Select the oldest and latest datetime of the messages to use.'),
       inputBlock(this.plainTextInputElementWithInitialTime('oldest'), 'oldest', 'Oldest datetime'),
       inputBlock(this.plainTextInputElementWithInitialTime('latest'), 'latest', 'Latest datetime'),
       inputBlock(this.togetterInputBlockElement('page_path', '/'), 'page_path', 'Page path'),

+ 15 - 1
src/server/service/slackbot.js

@@ -242,15 +242,29 @@ class SlackBotService extends S2sMessageHandlable {
     const path = payload.state.values.page_path.page_path.value;
     let oldest = payload.state.values.oldest.oldest.value;
     let latest = payload.state.values.latest.latest.value;
+    oldest = oldest.trim();
+    latest = latest.trim();
     if (!path) {
       throw new Error('Page path is required.');
     }
+    /**
+     * RegExp for datetime yyyy/MM/dd-HH:mm
+     * @see https://regex101.com/r/xiQoTb/1
+     */
+    const regexpDatetime = new RegExp(/^[12]\d\d\d\/(0[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])-(0[0-9]|1[012]):[0-5][0-9]$/);
+
+    if (!regexpDatetime.test(oldest)) {
+      throw new Error('Datetime format for oldest must be yyyy/MM/dd-HH:mm');
+    }
+    if (!regexpDatetime.test(latest)) {
+      throw new Error('Datetime format for latest must be yyyy/MM/dd-HH:mm');
+    }
     oldest = parse(oldest, 'yyyy/MM/dd-HH:mm', new Date()).getTime() / 1000 + grwTzoffset;
     // + 60s in order to include messages between hh:mm.00s and hh:mm.59s
     latest = parse(latest, 'yyyy/MM/dd-HH:mm', new Date()).getTime() / 1000 + grwTzoffset + 60;
 
     if (oldest > latest) {
-      throw new Error('Oldest datetime should be older than the latest date time.');
+      throw new Error('Oldest datetime must be older than the latest date time.');
     }
 
     return { path, oldest, latest };