diff --git a/lib/config/environment.js b/lib/config/environment.js index 0a7097457..d2350e722 100644 --- a/lib/config/environment.js +++ b/lib/config/environment.js @@ -1,6 +1,6 @@ 'use strict' -const {toBooleanConfig, toArrayConfig, toIntegerConfig} = require('./utils') +const { toBooleanConfig, toArrayConfig, toIntegerConfig } = require('./utils') module.exports = { sourceURL: process.env.CMD_SOURCE_URL, diff --git a/lib/config/hackmdEnvironment.js b/lib/config/hackmdEnvironment.js index e5ffeb8af..dcfda0bc1 100644 --- a/lib/config/hackmdEnvironment.js +++ b/lib/config/hackmdEnvironment.js @@ -1,6 +1,6 @@ 'use strict' -const {toBooleanConfig, toArrayConfig, toIntegerConfig} = require('./utils') +const { toBooleanConfig, toArrayConfig, toIntegerConfig } = require('./utils') module.exports = { domain: process.env.HMD_DOMAIN, diff --git a/lib/config/index.js b/lib/config/index.js index e102dce93..b6001aa0f 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -4,11 +4,11 @@ const crypto = require('crypto') const fs = require('fs') const path = require('path') -const {merge} = require('lodash') +const { merge } = require('lodash') const deepFreeze = require('deep-freeze') -const {Environment, Permission} = require('./enum') +const { Environment, Permission } = require('./enum') const logger = require('../logger') -const {getGitCommit, getGitHubURL} = require('./utils') +const { getGitCommit, getGitHubURL } = require('./utils') const appRootPath = path.resolve(__dirname, '../../') const env = process.env.NODE_ENV || Environment.development @@ -17,7 +17,7 @@ const debugConfig = { } // Get version string from package.json -const {version, repository} = require(path.join(appRootPath, 'package.json')) +const { version, repository } = require(path.join(appRootPath, 'package.json')) const commitID = getGitCommit(appRootPath) const sourceURL = getGitHubURL(repository.url, commitID || version) @@ -159,8 +159,8 @@ if (Object.keys(process.env).toString().indexOf('HMD_') !== -1) { if (config.sessionSecret === 'secret') { logger.warn('Session secret not set. Using random generated one. Please set `sessionSecret` in your config.js file. All users will be logged out.') config.sessionSecret = crypto.randomBytes(Math.ceil(config.sessionSecretLen / 2)) // generate crypto graphic random number - .toString('hex') // convert to hexadecimal format - .slice(0, config.sessionSecretLen) // return required number of characters + .toString('hex') // convert to hexadecimal format + .slice(0, config.sessionSecretLen) // return required number of characters } // Validate upload upload providers diff --git a/lib/config/oldEnvironment.js b/lib/config/oldEnvironment.js index a3b13cb98..060475533 100644 --- a/lib/config/oldEnvironment.js +++ b/lib/config/oldEnvironment.js @@ -1,6 +1,6 @@ 'use strict' -const {toBooleanConfig} = require('./utils') +const { toBooleanConfig } = require('./utils') module.exports = { debug: toBooleanConfig(process.env.DEBUG), diff --git a/lib/letter-avatars.js b/lib/letter-avatars.js index 935cc1bb0..6fb1888ab 100644 --- a/lib/letter-avatars.js +++ b/lib/letter-avatars.js @@ -30,14 +30,14 @@ exports.generateAvatarURL = function (name, email = '', big = true) { if (typeof email !== 'string') { email = '' + name + '@example.com' } - name=encodeURIComponent(name) + name = encodeURIComponent(name) let hash = crypto.createHash('md5') hash.update(email.toLowerCase()) let hexDigest = hash.digest('hex') if (email !== '' && config.allowGravatar) { - photo = 'https://cdn.libravatar.org/avatar/' + hexDigest; + photo = 'https://cdn.libravatar.org/avatar/' + hexDigest if (big) { photo += '?s=400' } else { diff --git a/lib/logger.js b/lib/logger.js index 5ef1860a1..6d4bf69af 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,5 +1,5 @@ 'use strict' -const {createLogger, format, transports} = require('winston') +const { createLogger, format, transports } = require('winston') const logger = createLogger({ level: 'debug', diff --git a/lib/migrations/20150702001020-update-to-0_3_1.js b/lib/migrations/20150702001020-update-to-0_3_1.js index e1a88661c..b941048ef 100644 --- a/lib/migrations/20150702001020-update-to-0_3_1.js +++ b/lib/migrations/20150702001020-update-to-0_3_1.js @@ -22,6 +22,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: shortid' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'shortid'" || error.message === 'column "shortid" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20160112220142-note-add-lastchange.js b/lib/migrations/20160112220142-note-add-lastchange.js index 87e3ff197..69781cef2 100644 --- a/lib/migrations/20160112220142-note-add-lastchange.js +++ b/lib/migrations/20160112220142-note-add-lastchange.js @@ -9,6 +9,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: lastchangeuserId' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'lastchangeuserId'" || error.message === 'column "lastchangeuserId" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error @@ -18,8 +19,8 @@ module.exports = { down: function (queryInterface, Sequelize) { return queryInterface.removeColumn('Notes', 'lastchangeAt') - .then(function () { - return queryInterface.removeColumn('Notes', 'lastchangeuserId') - }) + .then(function () { + return queryInterface.removeColumn('Notes', 'lastchangeuserId') + }) } } diff --git a/lib/migrations/20160420180355-note-add-alias.js b/lib/migrations/20160420180355-note-add-alias.js index 45d53e696..82941a91a 100644 --- a/lib/migrations/20160420180355-note-add-alias.js +++ b/lib/migrations/20160420180355-note-add-alias.js @@ -9,6 +9,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: alias' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'alias'" || error.message === 'column "alias" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20160515114000-user-add-tokens.js b/lib/migrations/20160515114000-user-add-tokens.js index 435ae9cb1..e47ef5a40 100644 --- a/lib/migrations/20160515114000-user-add-tokens.js +++ b/lib/migrations/20160515114000-user-add-tokens.js @@ -5,6 +5,7 @@ module.exports = { return queryInterface.addColumn('Users', 'refreshToken', Sequelize.STRING) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: accessToken' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'accessToken'" || error.message === 'column "accessToken" of relation "Users" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20160607060246-support-revision.js b/lib/migrations/20160607060246-support-revision.js index 547f89b89..b318ea444 100644 --- a/lib/migrations/20160607060246-support-revision.js +++ b/lib/migrations/20160607060246-support-revision.js @@ -17,6 +17,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: savedAt' | error.message === "ER_DUP_FIELDNAME: Duplicate column name 'savedAt'" || error.message === 'column "savedAt" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20160703062241-support-authorship.js b/lib/migrations/20160703062241-support-authorship.js index f452b1a7b..86054f1ce 100644 --- a/lib/migrations/20160703062241-support-authorship.js +++ b/lib/migrations/20160703062241-support-authorship.js @@ -18,6 +18,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: authorship' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'authorship'" || error.message === 'column "authorship" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20161009040430-support-delete-note.js b/lib/migrations/20161009040430-support-delete-note.js index 56a336ac7..b7ee72c37 100644 --- a/lib/migrations/20161009040430-support-delete-note.js +++ b/lib/migrations/20161009040430-support-delete-note.js @@ -3,6 +3,7 @@ module.exports = { up: function (queryInterface, Sequelize) { return queryInterface.addColumn('Notes', 'deletedAt', Sequelize.DATE).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: deletedAt' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'deletedAt'" || error.message === 'column "deletedAt" of relation "Notes" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20161201050312-support-email-signin.js b/lib/migrations/20161201050312-support-email-signin.js index 26bc09ea9..5c9fbf85b 100644 --- a/lib/migrations/20161201050312-support-email-signin.js +++ b/lib/migrations/20161201050312-support-email-signin.js @@ -4,6 +4,7 @@ module.exports = { return queryInterface.addColumn('Users', 'email', Sequelize.TEXT).then(function () { return queryInterface.addColumn('Users', 'password', Sequelize.TEXT).catch(function (error) { if (error.message === "ER_DUP_FIELDNAME: Duplicate column name 'password'" || error.message === 'column "password" of relation "Users" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error @@ -11,6 +12,7 @@ module.exports = { }) }).catch(function (error) { if (error.message === 'SQLITE_ERROR: duplicate column name: email' || error.message === "ER_DUP_FIELDNAME: Duplicate column name 'email'" || error.message === 'column "email" of relation "Users" already exists') { + // eslint-disable-next-line no-console console.log('Migration has already run… ignoring.') } else { throw error diff --git a/lib/migrations/20171009121200-longtext-for-mysql.js b/lib/migrations/20171009121200-longtext-for-mysql.js index 2a7d0d3aa..cb9fc8a5c 100644 --- a/lib/migrations/20171009121200-longtext-for-mysql.js +++ b/lib/migrations/20171009121200-longtext-for-mysql.js @@ -1,16 +1,16 @@ 'use strict' module.exports = { up: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'content', {type: Sequelize.TEXT('long')}) - queryInterface.changeColumn('Revisions', 'patch', {type: Sequelize.TEXT('long')}) - queryInterface.changeColumn('Revisions', 'content', {type: Sequelize.TEXT('long')}) - queryInterface.changeColumn('Revisions', 'lastContent', {type: Sequelize.TEXT('long')}) + queryInterface.changeColumn('Notes', 'content', { type: Sequelize.TEXT('long') }) + queryInterface.changeColumn('Revisions', 'patch', { type: Sequelize.TEXT('long') }) + queryInterface.changeColumn('Revisions', 'content', { type: Sequelize.TEXT('long') }) + queryInterface.changeColumn('Revisions', 'lastContent', { type: Sequelize.TEXT('long') }) }, down: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'content', {type: Sequelize.TEXT}) - queryInterface.changeColumn('Revisions', 'patch', {type: Sequelize.TEXT}) - queryInterface.changeColumn('Revisions', 'content', {type: Sequelize.TEXT}) - queryInterface.changeColumn('Revisions', 'lastContent', {type: Sequelize.TEXT}) + queryInterface.changeColumn('Notes', 'content', { type: Sequelize.TEXT }) + queryInterface.changeColumn('Revisions', 'patch', { type: Sequelize.TEXT }) + queryInterface.changeColumn('Revisions', 'content', { type: Sequelize.TEXT }) + queryInterface.changeColumn('Revisions', 'lastContent', { type: Sequelize.TEXT }) } } diff --git a/lib/migrations/20180209120907-longtext-of-authorship.js b/lib/migrations/20180209120907-longtext-of-authorship.js index 4cca5444e..c5d8a1efd 100644 --- a/lib/migrations/20180209120907-longtext-of-authorship.js +++ b/lib/migrations/20180209120907-longtext-of-authorship.js @@ -2,12 +2,12 @@ module.exports = { up: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'authorship', {type: Sequelize.TEXT('long')}) - queryInterface.changeColumn('Revisions', 'authorship', {type: Sequelize.TEXT('long')}) + queryInterface.changeColumn('Notes', 'authorship', { type: Sequelize.TEXT('long') }) + queryInterface.changeColumn('Revisions', 'authorship', { type: Sequelize.TEXT('long') }) }, down: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'authorship', {type: Sequelize.TEXT}) - queryInterface.changeColumn('Revisions', 'authorship', {type: Sequelize.TEXT}) + queryInterface.changeColumn('Notes', 'authorship', { type: Sequelize.TEXT }) + queryInterface.changeColumn('Revisions', 'authorship', { type: Sequelize.TEXT }) } } diff --git a/lib/migrations/20180306150303-fix-enum.js b/lib/migrations/20180306150303-fix-enum.js index 0ee58a943..433a97492 100644 --- a/lib/migrations/20180306150303-fix-enum.js +++ b/lib/migrations/20180306150303-fix-enum.js @@ -2,10 +2,10 @@ module.exports = { up: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'permission', {type: Sequelize.ENUM('freely', 'editable', 'limited', 'locked', 'protected', 'private')}) + queryInterface.changeColumn('Notes', 'permission', { type: Sequelize.ENUM('freely', 'editable', 'limited', 'locked', 'protected', 'private') }) }, down: function (queryInterface, Sequelize) { - queryInterface.changeColumn('Notes', 'permission', {type: Sequelize.ENUM('freely', 'editable', 'locked', 'private')}) + queryInterface.changeColumn('Notes', 'permission', { type: Sequelize.ENUM('freely', 'editable', 'locked', 'private') }) } } diff --git a/lib/models/index.js b/lib/models/index.js index ef70475e8..0f27f57d1 100644 --- a/lib/models/index.js +++ b/lib/models/index.js @@ -3,7 +3,7 @@ var fs = require('fs') var path = require('path') var Sequelize = require('sequelize') -const {cloneDeep} = require('lodash') +const { cloneDeep } = require('lodash') // core var config = require('../config') @@ -39,13 +39,13 @@ sequelize.processData = processData var db = {} fs.readdirSync(__dirname) - .filter(function (file) { - return (file.indexOf('.') !== 0) && (file !== 'index.js') - }) - .forEach(function (file) { - var model = sequelize.import(path.join(__dirname, file)) - db[model.name] = model - }) + .filter(function (file) { + return (file.indexOf('.') !== 0) && (file !== 'index.js') + }) + .forEach(function (file) { + var model = sequelize.import(path.join(__dirname, file)) + db[model.name] = model + }) Object.keys(db).forEach(function (modelName) { if ('associate' in db[modelName]) { diff --git a/lib/response.js b/lib/response.js index 9fc9258ce..dd33e42ba 100644 --- a/lib/response.js +++ b/lib/response.js @@ -18,7 +18,7 @@ var utils = require('./utils') // public var response = { errorForbidden: function (res) { - const {req} = res + const { req } = res if (req.user) { responseError(res, '403', 'Forbidden', 'oh no.') } else { @@ -549,16 +549,16 @@ function gitlabActionProjects (req, res, note) { ret.accesstoken = user.accessToken ret.profileid = user.profileid request( - config.gitlab.baseURL + '/api/' + config.gitlab.version + '/projects?membership=yes&per_page=100&access_token=' + user.accessToken, - function (error, httpResponse, body) { - if (!error && httpResponse.statusCode === 200) { - ret.projects = JSON.parse(body) - return res.send(ret) - } else { - return res.send(ret) - } - } - ) + config.gitlab.baseURL + '/api/' + config.gitlab.version + '/projects?membership=yes&per_page=100&access_token=' + user.accessToken, + function (error, httpResponse, body) { + if (!error && httpResponse.statusCode === 200) { + ret.projects = JSON.parse(body) + return res.send(ret) + } else { + return res.send(ret) + } + } + ) }).catch(function (err) { logger.error('gitlab action projects failed: ' + err) return response.errorInternalError(res) diff --git a/lib/web/auth/dropbox/index.js b/lib/web/auth/dropbox/index.js index c44607da2..1cfabd296 100644 --- a/lib/web/auth/dropbox/index.js +++ b/lib/web/auth/dropbox/index.js @@ -4,7 +4,7 @@ const Router = require('express').Router const passport = require('passport') const DropboxStrategy = require('passport-dropbox-oauth2').Strategy const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let dropboxAuth = module.exports = Router() diff --git a/lib/web/auth/email/index.js b/lib/web/auth/email/index.js index daa4a8c59..32e214289 100644 --- a/lib/web/auth/email/index.js +++ b/lib/web/auth/email/index.js @@ -7,8 +7,8 @@ const LocalStrategy = require('passport-local').Strategy const config = require('../../../config') const models = require('../../../models') const logger = require('../../../logger') -const {setReturnToFromReferer} = require('../utils') -const {urlencodedParser} = require('../../utils') +const { setReturnToFromReferer } = require('../utils') +const { urlencodedParser } = require('../../utils') const response = require('../../../response') let emailAuth = module.exports = Router() diff --git a/lib/web/auth/facebook/index.js b/lib/web/auth/facebook/index.js index b23649892..418ddeeee 100644 --- a/lib/web/auth/facebook/index.js +++ b/lib/web/auth/facebook/index.js @@ -5,7 +5,7 @@ const passport = require('passport') const FacebookStrategy = require('passport-facebook').Strategy const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let facebookAuth = module.exports = Router() diff --git a/lib/web/auth/github/index.js b/lib/web/auth/github/index.js index ece634ba2..afa5fa314 100644 --- a/lib/web/auth/github/index.js +++ b/lib/web/auth/github/index.js @@ -5,7 +5,7 @@ const passport = require('passport') const GithubStrategy = require('passport-github').Strategy const config = require('../../../config') const response = require('../../../response') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let githubAuth = module.exports = Router() diff --git a/lib/web/auth/gitlab/index.js b/lib/web/auth/gitlab/index.js index 38436024d..4cebbc10c 100644 --- a/lib/web/auth/gitlab/index.js +++ b/lib/web/auth/gitlab/index.js @@ -5,7 +5,7 @@ const passport = require('passport') const GitlabStrategy = require('passport-gitlab2').Strategy const config = require('../../../config') const response = require('../../../response') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let gitlabAuth = module.exports = Router() diff --git a/lib/web/auth/google/index.js b/lib/web/auth/google/index.js index 0a4fd55ef..ad9bcd7ab 100644 --- a/lib/web/auth/google/index.js +++ b/lib/web/auth/google/index.js @@ -4,7 +4,7 @@ const Router = require('express').Router const passport = require('passport') var GoogleStrategy = require('passport-google-oauth20').Strategy const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let googleAuth = module.exports = Router() @@ -12,14 +12,14 @@ passport.use(new GoogleStrategy({ clientID: config.google.clientID, clientSecret: config.google.clientSecret, callbackURL: config.serverURL + '/auth/google/callback', - userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo" + userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo' }, passportGeneralCallback)) googleAuth.get('/auth/google', function (req, res, next) { setReturnToFromReferer(req) passport.authenticate('google', { scope: ['profile'] })(req, res, next) }) - // google auth callback +// google auth callback googleAuth.get('/auth/google/callback', passport.authenticate('google', { successReturnToOrRedirect: config.serverURL + '/', diff --git a/lib/web/auth/ldap/index.js b/lib/web/auth/ldap/index.js index 8d71c18eb..77790db3f 100644 --- a/lib/web/auth/ldap/index.js +++ b/lib/web/auth/ldap/index.js @@ -6,8 +6,8 @@ const LDAPStrategy = require('passport-ldapauth') const config = require('../../../config') const models = require('../../../models') const logger = require('../../../logger') -const {setReturnToFromReferer} = require('../utils') -const {urlencodedParser} = require('../../utils') +const { setReturnToFromReferer } = require('../utils') +const { urlencodedParser } = require('../../utils') const response = require('../../../response') let ldapAuth = module.exports = Router() diff --git a/lib/web/auth/mattermost/index.js b/lib/web/auth/mattermost/index.js index 63a4886f0..48d6d297b 100644 --- a/lib/web/auth/mattermost/index.js +++ b/lib/web/auth/mattermost/index.js @@ -5,7 +5,7 @@ const passport = require('passport') const Mattermost = require('mattermost') const OAuthStrategy = require('passport-oauth2').Strategy const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') const mattermost = new Mattermost.Client() @@ -24,12 +24,12 @@ mattermostStrategy.userProfile = (accessToken, done) => { mattermost.token = accessToken mattermost.useHeaderToken() mattermost.getMe( - (data) => { - done(null, data) - }, - (err) => { - done(err) - } + (data) => { + done(null, data) + }, + (err) => { + done(err) + } ) } diff --git a/lib/web/auth/oauth2/index.js b/lib/web/auth/oauth2/index.js index 57ab9b9aa..784342711 100644 --- a/lib/web/auth/oauth2/index.js +++ b/lib/web/auth/oauth2/index.js @@ -4,7 +4,7 @@ const Router = require('express').Router const passport = require('passport') const { Strategy, InternalOAuthError } = require('passport-oauth2') const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let oauth2Auth = module.exports = Router() diff --git a/lib/web/auth/openid/index.js b/lib/web/auth/openid/index.js index c45c6d71d..8d271a7a4 100644 --- a/lib/web/auth/openid/index.js +++ b/lib/web/auth/openid/index.js @@ -6,8 +6,8 @@ const OpenIDStrategy = require('@passport-next/passport-openid').Strategy const config = require('../../../config') const models = require('../../../models') const logger = require('../../../logger') -const {urlencodedParser} = require('../../utils') -const {setReturnToFromReferer} = require('../utils') +const { urlencodedParser } = require('../../utils') +const { setReturnToFromReferer } = require('../utils') let openIDAuth = module.exports = Router() diff --git a/lib/web/auth/saml/index.js b/lib/web/auth/saml/index.js index 3cdb7fe25..2289b010d 100644 --- a/lib/web/auth/saml/index.js +++ b/lib/web/auth/saml/index.js @@ -6,7 +6,7 @@ const SamlStrategy = require('passport-saml').Strategy const config = require('../../../config') const models = require('../../../models') const logger = require('../../../logger') -const {urlencodedParser} = require('../../utils') +const { urlencodedParser } = require('../../utils') const fs = require('fs') const intersection = function (array1, array2) { return array1.filter((n) => array2.includes(n)) } diff --git a/lib/web/auth/twitter/index.js b/lib/web/auth/twitter/index.js index c1860d930..5aba20ff3 100644 --- a/lib/web/auth/twitter/index.js +++ b/lib/web/auth/twitter/index.js @@ -5,7 +5,7 @@ const passport = require('passport') const TwitterStrategy = require('passport-twitter').Strategy const config = require('../../../config') -const {setReturnToFromReferer, passportGeneralCallback} = require('../utils') +const { setReturnToFromReferer, passportGeneralCallback } = require('../utils') let twitterAuth = module.exports = Router() diff --git a/lib/web/historyRouter.js b/lib/web/historyRouter.js index 1b22c2325..fa426bbb1 100644 --- a/lib/web/historyRouter.js +++ b/lib/web/historyRouter.js @@ -2,7 +2,7 @@ const Router = require('express').Router -const {urlencodedParser} = require('./utils') +const { urlencodedParser } = require('./utils') const history = require('../history') const historyRouter = module.exports = Router() diff --git a/lib/web/imageRouter/imgur.js b/lib/web/imageRouter/imgur.js index 2a20002c9..eee349f9d 100644 --- a/lib/web/imageRouter/imgur.js +++ b/lib/web/imageRouter/imgur.js @@ -17,12 +17,12 @@ exports.uploadImage = function (imagePath, callback) { imgur.setClientId(config.imgur.clientID) imgur.uploadFile(imagePath) - .then(function (json) { - if (config.debug) { - logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) - } - callback(null, json.data.link.replace(/^http:\/\//i, 'https://')) - }).catch(function (err) { - callback(new Error(err), null) - }) + .then(function (json) { + if (config.debug) { + logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) + } + callback(null, json.data.link.replace(/^http:\/\//i, 'https://')) + }).catch(function (err) { + callback(new Error(err), null) + }) } diff --git a/lib/web/imageRouter/minio.js b/lib/web/imageRouter/minio.js index 1d993a459..fe43f76ff 100644 --- a/lib/web/imageRouter/minio.js +++ b/lib/web/imageRouter/minio.js @@ -3,7 +3,7 @@ const fs = require('fs') const path = require('path') const config = require('../../config') -const {getImageMimeType} = require('../../utils') +const { getImageMimeType } = require('../../utils') const logger = require('../../logger') const Minio = require('minio') diff --git a/lib/web/imageRouter/s3.js b/lib/web/imageRouter/s3.js index 626fe1485..b0eca7b5f 100644 --- a/lib/web/imageRouter/s3.js +++ b/lib/web/imageRouter/s3.js @@ -3,7 +3,7 @@ const fs = require('fs') const path = require('path') const config = require('../../config') -const {getImageMimeType} = require('../../utils') +const { getImageMimeType } = require('../../utils') const logger = require('../../logger') const AWS = require('aws-sdk') diff --git a/lib/web/middleware/tooBusy.js b/lib/web/middleware/tooBusy.js index 128a5679f..49efbe373 100644 --- a/lib/web/middleware/tooBusy.js +++ b/lib/web/middleware/tooBusy.js @@ -2,7 +2,6 @@ const toobusy = require('toobusy-js') - const response = require('../../response') const config = require('../../config') diff --git a/lib/web/noteRouter.js b/lib/web/noteRouter.js index 41bf5f732..bac2cf889 100644 --- a/lib/web/noteRouter.js +++ b/lib/web/noteRouter.js @@ -4,7 +4,7 @@ const Router = require('express').Router const response = require('../response') -const {markdownParser} = require('./utils') +const { markdownParser } = require('./utils') const noteRouter = module.exports = Router() diff --git a/lib/web/statusRouter.js b/lib/web/statusRouter.js index 2b9cb65fe..6f797f843 100644 --- a/lib/web/statusRouter.js +++ b/lib/web/statusRouter.js @@ -8,7 +8,7 @@ const config = require('../config') const models = require('../models') const logger = require('../logger') -const {urlencodedParser} = require('./utils') +const { urlencodedParser } = require('./utils') const statusRouter = module.exports = Router() diff --git a/lib/web/userRouter.js b/lib/web/userRouter.js index ca3644227..73b519ec8 100644 --- a/lib/web/userRouter.js +++ b/lib/web/userRouter.js @@ -8,7 +8,7 @@ const response = require('../response') const config = require('../config') const models = require('../models') const logger = require('../logger') -const {generateAvatar} = require('../letter-avatars') +const { generateAvatar } = require('../letter-avatars') const UserRouter = module.exports = Router() diff --git a/package.json b/package.json index c189f0477..bb516a2e6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "AGPL-3.0", "scripts": { "test": "npm run-script eslint && npm run-script jsonlint && npm run-script mocha-suite", - "eslint": "node_modules/.bin/eslint lib public test app.js", + "eslint": "node_modules/.bin/eslint --max-warnings 0 lib public test app.js", "jsonlint": "find . -not -path './node_modules/*' -type f -name '*.json' -o -type f -name '*.json.example' | while read json; do echo $json ; jq . $json; done", "mocha-suite": "NODE_ENV=test CMD_DB_URL=\"sqlite::memory:\" mocha --exit", "standard": "echo 'standard is no longer being used, use `npm run eslint` instead!' && exit 1", diff --git a/public/js/cover.js b/public/js/cover.js index 79fb3a2a1..94748cdc2 100644 --- a/public/js/cover.js +++ b/public/js/cover.js @@ -1,37 +1,37 @@ /* eslint-env browser, jquery */ /* global moment, serverurl */ -require('./locale') - -require('../css/cover.css') -require('../css/site.css') - import { - checkIfAuth, - clearLoginState, - getLoginState, - resetCheckAuth, - setloginStateChangeEvent + checkIfAuth, + clearLoginState, + getLoginState, + resetCheckAuth, + setloginStateChangeEvent } from './lib/common/login' import { - clearDuplicatedHistory, - deleteServerHistory, - getHistory, - getStorageHistory, - parseHistory, - parseServerToHistory, - parseStorageToHistory, - postHistoryToServer, - removeHistory, - saveHistory, - saveStorageHistoryToServer + clearDuplicatedHistory, + deleteServerHistory, + getHistory, + getStorageHistory, + parseHistory, + parseServerToHistory, + parseStorageToHistory, + postHistoryToServer, + removeHistory, + saveHistory, + saveStorageHistoryToServer } from './history' import { saveAs } from 'file-saver' import List from 'list.js' import S from 'string' +require('./locale') + +require('../css/cover.css') +require('../css/site.css') + const options = { valueNames: ['id', 'text', 'timestamp', 'fromNow', 'time', 'tags', 'pinned'], item: `
${highlighted}
\n`
}
-/* Defined regex markdown it plugins */
-import Plugin from 'markdown-it-regexp'
-
// youtube
const youtubePlugin = new Plugin(
- // regexp to match
- /{%youtube\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%youtube\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const videoid = match[1]
- if (!videoid) return
- const div = $('')
- div.attr('data-videoid', videoid)
- const thumbnailSrc = `//img.youtube.com/vi/${videoid}/hqdefault.jpg`
- const image = ``
- div.append(image)
- const icon = ''
- div.append(icon)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const videoid = match[1]
+ if (!videoid) return
+ const div = $('')
+ div.attr('data-videoid', videoid)
+ const thumbnailSrc = `//img.youtube.com/vi/${videoid}/hqdefault.jpg`
+ const image = ``
+ div.append(image)
+ const icon = ''
+ div.append(icon)
+ return div[0].outerHTML
+ }
)
// vimeo
const vimeoPlugin = new Plugin(
- // regexp to match
- /{%vimeo\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%vimeo\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const videoid = match[1]
- if (!videoid) return
- const div = $('')
- div.attr('data-videoid', videoid)
- const icon = ''
- div.append(icon)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const videoid = match[1]
+ if (!videoid) return
+ const div = $('')
+ div.attr('data-videoid', videoid)
+ const icon = ''
+ div.append(icon)
+ return div[0].outerHTML
+ }
)
// gist
const gistPlugin = new Plugin(
- // regexp to match
- /{%gist\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%gist\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const gistid = match[1]
- const code = `
`
- return code
- }
+ (match, utils) => {
+ const gistid = match[1]
+ const code = `
`
+ return code
+ }
)
// TOC
const tocPlugin = new Plugin(
- // regexp to match
- /^\[TOC\]$/i,
+ // regexp to match
+ /^\[TOC\]$/i,
- (match, utils) => ''
+ (match, utils) => ''
)
// slideshare
const slidesharePlugin = new Plugin(
- // regexp to match
- /{%slideshare\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%slideshare\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const slideshareid = match[1]
- const div = $('')
- div.attr('data-slideshareid', slideshareid)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const slideshareid = match[1]
+ const div = $('')
+ div.attr('data-slideshareid', slideshareid)
+ return div[0].outerHTML
+ }
)
// speakerdeck
const speakerdeckPlugin = new Plugin(
- // regexp to match
- /{%speakerdeck\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%speakerdeck\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const speakerdeckid = match[1]
- const div = $('')
- div.attr('data-speakerdeckid', speakerdeckid)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const speakerdeckid = match[1]
+ const div = $('')
+ div.attr('data-speakerdeckid', speakerdeckid)
+ return div[0].outerHTML
+ }
)
// pdf
const pdfPlugin = new Plugin(
- // regexp to match
- /{%pdf\s*([\d\D]*?)\s*%}/,
+ // regexp to match
+ /{%pdf\s*([\d\D]*?)\s*%}/,
- (match, utils) => {
- const pdfurl = match[1]
- if (!isValidURL(pdfurl)) return match[0]
- const div = $('')
- div.attr('data-pdfurl', pdfurl)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const pdfurl = match[1]
+ if (!isValidURL(pdfurl)) return match[0]
+ const div = $('')
+ div.attr('data-pdfurl', pdfurl)
+ return div[0].outerHTML
+ }
)
const emojijsPlugin = new Plugin(
- // regexp to match emoji shortcodes :something:
- // We generate an universal regex that guaranteed only contains the
- // emojies we have available. This should prevent all false-positives
- new RegExp(':(' + window.emojify.emojiNames.map((item) => { return RegExp.escape(item) }).join('|') + '):', 'i'),
+ // regexp to match emoji shortcodes :something:
+ // We generate an universal regex that guaranteed only contains the
+ // emojies we have available. This should prevent all false-positives
+ new RegExp(':(' + window.emojify.emojiNames.map((item) => { return RegExp.escape(item) }).join('|') + '):', 'i'),
- (match, utils) => {
- const emoji = match[1].toLowerCase()
- const div = $(``)
- return div[0].outerHTML
- }
+ (match, utils) => {
+ const emoji = match[1].toLowerCase()
+ const div = $(``)
+ return div[0].outerHTML
+ }
)
// yaml meta, from https://github.com/eugeneware/remarkable-meta
diff --git a/public/js/history.js b/public/js/history.js
index 27b8cd28f..e01541851 100644
--- a/public/js/history.js
+++ b/public/js/history.js
@@ -1,4 +1,5 @@
/* eslint-env browser, jquery */
+/* eslint no-console: ["error", { allow: ["warn", "error", "debug"] }] */
/* global serverurl, moment */
import store from 'store'
@@ -12,11 +13,11 @@ import {
} from './utils'
import {
- checkIfAuth
+ checkIfAuth
} from './lib/common/login'
import {
- urlpath
+ urlpath
} from './lib/config'
window.migrateHistoryFromTempCallback = null
@@ -28,40 +29,40 @@ function migrateHistoryFromTemp () {
$.get(`${serverurl}/temp`, {
tempid: url('#tempid')
})
- .done(data => {
- if (data && data.temp) {
- getStorageHistory(olddata => {
- if (!olddata || olddata.length === 0) {
- saveHistoryToStorage(JSON.parse(data.temp))
- }
- })
- }
- })
- .always(() => {
- let hash = location.hash.split('#')[1]
- hash = hash.split('&')
- for (let i = 0; i < hash.length; i++) {
- if (hash[i].indexOf('tempid') === 0) {
- hash.splice(i, 1)
- i--
+ .done(data => {
+ if (data && data.temp) {
+ getStorageHistory(olddata => {
+ if (!olddata || olddata.length === 0) {
+ saveHistoryToStorage(JSON.parse(data.temp))
+ }
+ })
}
- }
- hash = hash.join('&')
- location.hash = hash
- if (window.migrateHistoryFromTempCallback) { window.migrateHistoryFromTempCallback() }
- })
+ })
+ .always(() => {
+ let hash = location.hash.split('#')[1]
+ hash = hash.split('&')
+ for (let i = 0; i < hash.length; i++) {
+ if (hash[i].indexOf('tempid') === 0) {
+ hash.splice(i, 1)
+ i--
+ }
+ }
+ hash = hash.join('&')
+ location.hash = hash
+ if (window.migrateHistoryFromTempCallback) { window.migrateHistoryFromTempCallback() }
+ })
}
}
export function saveHistory (notehistory) {
checkIfAuth(
- () => {
- saveHistoryToServer(notehistory)
- },
- () => {
- saveHistoryToStorage(notehistory)
- }
- )
+ () => {
+ saveHistoryToServer(notehistory)
+ },
+ () => {
+ saveHistoryToStorage(notehistory)
+ }
+ )
}
function saveHistoryToStorage (notehistory) {
@@ -80,9 +81,9 @@ export function saveStorageHistoryToServer (callback) {
$.post(`${serverurl}/history`, {
history: data
})
- .done(data => {
- callback(data)
- })
+ .done(data => {
+ callback(data)
+ })
}
}
@@ -109,7 +110,7 @@ export function clearDuplicatedHistory (notehistory) {
}
function addHistory (id, text, time, tags, pinned, notehistory) {
- // only add when note id exists
+ // only add when note id exists
if (id) {
notehistory.push({
id,
@@ -135,14 +136,14 @@ export function removeHistory (id, notehistory) {
// used for inner
export function writeHistory (title, tags) {
checkIfAuth(
- () => {
- // no need to do this anymore, this will count from server-side
- // writeHistoryToServer(title, tags);
- },
- () => {
- writeHistoryToStorage(title, tags)
- }
- )
+ () => {
+ // no need to do this anymore, this will count from server-side
+ // writeHistoryToServer(title, tags);
+ },
+ () => {
+ writeHistoryToStorage(title, tags)
+ }
+ )
}
function writeHistoryToStorage (title, tags) {
@@ -163,7 +164,7 @@ if (!Array.isArray) {
}
function renderHistory (title, tags) {
- // console.debug(tags);
+ // console.debug(tags);
const id = urlpath ? location.pathname.slice(urlpath.length + 1, location.pathname.length).split('/')[1] : location.pathname.split('/')[1]
return {
id,
@@ -175,7 +176,7 @@ function renderHistory (title, tags) {
function generateHistory (title, tags, notehistory) {
const info = renderHistory(title, tags)
- // keep any pinned data
+ // keep any pinned data
let pinned = false
for (let i = 0; i < notehistory.length; i++) {
if (notehistory[i].id === info.id && notehistory[i].pinned) {
@@ -192,25 +193,25 @@ function generateHistory (title, tags, notehistory) {
// used for outer
export function getHistory (callback) {
checkIfAuth(
- () => {
- getServerHistory(callback)
- },
- () => {
- getStorageHistory(callback)
- }
- )
+ () => {
+ getServerHistory(callback)
+ },
+ () => {
+ getStorageHistory(callback)
+ }
+ )
}
function getServerHistory (callback) {
$.get(`${serverurl}/history`)
- .done(data => {
- if (data.history) {
- callback(data.history)
- }
- })
- .fail((xhr, status, error) => {
- console.error(xhr.responseText)
- })
+ .done(data => {
+ if (data.history) {
+ callback(data.history)
+ }
+ })
+ .fail((xhr, status, error) => {
+ console.error(xhr.responseText)
+ })
}
export function getStorageHistory (callback) {
@@ -225,25 +226,25 @@ export function getStorageHistory (callback) {
export function parseHistory (list, callback) {
checkIfAuth(
- () => {
- parseServerToHistory(list, callback)
- },
- () => {
- parseStorageToHistory(list, callback)
- }
- )
+ () => {
+ parseServerToHistory(list, callback)
+ },
+ () => {
+ parseStorageToHistory(list, callback)
+ }
+ )
}
export function parseServerToHistory (list, callback) {
$.get(`${serverurl}/history`)
- .done(data => {
- if (data.history) {
- parseToHistory(list, data.history, callback)
- }
- })
- .fail((xhr, status, error) => {
- console.error(xhr.responseText)
- })
+ .done(data => {
+ if (data.history) {
+ parseToHistory(list, data.history, callback)
+ }
+ })
+ .fail((xhr, status, error) => {
+ console.error(xhr.responseText)
+ })
}
export function parseStorageToHistory (list, callback) {
@@ -269,15 +270,15 @@ function parseToHistory (list, notehistory, callback) {
} catch (err) {
console.error(err)
}
- // parse time to timestamp and fromNow
+ // parse time to timestamp and fromNow
const timestamp = (typeof notehistory[i].time === 'number' ? moment(notehistory[i].time) : moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a'))
notehistory[i].timestamp = timestamp.valueOf()
notehistory[i].fromNow = timestamp.fromNow()
notehistory[i].time = timestamp.format('llll')
- // prevent XSS
+ // prevent XSS
notehistory[i].text = S(notehistory[i].text).escapeHTML().s
notehistory[i].tags = (notehistory[i].tags && notehistory[i].tags.length > 0) ? S(notehistory[i].tags).escapeHTML().s.split(',') : []
- // add to list
+ // add to list
if (notehistory[i].id && list.get('id', notehistory[i].id).length === 0) { list.add(notehistory[i]) }
}
}
diff --git a/public/js/index.js b/public/js/index.js
index ff381598f..6ba174a59 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -1,16 +1,8 @@
/* eslint-env browser, jquery */
+/* eslint no-console: ["error", { allow: ["warn", "error", "debug"] }] */
/* global CodeMirror, Cookies, moment, Spinner, Idle, serverurl,
key, Dropbox, ot, hex2rgb, Visibility */
-require('../vendor/showup/showup')
-
-require('../css/index.css')
-require('../css/extra.css')
-require('../css/slide-preview.css')
-require('../css/site.css')
-
-require('highlight.js/styles/github-gist.css')
-
import TurndownService from 'turndown'
import { saveAs } from 'file-saver'
@@ -24,55 +16,55 @@ import _ from 'lodash'
import List from 'list.js'
import {
- checkLoginStateChanged,
- setloginStateChangeEvent
+ checkLoginStateChanged,
+ setloginStateChangeEvent
} from './lib/common/login'
import {
- debug,
- DROPBOX_APP_KEY,
- noteid,
- noteurl,
- urlpath,
- version
+ debug,
+ DROPBOX_APP_KEY,
+ noteid,
+ noteurl,
+ urlpath,
+ version
} from './lib/config'
import {
- autoLinkify,
- deduplicatedHeaderId,
- exportToHTML,
- exportToRawHTML,
- removeDOMEvents,
- finishView,
- generateToc,
- isValidURL,
- md,
- parseMeta,
- postProcess,
- renderFilename,
- renderTOC,
- renderTags,
- renderTitle,
- scrollToHash,
- smoothHashScroll,
- updateLastChange,
- updateLastChangeUser,
- updateOwner
+ autoLinkify,
+ deduplicatedHeaderId,
+ exportToHTML,
+ exportToRawHTML,
+ removeDOMEvents,
+ finishView,
+ generateToc,
+ isValidURL,
+ md,
+ parseMeta,
+ postProcess,
+ renderFilename,
+ renderTOC,
+ renderTags,
+ renderTitle,
+ scrollToHash,
+ smoothHashScroll,
+ updateLastChange,
+ updateLastChangeUser,
+ updateOwner
} from './extra'
import {
- clearMap,
- setupSyncAreas,
- syncScrollToEdit,
- syncScrollToView
+ clearMap,
+ setupSyncAreas,
+ syncScrollToEdit,
+ syncScrollToView
} from './lib/syncscroll'
import {
- writeHistory,
- deleteServerHistory,
- getHistory,
- saveHistory,
- removeHistory
+ writeHistory,
+ deleteServerHistory,
+ getHistory,
+ saveHistory,
+ removeHistory
} from './history'
import { preventXSS } from './render'
@@ -83,6 +75,15 @@ import getUIElements from './lib/editor/ui-elements'
import modeType from './lib/modeType'
import appState from './lib/appState'
+require('../vendor/showup/showup')
+
+require('../css/index.css')
+require('../css/extra.css')
+require('../css/slide-preview.css')
+require('../css/site.css')
+
+require('highlight.js/styles/github-gist.css')
+
var defaultTextHeight = 20
var viewportMargin = 20
var defaultEditorMode = 'gfm'
@@ -418,7 +419,7 @@ Visibility.change(function (e, state) {
$(document).ready(function () {
idle.checkAway()
checkResponsive()
- // if in smaller screen, we don't need advanced scrollbar
+ // if in smaller screen, we don't need advanced scrollbar
var scrollbarStyle
if (visibleXS) {
scrollbarStyle = 'native'
@@ -438,12 +439,12 @@ $(document).ready(function () {
if (isTouchDevice) {
/* bind events */
$(document)
- .on('focus', 'textarea, input', function () {
- $body.addClass('fixfixed')
- })
- .on('blur', 'textarea, input', function () {
- $body.removeClass('fixfixed')
- })
+ .on('focus', 'textarea, input', function () {
+ $body.addClass('fixfixed')
+ })
+ .on('blur', 'textarea, input', function () {
+ $body.removeClass('fixfixed')
+ })
}
// Re-enable nightmode
@@ -668,14 +669,14 @@ function checkEditorScrollbarInner () {
}
function checkTocStyle () {
- // toc right
+ // toc right
var paddingRight = parseFloat(ui.area.markdown.css('padding-right'))
var right = ($(window).width() - (ui.area.markdown.offset().left + ui.area.markdown.outerWidth() - paddingRight))
ui.toc.toc.css('right', right + 'px')
- // affix toc left
+ // affix toc left
var newbool
var rightMargin = (ui.area.markdown.parent().outerWidth() - ui.area.markdown.outerWidth()) / 2
- // for ipad or wider device
+ // for ipad or wider device
if (rightMargin >= 133) {
newbool = true
var affixLeftMargin = (ui.toc.affix.outerWidth() - ui.toc.affix.width()) / 2
@@ -762,7 +763,7 @@ function toggleMode () {
var lastMode = null
function changeMode (type) {
- // lock navbar to prevent it hide after changeMode
+ // lock navbar to prevent it hide after changeMode
lockNavbar()
saveInfo()
if (type) {
@@ -820,7 +821,7 @@ function changeMode (type) {
} else {
$(document.body).css('background-color', ui.area.codemirror.css('background-color'))
}
- // check resizable editor style
+ // check resizable editor style
if (appState.currentMode === modeType.both) {
if (lastEditorWidth > 0) {
ui.area.edit.css('width', lastEditorWidth + 'px')
@@ -898,13 +899,13 @@ function showMessageModal (title, header, href, text, success) {
// check if dropbox app key is set and load scripts
if (DROPBOX_APP_KEY) {
$('