Etherpad-lite: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдореЗрдВ рд▓реЙрдЧрд┐рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╡рд┐рдВрдбреЛ рдмрд╛рд░-рдмрд╛рд░ рдкреВрдЫрддреА рд╣реИ...

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдирд╡ре░ 2019  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ether/etherpad-lite

рдореЗрд░реЗ рдкрд╛рд╕ рдИрдкреАрдПрд▓ рдХреА рдПрдХ рддрд╛рдЬрд╛ рдФрд░ рд╕рд╛рдл рд╕реНрдерд╛рдкрдирд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреГрд╖реНрда рдкрд░ рд▓реЙрдЧрд┐рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдореИрдВ рдиреЛ рдСрде рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдВрд╕реНрдХрд░рдг: 1.8.0рдмреАрдЯрд╛

рд╕реЗрдЯрд┐рдВрдЧреНрд╕.conf

{
  "users": {
     "admin": {
        "is_admin": true,
        "password": ****
     }
  },

  "skinName": "colibris",
  "ip": "127.0.0.1",
  "port": 9001,
  "showSettingsInAdminPage": true,
  "dbType" : "mysql",
  "dbSettings" : {
    "user":     ****,
    "host":     "localhost",
    "port":     3306,
    "password": ****,
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },
  "suppressErrorsInPadText": false,
  "requireSession": false,
  "editOnly": false,
  "sessionNoPassword": false,
  "minify": true,
  "maxAge": 21600, // 60 * 60 * 6 = 6 hours
   "abiword": "/usr/bin/abiword",
  "soffice": null,
  "tidyHtml": "/usr/bin/tidy",
  "allowUnknownFileEnds": true,
  "requireAuthentication": false,
  "requireAuthorization": false,
  "trustProxy": false,
  "disableIPlogging": true,
  "automaticReconnectionTimeout": 0,
  "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
  "loadTest": false,
  "exposeVersion": false,
  "loglevel": "INFO",
  [...]
}

рдореИрдВрдиреЗ рдиреЗрдЯ рдкрд░ рдЦреЛрдЬ рдХреА рд▓реЗрдХрд┐рди рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рд╡рд┐рд╖рдп рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХреЛрдИ рдЙрдкрд╛рдп?

-- рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

1.7.5 рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдиреБрднрд╛рдЧ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

#3648 (7c099fef5e08) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд▓рдд рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рд╕рдорд╕реНрдпрд╛ рджреБрдЧрдиреА рдереА:

  1. рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ _.filter() рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧрдгрдирд╛ рдпреЛрдЧреНрдп рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕рднреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред
    рджреЗрдЦреЗрдВ: https://stackoverflow.com/questions/11697702/how-to-use-underscore-js-filter-with-an-object
    рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ _.pick() ;
  2. userProperties.password рдкрд░ рддрд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдереА (рдЗрд╕реЗ OR рдХреЗ рдмрдЬрд╛рдп AND рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛)ред

рдЗрд╕ рдмрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП @g4rf рдзрдиреНрдпрд╡рд╛рджред

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИред

рдХреЛрдИ рд╕реБрдЭрд╛рд╡? рд▓реЙрдЧ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдмрдВрдзрди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛:

рдпрд╣ рдХреЗрд╡рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕.рдЬреЗрд╕рди рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд╣реИ рдирд╛?

"users": {
    "admin": {
        "is_admin": true,
        "password": ****
    }
}

-- рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

1.7.5 рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдиреБрднрд╛рдЧ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред

рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдпрджрд┐ 1.7.5 рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрджрдиреЗ рд▓рд╛рдпрдХ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ рд╣рдо рд╣реИрдВ: рдпрд╣ 7c099fef5e08 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИред

рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг (4e758a9f4a50):

git checkout 4e758a9f4a50
node <base>/node_modules/ep_etherpad-lite/node/server.js
curl --silent --output /dev/null --write-out "HTTP/%{http_code}\n" --basic --user admin:password http://localhost:9001/admin/
HTTP/200

рдкреНрд░рддрд┐рдЧрд╛рдореА рд╕рдВрд╕реНрдХрд░рдг (7c099fef5e08):

git checkout 7c099fef5e08
node <base>/node_modules/ep_etherpad-lite/node/server.js
curl --silent --output /dev/null --write-out "HTTP/%{http_code}\n" --basic --user admin:password http://localhost:9001/admin/
HTTP/401

рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

#3648 (7c099fef5e08) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд▓рдд рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рд╕рдорд╕реНрдпрд╛ рджреБрдЧрдиреА рдереА:

  1. рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ _.filter() рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧрдгрдирд╛ рдпреЛрдЧреНрдп рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕рднреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред
    рджреЗрдЦреЗрдВ: https://stackoverflow.com/questions/11697702/how-to-use-underscore-js-filter-with-an-object
    рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ _.pick() ;
  2. userProperties.password рдкрд░ рддрд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдереА (рдЗрд╕реЗ OR рдХреЗ рдмрдЬрд╛рдп AND рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛)ред

рдЗрд╕ рдмрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП @g4rf рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ddeenniiss picture ddeenniiss  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ziyaointl picture ziyaointl  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

YSelfTool picture YSelfTool  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yurivict picture yurivict  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ArcticSnowman picture ArcticSnowman  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ