Compare commits

..

11 Commits

Author SHA1 Message Date
dependabot[bot]
fef8ad5215 Bump mongoose from 5.4.18 to 5.7.5
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.4.18 to 5.7.5.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.4.18...5.7.5)

Signed-off-by: dependabot[bot] <support@github.com>
2019-10-29 13:42:02 +00:00
Kasper Rynning-Tønnesen
938dac703e Added sponsor-button 2019-10-19 17:42:13 +02:00
Kasper Rynning-Tønnesen
8ca0b2b4dd Create FUNDING.yml 2019-10-19 17:31:02 +02:00
Kasper Rynning-Tønnesen
49fceb761c Fixed local-mode issue with encoded channel-names 2019-10-07 16:38:19 +02:00
Kasper Rynning-Tønnesen
bc3328db2b including the necessary things 2019-10-07 16:26:57 +02:00
Kasper Rynning-Tønnesen
9d9c783244 Built from base 2019-10-07 16:25:17 +02:00
Kasper Rynning-Tønnesen
ad96e147b1 Revert again 2019-10-07 16:18:27 +02:00
Kasper Rynning-Tønnesen
eb0cd96995 Trying farmhash again 2019-10-07 16:17:12 +02:00
Kasper Rynning-Tønnesen
41a2964533 Reverting 2019-10-07 16:14:04 +02:00
Kasper Rynning-Tønnesen
dcf581bb06 SYNTAX 2019-10-07 16:08:26 +02:00
Kasper Rynning-Tønnesen
5e938e8bb2 Testing out farmhash.. again 2019-10-07 16:07:26 +02:00
30 changed files with 809 additions and 2665 deletions

2
FUNDING.yml Normal file
View File

@@ -0,0 +1,2 @@
github: [kasperrt]
custom: ["https://www.paypal.me/zoffmusic"]

516
package-lock.json generated
View File

@@ -90,8 +90,7 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-wrap": {
"version": "0.1.0",
@@ -125,12 +124,26 @@
}
}
},
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
"dev": true
},
"are-we-there-yet": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -468,11 +481,36 @@
"integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
"dev": true
},
"bl": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
"integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
"requires": {
"readable-stream": "^3.0.1"
},
"dependencies": {
"readable-stream": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"bmp-js": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz",
@@ -629,6 +667,11 @@
}
}
},
"chownr": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
"integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
},
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -723,8 +766,7 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"collection-map": {
"version": "1.0.0",
@@ -892,6 +934,11 @@
"mongodb": "^2.0.36"
}
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -1057,6 +1104,19 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
"decompress-response": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"requires": {
"mimic-response": "^2.0.0"
}
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"default-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
@@ -1134,6 +1194,11 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -1150,6 +1215,11 @@
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -1258,7 +1328,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
@@ -1439,6 +1508,11 @@
}
}
},
"expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
},
"expand-tilde": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
@@ -1635,6 +1709,15 @@
"time-stamp": "^1.0.0"
}
},
"farmhash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/farmhash/-/farmhash-3.0.0.tgz",
"integrity": "sha512-z3euyIxS9OSV5lpBbaeh6BysJG5bZxTZdjzDjtwyTbQkyvRReVrQ66uPmOlL2JwATgQvHL41NqYc2hA2SsasvA==",
"requires": {
"node-addon-api": "^1.6.3",
"prebuild-install": "^5.3.0"
}
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
@@ -1865,6 +1948,11 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-mkdirp-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
@@ -1900,7 +1988,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
@@ -1921,12 +2010,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1941,17 +2032,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
@@ -2068,7 +2162,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
@@ -2080,6 +2175,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -2094,6 +2190,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -2101,12 +2198,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -2125,6 +2224,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -2205,7 +2305,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
@@ -2217,6 +2318,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -2302,7 +2404,8 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -2338,6 +2441,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -2357,6 +2461,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -2400,12 +2505,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
}
}
},
@@ -2414,6 +2521,21 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -2434,6 +2556,11 @@
"assert-plus": "^1.0.0"
}
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
@@ -2849,6 +2976,11 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
},
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -3039,8 +3171,7 @@
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"interpret": {
"version": "1.2.0",
@@ -3175,7 +3306,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -3274,6 +3404,11 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -3363,9 +3498,9 @@
"dev": true
},
"kareem": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz",
"integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg=="
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
"integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
},
"kind-of": {
"version": "6.0.2",
@@ -3485,11 +3620,6 @@
"strip-bom": "^2.0.0"
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lru-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
@@ -3569,12 +3699,6 @@
"timers-ext": "^0.1.5"
}
},
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -3631,6 +3755,11 @@
}
}
},
"mimic-response": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz",
"integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ=="
},
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
@@ -3796,66 +3925,42 @@
"integrity": "sha1-Z3YjmDlByAOPyBz88lw+425iO4s="
},
"mongoose": {
"version": "5.4.18",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.4.18.tgz",
"integrity": "sha512-yiSd/1OYYfK9EuH6NFO/NnTD4AZPIpRY1i58xUssgCGsYDX3qEYcdgFeknB5OArMB1Ny3wwMW8xiip2I5pgszw==",
"version": "5.7.5",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.7.5.tgz",
"integrity": "sha512-BZ4FxtnbTurc/wcm/hLltLdI4IDxo4nsE0D9q58YymTdZwreNzwO62CcjVtaHhmr8HmJtOInp2W/T12FZaMf8g==",
"requires": {
"async": "2.6.1",
"bson": "~1.1.0",
"kareem": "2.3.0",
"mongodb": "3.1.13",
"mongodb-core": "3.1.11",
"bson": "~1.1.1",
"kareem": "2.3.1",
"mongodb": "3.3.2",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.5.1",
"mquery": "3.2.0",
"ms": "2.1.1",
"regexp-clone": "0.0.1",
"mpath": "0.6.0",
"mquery": "3.2.2",
"ms": "2.1.2",
"regexp-clone": "1.0.0",
"safe-buffer": "5.1.2",
"sift": "7.0.1",
"sliced": "1.0.1"
},
"dependencies": {
"async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
"requires": {
"lodash": "^4.17.10"
}
},
"bson": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
"integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg=="
},
"mongodb": {
"version": "3.1.13",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz",
"integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==",
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.2.tgz",
"integrity": "sha512-fqJt3iywelk4yKu/lfwQg163Bjpo5zDKhXiohycvon4iQHbrfflSAz9AIlRE6496Pm/dQKQK5bMigdVo2s6gBg==",
"requires": {
"mongodb-core": "3.1.11",
"bson": "^1.1.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2"
}
},
"mongodb-core": {
"version": "3.1.11",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz",
"integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==",
"requires": {
"bson": "^1.1.0",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
}
},
"mpath": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
"integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg=="
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
@@ -3864,28 +3969,28 @@
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
},
"mpath": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz",
"integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw=="
},
"mpromise": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz",
"integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY="
},
"mquery": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz",
"integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==",
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
"integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
"requires": {
"bluebird": "3.5.1",
"debug": "3.1.0",
"regexp-clone": "0.0.1",
"regexp-clone": "^1.0.0",
"safe-buffer": "5.1.2",
"sliced": "1.0.1"
},
"dependencies": {
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -3933,6 +4038,11 @@
"to-regex": "^3.0.1"
}
},
"napi-build-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
},
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -3953,11 +4063,29 @@
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
"integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
},
"node-abi": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz",
"integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==",
"requires": {
"semver": "^5.4.1"
}
},
"node-addon-api": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz",
"integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ=="
},
"nodemailer": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz",
"integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw=="
},
"noop-logger": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
},
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -3992,11 +4120,21 @@
"once": "^1.3.2"
}
},
"npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"o-stream": {
"version": "0.2.2",
@@ -4008,6 +4146,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-component": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
@@ -4423,6 +4566,44 @@
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
"dev": true
},
"prebuild-install": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz",
"integrity": "sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==",
"requires": {
"detect-libc": "^1.0.3",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"napi-build-utils": "^1.0.1",
"node-abi": "^2.7.0",
"noop-logger": "^0.1.1",
"npmlog": "^4.0.1",
"pump": "^3.0.0",
"rc": "^1.2.7",
"simple-get": "^3.0.3",
"tar-fs": "^2.0.0",
"tunnel-agent": "^0.6.0",
"which-pm-runs": "^1.0.0"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
@@ -4513,6 +4694,24 @@
"unpipe": "1.0.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
}
}
},
"read-chunk": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz",
@@ -4539,6 +4738,20 @@
"read-pkg": "^1.0.0"
}
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"readdirp": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
@@ -4627,9 +4840,9 @@
}
},
"regexp-clone": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
"integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
"remove-bom-buffer": {
"version": "3.0.0",
@@ -4798,15 +5011,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"saslprep": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz",
"integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -4815,8 +5019,7 @@
"semver": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
},
"semver-greatest-satisfied-range": {
"version": "1.1.0",
@@ -4873,8 +5076,7 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-value": {
"version": "2.0.1",
@@ -4904,6 +5106,31 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
},
"sift": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
"integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"simple-concat": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
},
"simple-get": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
"integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
"requires": {
"decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
@@ -5167,15 +5394,6 @@
"integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
"dev": true
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"spdx-correct": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
@@ -5303,18 +5521,24 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -5333,6 +5557,11 @@
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"sver-compat": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
@@ -5343,6 +5572,52 @@
"es6-symbol": "^3.1.1"
}
},
"tar-fs": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz",
"integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==",
"requires": {
"chownr": "^1.1.1",
"mkdirp": "^0.5.1",
"pump": "^3.0.0",
"tar-stream": "^2.0.0"
},
"dependencies": {
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"tar-stream": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
"integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
"requires": {
"bl": "^3.0.0",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"terser": {
"version": "3.8.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.8.2.tgz",
@@ -5966,6 +6241,19 @@
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
"dev": true
},
"which-pm-runs": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",

View File

@@ -38,6 +38,7 @@
"express-handlebars": "^3.0.2",
"express-recaptcha": "^3.0.1",
"express-session": "^1.15.6",
"farmhash": "^3.0.0",
"feature-policy": "^0.2.0",
"gulp-clean-css": "^4.2.0",
"gulp-sourcemaps": "^2.6.5",
@@ -47,7 +48,7 @@
"mongodb": "^2.2.36",
"mongojs": "^2.6.0",
"mongojs-paginate": "^1.2.0",
"mongoose": "^5.4.18",
"mongoose": "^5.7.5",
"mpromise": "^0.5.5",
"nodemailer": "^4.7.0",
"passport": "^0.4.0",

View File

@@ -4,7 +4,7 @@ var cluster = require("cluster"),
//publicPath = path.join(__dirname, 'public'),
http = require("http"),
port = 8080,
//farmhash = require('farmhash'),
farmhash = require("farmhash"),
uniqid = require("uniqid"),
num_processes = require("os").cpus().length;
@@ -53,20 +53,22 @@ function startClustered(redis_enabled) {
var worker_index = function(ip, len) {
//console.log(ip);
var s = "";
if (ip == undefined) ip = uniqid.time();
if (ip !== undefined) {
return farmhash.fingerprint32(ip) % len;
}
ip = uniqid.time();
for (var i = 0, _len = ip.length; i < _len; i++) {
if (!isNaN(ip[i])) {
s += ip[i];
}
}
return Number(s) % len;
//eturn farmhash.fingerprint32(ip) % len;
};
var server = net
.createServer({ pauseOnConnect: true }, function(connection, a) {
var worker =
workers[worker_index(connection.remoteAddress, num_processes)];
workers[worker_index(connection.address().address, num_processes)];
worker.send("sticky-session:connection", connection);
})
.listen(port);

View File

@@ -1,39 +0,0 @@
var cluster = require("cluster"),
net = require("net"),
path = require("path"),
//publicPath = path.join(__dirname, 'public'),
http = require("http"),
port = 8080,
//farmhash = require('farmhash'),
uniqid = require("uniqid"),
num_processes = require("os").cpus().length;
publicPath = path.join(__dirname, "public");
pathThumbnails = __dirname;
var nodemailer = require("nodemailer");
var mailconfig = require(path.join(__dirname, "../config/mailconfig.js"));
let transporter = nodemailer.createTransport(mailconfig);
transporter.verify(function(error, success) {
if (error) {
return;
} else {
var message = "Testmail";
var msg = {
from: mailconfig.from,
to: mailconfig.notify_mail,
subject: "ZOFF: Requested new ",
text: message,
html: message
};
transporter.sendMail(msg, (error, info) => {
console.log(error);
if (error) {
transporter.close();
return;
}
transporter.close();
});
}
});

View File

@@ -1,207 +0,0 @@
var path = require("path");
var db = require(pathThumbnails + "/handlers/db.js");
var aggregate = require(pathThumbnails + "/handlers/dbFunctions/aggregate.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var remove = require(pathThumbnails + "/handlers/dbFunctions/remove.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var frontpage = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/frontpageUpdates.js");
var findAggregate = [
{
$match: {
views: {
$exists: false
},
type: {
$ne: "suggested"
}
}
},
{
$sort: {
now_playing: -1,
votes: -1,
added: 1,
title: 1
}
},
{
$limit: 2
}
];
var verifyAggregate = [
{
$match: {
now_playing: false,
type: {
$ne: "suggested"
}
}
},
{
$sort: {
votes: -1,
added: 1,
title: 1
}
},
{
$limit: 2
}
];
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
async function changeSong(coll, error, id, conf, socket) {
console.log("hello");
return pre(coll, error, id, conf, socket);
}
async function pre(coll, error, id, conf, socket) {
return new Promise(async (resolve, reject) => {
var startTime = conf[0].startTime;
if (conf === null || conf.length == 0) {
return;
}
var now_playing_doc = await aggregate(coll, findAggregate);
if (
now_playing_doc.length > 0 &&
((id && id == now_playing_doc[0].id) || !id)
) {
if (error) {
var docs = await remove(coll, { now_playing: true, id: id });
var next_song;
if (now_playing_doc.length == 2) {
next_song = now_playing_doc[1].id;
}
await post(coll, next_song, conf, socket, error);
io.to(coll).emit("channel", {
type: "deleted",
value: now_playing_doc[0].id,
removed: true
});
if (docs.deletedCount == 1) {
frontpage.incrementList("frontpage_lists", -1);
}
resolve();
return;
} else if (conf[0].removeplay === true) {
var docs = await remove(coll, { now_playing: true, id: id });
var next_song;
if (now_playing_doc.length == 2) next_song = now_playing_doc[1].id;
await post(coll, next_song, conf, socket, error);
if (docs.deletedCount == 1) {
frontpage.incrementList("frontpage_lists", -1);
}
resolve();
return;
} else {
console.log("here 2");
if (
(conf[0].skipped_time != undefined &&
conf[0].skipped_time != Helpers.get_time()) ||
conf[0].skipped_time == undefined
) {
var docs = await update(
coll,
{ now_playing: true, id: id },
{
$set: {
now_playing: false,
votes: 0,
guids: []
}
},
{ multi: true }
);
console.log("update", docs);
var next_song;
if (now_playing_doc.length == 2) next_song = now_playing_doc[1].id;
await post(coll, next_song, conf, socket, error);
resolve();
return;
}
}
}
if (
now_playing_doc.length > 0 &&
now_playing_doc[0].now_playing == true &&
now_playing_doc.length > 1 &&
now_playing_doc[1].id == id
) {
var docs = await update(
coll,
{ id: now_playing_doc[0].id },
{ $set: { now_playing: false } },
{}
);
return await pre(coll, error, id, conf, socket, error);
}
resolve();
});
}
async function post(coll, next_song, conf, socket, removed) {
return new Promise(async (resolve, reject) => {
var docs = await aggregate(coll, verifyAggregate);
if (docs === null || docs.length == 0) {
reject();
return;
}
var id = docs[0].id;
if (next_song && next_song != id) {
if (docs.length == 2 && next_song == docs[1].id) {
id = docs[1].id;
} else {
reject();
return;
}
}
var returnDocs = await update(
coll,
{ id: id, now_playing: false },
{
$set: {
now_playing: true,
votes: 0,
guids: [],
added: Helpers.get_time()
}
},
{}
);
if (
(returnDocs.hasOwnProperty("nModified") && returnDocs.nModified == 0) ||
(returnDocs.hasOwnProperty("n") && returnDocs.n == 0)
) {
resolve();
return;
}
io.to(coll).emit("channel", {
type: "song_change",
time: Helpers.get_time(),
remove: conf[0].removeplay || removed,
id: id
});
returnDocs = await update(
coll + "_settings",
{ id: "config" },
{
$set: {
startTime: Helpers.get_time(),
skips: []
}
},
{}
);
resolve();
});
}
module.exports = changeSong;
module.exports.pre = pre;
module.exports.post = post;

View File

@@ -1,402 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var findAndModify = require(pathThumbnails +
"/handlers/dbFunctions/findAndModify.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var SessionHandler = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
async function checkIfChatEnabled(channel, socket, callback) {
return new Promise(async (resolve, reject) => {
if (channel == "" || channel == undefined) resolve();
else {
var docs = await find(channel + "_settings");
if (
docs.length > 0 &&
(docs[0].hasOwnProperty("toggleChat") && !docs[0].toggleChat)
) {
socket.emit("chat", {
from: "System",
msg: ": Chat for this channel has been disabled.",
icon: "https://zoff.me/assets/images/favicon-32x32.png"
});
resolve(false);
} else {
resolve(true);
}
}
});
}
async function checkIfUserIsBanned(channel, socket, guid) {
return new Promise(async (resolve, reject) => {
var connection_id = Helpers.hash_pass(
socket.handshake.headers["user-agent"] +
socket.handshake.address +
socket.handshake.headers["accept-language"]
);
var docs = await find(channel + "_banned_chat", {
$or: [{ connection_id: connection_id }, { connection_id: guid }]
});
if (docs.length == 0) resolve();
else {
var d = await findAndModify("user_names", {
query: { guid, guid },
update: { $addToSet: { channels: channel } }
});
socket.emit("chat", {
from: "System",
msg:
": You can't chat in this channel, you are banned. The reason is: " +
docs[0].reason,
icon: "https://zoff.me/assets/images/favicon-32x32.png"
});
reject();
}
});
}
async function namechange(data, guid, socket, tried) {
return new Promise(async (resolve, reject) => {
var enabled = await checkIfChatEnabled(data.channel, socket);
if (!enabled) {
resolve(false);
return;
}
try {
await checkIfUserIsBanned(data.channel, socket, guid);
} catch (e) {
return;
}
var pw = "";
var new_password;
var first = false;
var sessionObject = await SessionHandler.getSessionChatPass(
Helpers.getSession(socket)
);
var name = sessionObject.name;
var pass = sessionObject.pass;
var fetched = false;
if (data.hasOwnProperty("first") && data.first) {
pw = pass;
name = name;
data.name = name;
data.password = pass;
new_password = false;
if (name == "" || pass == "") {
resolve(true);
return;
}
fetched = true;
password = pw;
} else {
var name = data.name;
if (data.hasOwnProperty("first")) {
first = data.first;
}
if (data.hasOwnProperty("password")) {
pw = data.password;
new_password = false;
} else if (
data.hasOwnProperty("new_password") &&
data.hasOwnProperty("old_password")
) {
pw = data.old_password;
new_password = Helpers.decrypt_string(data.new_password);
}
password = Helpers.decrypt_string(pw);
password = Helpers.hash_pass(password);
doubled = true;
}
if (name == "") {
resolve(true);
return;
}
var docs = await find("registered_users", { _id: name.toLowerCase() });
var accepted_password = false;
var icon = false;
if (docs.length == 0) {
if (new_password) {
resolve(true);
return;
}
accepted_password = true;
await SessionHandler.setSessionChatPass(
Functions.getSession(socket),
name.toLowerCase(),
data.password
);
update(
"registered_users",
{ _id: name.toLowerCase() },
{ $set: { password: password } },
{ upsert: true }
);
} else if (docs[0].password == password) {
if (docs[0].icon) {
icon = docs[0].icon;
}
accepted_password = true;
if (new_password) {
await SessionHandler.setSessionChatPass(
Helpers.getSession(socket),
name.toLowerCase(),
data.new_password
);
update(
"registered_users",
{ _id: name.toLowerCase(), password: password },
{
$set: { password: Helpers.hash_pass(new_password) }
}
);
} else {
await SessionHandler.setSessionChatPass(
Helpers.getSession(socket),
name.toLowerCase(),
fetched
? data.password
: Helpers.hash_pass(Helpers.decrypt_string(data.password))
);
}
}
if (accepted_password) {
var names = await find("user_names", { guid: guid });
if (
names.length > 0 ||
(docs.length != 0 && docs[0].password == password)
) {
var no_name = false;
if (names.length == 0) no_name = true;
if (!no_name) {
var old_name = names[0].name;
update(
"user_names",
{ _id: "all_names" },
{ $pull: { names: old_name } }
);
}
var connection_id = Helpers.hash_pass(
socket.handshake.headers["user-agent"] +
socket.handshake.address +
socket.handshake.headers["accept-language"]
);
var updateElement = {
$set: {
name: name,
icon: icon,
connection_id: connection_id
}
};
if (data.hasOwnProperty("channel") && data.channel != "") {
updateElement["$addToSet"] = { channels: data.channel };
}
await update("user_names", { guid: guid }, updateElement, {
upsert: true
});
await update(
"user_names",
{ _id: "all_names" },
{ $addToSet: { names: name } }
);
//socket.emit('name', {type: "name", accepted: true});
if (old_name != name && !first && !no_name) {
if (
data.hasOwnProperty("channel") &&
typeof data.channel == "string"
) {
io.to(data.channel).emit("chat", {
from: old_name,
msg: " changed name to " + name
});
io.sockets.emit("chat.all", {
from: old_name,
msg: " changed name to " + name,
channel: data.channel
});
}
}
resolve(true);
} else {
if (tried < 3 || tried == undefined) {
if (tried == undefined) {
tried = 1;
}
namechange(data, guid, socket, tried + 1);
}
}
} else {
await SessionHandler.removeSessionChatPass(Functions.Helpers(socket));
socket.emit("name", { type: "name", accepted: false });
}
});
}
async function get_name(guid, announce_payload, first) {
return new Promise(async (resolve, reject) => {
if (
!announce_payload.announce &&
announce_payload.hasOwnProperty("socket")
) {
var sessionObject = await SessionHandler.getSessionChatPass(
Helpers.getSession(announce_payload.socket)
);
var name = sessionObject.name;
var pass = sessionObject.pass;
if (name == "" || pass == "") {
get_name_generate(
guid,
announce_payload,
first,
announce_payload.channel
);
return;
}
var docs = find("registered_users", { _id: name.toLowerCase() });
if (docs[0].password == Helpers.hash_pass(Helpers.decrypt_string(pass))) {
var icon = false;
if (docs[0].icon) {
icon = docs[0].icon;
}
SessionHandler.setSessionChatPass(
Functions.getSession(announce_payload.socket),
name.toLowerCase(),
pass
);
var connection_id = Helpers.hash_pass(
announce_payload.socket.handshake.headers["user-agent"] +
announce_payload.socket.handshake.address +
announce_payload.socket.handshake.headers["accept-language"]
);
var updateElement = {
$set: { name: name, icon: icon, connection_id: connection_id }
};
if (
announce_payload.hasOwnProperty("channel") &&
announce_payload.channel != ""
)
updateElement["$addToSet"] = {
channel: announce_payload.channel
};
await update("user_names", { guid: guid }, updateElement, {
upsert: true
});
await update(
"user_names",
{ _id: "all_names" },
{ $addToSet: { names: name } }
);
name = name;
resolve();
}
} else {
get_name_generate(
guid,
announce_payload,
first,
announce_payload.channel
);
resolve();
}
});
}
async function get_name_generate(guid, announce_payload, first, channel) {
return new Promise(async (resolve, reject) => {
var docs = await find("user_names", { guid: guid });
if (docs.length == 0) {
generate_name(guid, announce_payload, undefined);
} else {
name = docs[0].name;
}
});
}
async function generate_name(guid, announce_payload, second, round, channel) {
if (round == undefined) round = 0;
var tmp_name = Helpers.rndName(second ? second : guid, Math.floor(8 + round));
var docs = await find("registered_users", { _id: tmp_name });
if (docs.length == 0) {
var updated = await update(
"user_names",
{ _id: "all_names" },
{ $addToSet: { names: tmp_name } },
{ upsert: true }
);
if (
updated.nModified == 1 ||
(updated.hasOwnProperty("upserted") &&
updated.hasOwnProperty("n") &&
updated.n == 1)
) {
var connection_id = Helpers.hash_pass(
announce_payload.socket.handshake.headers["user-agent"] +
announce_payload.socket.handshake.address +
announce_payload.socket.handshake.headers["accept-language"]
);
var updateElement = {
$set: {
name: tmp_name,
icon: false,
connection_id: connection_id
}
};
if (channel != undefined && channel != "") {
updateElement["$addToSet"] = { channels: channel };
}
if (
announce_payload.hasOwnProperty("channel") &&
announce_payload.channel != ""
) {
updateElement["$addToSet"] = {
channels: announce_payload.channel
};
}
var updateElement = await update(
"user_names",
{ guid: guid },
updateElement,
{ upsert: true }
);
name = tmp_name;
if (announce_payload.announce) {
io.to(announce_payload.channel).emit("chat", {
from: announce_payload.old_name,
msg: " changed name to " + name
});
io.sockets.emit("chat.all", {
from: announce_payload.old_name,
msg: " changed name to " + name,
channel: announce_payload.channel
});
} else if (announce_payload.message && !announce_payload.all) {
io.to(announce_payload.channel).emit("chat", {
from: name,
msg: ": " + announce_payload.message
});
} else if (announce_payload.message && announce_payload.all) {
io.sockets.emit("chat.all", {
from: name,
msg: ": " + announce_payload.message,
channel: announce_payload.channel
});
}
} else {
generate_name(guid, announce_payload, tmp_name, round + 0.25, channel);
}
} else {
generate_name(guid, announce_payload, tmp_name, round + 0.25, channel);
}
}
module.exports.get_name = get_name;
module.exports.checkIfChatEnabled = checkIfChatEnabled;
module.exports.checkIfUserIsBanned = checkIfUserIsBanned;
module.exports.namechange = namechange;
module.exports.get_name_generate = get_name_generate;

View File

@@ -1,110 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var SessionHandler = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
async function end(obj, coll, guid, offline, socket) {
var socketid = socket.zoff_id;
if (typeof obj !== "object") {
return;
}
id = obj.id;
if (id !== undefined && id !== null && id !== "") {
if (
!obj.hasOwnProperty("id") ||
!obj.hasOwnProperty("channel") ||
(typeof obj.id != "string" && typeof obj.id != "number") ||
typeof obj.channel != "string"
) {
var result = {
channel: {
expected: "string",
got: obj.hasOwnProperty("channel") ? typeof obj.channel : undefined
},
pass: {
expected: "string",
got: obj.hasOwnProperty("pass") ? typeof obj.pass : undefined
},
id: {
expected: "string || number",
got: obj.hasOwnProperty("id") ? typeof obj.id : undefined
}
};
socket.emit("update_required", result);
return;
}
obj.id = obj.id + "";
id = id + "";
var callback_function = function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] == "function") {
arguments[i]();
}
}
};
var docs = await find(coll + "_settings");
var authentication_needed = false;
if (
docs.length > 0 &&
(docs[0].userpass != undefined && docs[0].userpass != "")
) {
callback_function = SessionHandler.getSessionAdminUser;
authentication_needed = true;
var sessionAdminUser = await SessionHandler.getSessionAdminUser(
Helpers.getSession(socket),
coll
);
obj.userpass = sessionAdminUser.userpass;
}
if (userpass != "" || obj.pass == undefined) {
obj.pass = userpass;
} else {
obj.pass = crypto
.createHash("sha256")
.update(Helpers.decrypt_string(obj.pass))
.digest("base64");
}
if (
!authentication_needed ||
(authentication_needed &&
obj.hasOwnProperty("pass") &&
docs[0].userpass == obj.pass)
) {
Functions.check_inlist(
coll,
guid,
socket,
offline,
undefined,
"place 13"
);
var np = await find(coll, { now_playing: true });
if (err !== null) console.log(err);
if (np !== null && np !== undefined && np.length == 1 && np[0].id == id) {
var startTime = docs[0].startTime;
if (startTime + parseInt(np[0].duration) <= Helpers.get_time() + 5) {
changeSong(coll, false, id, docs);
}
}
} else {
socket.emit("auth_required");
}
} else {
var result = {
msg: {
expected: "object",
got: typeof obj
}
};
socket.emit("update_required", result);
}
}
module.exports.end = end;

View File

@@ -1,112 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var aggregate = require(pathThumbnails + "/handlers/dbFunctions/aggregate.js");
async function frontpageLists(msg, socket) {
if (
msg == undefined ||
!msg.hasOwnProperty("version") ||
msg.version != VERSION ||
msg.version == undefined
) {
var result = {
version: {
expected: VERSION,
got: msg.hasOwnProperty("version") ? msg.version : undefined
}
};
socket.emit("update_required", result);
return;
}
var docs = await find("frontpage_lists", { frontpage: true });
var tot = await find("connected_users", { _id: "total_users" });
socket.compress(true).emit("playlists", {
channels: docs,
viewers: tot[0].total_users.length
});
}
async function getFrontpageLists(callback) {
return new Promise(async (resolve, reject) => {
var project_object = {
_id: 1,
count: 1,
frontpage: 1,
id: 1,
title: 1,
viewers: 1,
accessed: 1,
pinned: { $ifNull: ["$pinned", 0] },
description: {
$ifNull: [
{
$cond: {
if: {
$or: [
{ $eq: ["$description", ""] },
{ $eq: ["$description", null] },
{ $eq: ["$description", undefined] }
]
},
then: "This list has no description",
else: "$description"
}
},
"This list has no description"
]
},
thumbnail: {
$ifNull: [
{
$cond: {
if: {
$or: [
{ $eq: ["$thumbnail", ""] },
{ $eq: ["$thumbnail", null] },
{ $eq: ["$thumbnail", undefined] }
]
},
then: {
$concat: [
"https://img.youtube.com/vi/",
"$id",
"/mqdefault.jpg"
]
},
else: "$thumbnail"
}
},
{ $concat: ["https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"] }
]
}
};
var docs = await aggregate("frontpage_lists", [
{
$match: {
frontpage: true,
count: { $gt: 3 }
}
},
{
$project: project_object
},
{
$sort: {
pinned: -1,
viewers: -1,
accessed: -1,
count: -1,
title: 1
}
}
]);
resolve(docs);
});
}
module.exports.frontpageLists = frontpageLists;
module.exports.getFrontpageLists = getFrontpageLists;

View File

@@ -1,51 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
async function incrementList(collection, way) {
return update(
collection,
{ _id: coll, count: { $gt: 0 } },
{
$inc: { count: way },
$set: { accessed: Helpers.get_time() }
},
{ upsert: true }
);
}
async function updateFrontpage(coll, id, title, thumbnail, source) {
//coll = coll.replace(/ /g,'');
return new Promise(async (resolve, reject) => {
var doc = await find("frontpage_lists", { _id: coll });
var updateObject = {
id: id,
title: title,
accessed: Helpers.get_time()
};
if (
doc.length > 0 &&
((doc[0].thumbnail != "" &&
doc[0].thumbnail != undefined &&
(doc[0].thumbnail.indexOf("https://i1.sndcdn.com") > -1 ||
doc[0].thumbnail.indexOf("https://w1.sndcdn.com") > -1 ||
doc[0].thumbnail.indexOf("https://img.youtube.com") > -1)) ||
(doc[0].thumbnail == "" || doc[0].thumbnail == undefined))
) {
updateObject.thumbnail = thumbnail;
if (thumbnail == undefined) updateObject.thumbnail = "";
}
await update(
"frontpage_lists",
{ _id: coll },
{ $set: updateObject },
{ upsert: true }
);
resolve();
});
}
module.exports.updateFrontpage = updateFrontpage;
module.exports.incrementList = incrementList;

View File

@@ -1,111 +0,0 @@
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var SessionHandler = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var Chat = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/chat.js");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
async function check(coll, guid, socket, offline, callback, double_check) {
return new Promise(async (resolve, reject) => {
if (coll == undefined) {
resolve();
return;
}
//coll = coll.replace(/ /g,'');
if (!offline && coll != undefined) {
var updated = await update(
"connected_users",
{ _id: coll },
{ $addToSet: { users: guid } },
{ upsert: true }
);
if (updated.nModified > 0 || updated.upserted != undefined) {
var new_doc = await find("connected_users", { _id: coll });
await update(
"frontpage_lists",
{ _id: coll },
{ $set: { viewers: new_doc[0].users.length } }
);
if (
new_doc[0].users == undefined ||
new_doc[0].users.length == undefined
) {
io.to(coll).emit("viewers", 1);
} else {
io.to(coll).emit("viewers", new_doc[0].users.length);
}
var enabled = await Chat.namechange(
{ initial: true, first: true, channel: coll },
guid,
socket,
false
);
var docs = await find("user_names", { guid: guid });
if (docs.length == 1) {
var icon = "";
if (docs[0].icon != undefined) icon = docs[0].icon;
update(
"user_names",
{ guid: guid },
{ $addToSet: { channels: coll } }
);
if (enabled) {
socket.broadcast.to(coll).emit("chat", {
from: docs[0].name,
icon: icon,
msg: " joined"
});
}
} else if (docs.length == 0) {
//console.log("User doesn't have a name for some reason.");
//console.log("guid", guid);
//console.log("channel", coll);
//console.log("Trying to get a chat-name");
Chat.get_name(guid, {
announce: false,
socket: socket,
channel: coll
});
}
update(
"connected_users",
{ _id: "total_users" },
{ $addToSet: { total_users: guid + coll } }
);
resolve();
} else {
var new_doc = await find("connected_users", { _id: coll });
io.to(coll).emit("viewers", new_doc[0].users.length);
resolve();
}
} else {
if (offline) {
update(
"connected_users",
{ _id: "offline_users" },
{ $addToSet: { users: guid } }
);
} else {
update(
"connected_users",
{ _id: coll },
{ $addToSet: { users: guid } }
);
}
//
if (coll != undefined && coll != "") {
update(
"connected_users",
{ _id: "total_users" },
{ $addToSet: { total_users: guid + coll } }
);
}
resolve();
}
});
}
module.exports.check = check;

View File

@@ -1,206 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var create = require(pathThumbnails + "/handlers/dbFunctions/create.js");
var insert = require(pathThumbnails + "/handlers/dbFunctions/insert.js");
var sendList = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sendList.js");
var crypto = require("crypto");
var SessionHandler = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
var Inlist = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/inlistCheck.js");
var Play = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/play.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
async function joinSilent(msg, socket) {
if (typeof msg === "object" && msg !== undefined && msg !== null) {
var channelName = msg.channel;
var tryingPassword = false;
var password = "";
if (msg.password != "") {
tryingPassword = true;
password = Helpers.decrypt_string(msg.password);
password = crypto
.createHash("sha256")
.update(password)
.digest("base64");
}
channelName = channelName.toLowerCase(); //.replace(/ /g,'');
channelName = Helpers.removeEmojis(channelName).toLowerCase();
var docs = await find(channelName + "_settings");
if (docs.length == 0) {
socket.emit("join_silent_declined", "");
return;
}
if (
docs[0].userpass == "" ||
docs[0].userpass == undefined ||
docs[0].userpass == password
) {
socket.join(channelName);
socket.emit("join_silent_accepted", "");
Play.sendPlay(channelName, socket);
} else {
socket.emit("join_silent_declined", "");
}
} else {
return;
}
}
async function joinList(msg, guid, coll, offline, socket) {
var socketid = socket.zoff_id;
if (typeof msg === "object" && msg !== undefined && msg !== null) {
var sessionAdminUser = await SessionHandler.getSessionAdminUser(
Helpers.getSession(socket),
coll
);
var userpass = sessionAdminUser.userpass;
var adminpass = sessionAdminUser.adminpass;
var gotten = sessionAdminUser.gotten;
if (gotten && userpass != "" && !msg.hasOwnProperty("pass")) {
msg.pass = userpass;
} else {
msg.pass = crypto
.createHash("sha256")
.update(Helpers.decrypt_string(msg.pass))
.digest("base64");
}
adminpass = Helpers.hash_pass(adminpass);
if (
!msg.hasOwnProperty("version") ||
!msg.hasOwnProperty("channel") ||
msg.version != VERSION ||
msg.version == undefined ||
typeof msg.channel != "string"
) {
var result = {
channel: {
expected: "string",
got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined
},
version: {
expected: VERSION,
got: msg.version
},
pass: {
expected: "string",
got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined
}
};
socket.emit("update_required", result);
return;
}
coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
coll = Helpers.removeEmojis(coll).toLowerCase();
//coll = filter.clean(coll);
var pass = msg.pass;
var frontpage_lists = await find("frontpage_lists", { _id: coll });
if (frontpage_lists.length == 1) {
var docs = await find(coll + "_settings");
if (
docs.length == 0 ||
(docs.length > 0 &&
(docs[0].userpass == undefined ||
docs[0].userpass == "" ||
docs[0].userpass == pass))
) {
if (
docs.length > 0 &&
docs[0].hasOwnProperty("userpass") &&
docs[0].userpass != "" &&
docs[0].userpass == pass
) {
SessionHandler.setSessionUserPass(
Helpers.getSession(socket),
msg.pass,
coll
);
socket.emit("auth_accepted", { value: true });
}
if (docs.length > 0 && docs[0].userpass != pass) {
SessionHandler.setSessionUserPass(
Helpers.getSession(socket),
"",
coll
);
}
if (
docs.length > 0 &&
docs[0].hasOwnProperty("adminpass") &&
docs[0].adminpass != "" &&
docs[0].adminpass == adminpass
) {
socket.emit("pw", true);
}
in_list = true;
socket.join(coll);
Inlist.check(coll, guid, socket, offline, undefined, "place 10");
if (frontpage_lists[0].viewers != undefined) {
io.to(coll).emit("viewers", frontpage_lists[0].viewers);
} else {
io.to(coll).emit("viewers", 1);
}
sendList(coll, socket, true, false, true);
} else {
socket.emit("auth_required");
}
} else {
var docs = await create.collection(coll);
var index = await create.index(coll, { id: 1 }, { unique: true });
var configs = {
addsongs: false,
adminpass: "",
allvideos: true,
frontpage: true,
longsongs: false,
removeplay: false,
shuffle: true,
skip: false,
skips: [],
startTime: Helpers.get_time(),
views: [],
vote: false,
description: "",
thumbnail: "",
rules: "",
userpass: "",
id: "config",
toggleChat: true
};
await insert(coll + "_settings", configs);
socket.join(coll);
sendList(coll, socket, true, false, true);
insert("frontpage_lists", {
_id: coll,
count: 0,
frontpage: true,
accessed: Helpers.get_time(),
viewers: 1
});
Inlist.check(coll, guid, socket, offline, undefined, "place 11");
}
} else {
var result = {
msg: {
expected: "object",
got: typeof msg
}
};
socket.emit("update_required", result);
}
}
module.exports.joinSilent = joinSilent;
module.exports.joinList = joinList;

View File

@@ -1,131 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var aggregate = require(pathThumbnails + "/handlers/dbFunctions/aggregate.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
var nextSongAggregate = [
{
$match: {
views: {
$exists: false
},
type: {
$ne: "suggested"
}
}
},
{
$sort: {
now_playing: 1,
votes: -1,
added: 1,
title: 1
}
},
{
$limit: 1
}
];
async function getNowPlaying(list, socket) {
return new Promise(async (resolve, reject) => {
if (typeof list !== "string" || typeof fn !== "function") {
socket.emit("update_required");
return;
}
var docs = await find(list, { now_playing: true });
if (docs.length === 0) {
resolve("No song currently playing");
return;
}
var title = docs[0].title;
if (title === undefined) resolve("No song currently playing");
else resolve(title);
});
}
async function sendPlay(coll, socket, broadcast) {
//coll = coll.replace(/ /g,'');
var np = await find(coll, { now_playing: true });
var conf = await find(coll + "_settings");
console.log(np);
try {
if (Helpers.get_time() - conf[0].startTime > np[0].duration) {
changeSong(coll, false, np[0].id, conf);
} else if (conf !== null && conf !== undefined && conf.length !== 0) {
if (conf[0].adminpass !== "") conf[0].adminpass = true;
if (conf[0].hasOwnProperty("userpass") && conf[0].userpass != "")
conf[0].userpass = true;
else conf[0].userpass = false;
if (!np.hasOwnProperty("start")) np.start = 0;
if (!np.hasOwnProperty("end")) np.end = np.duration;
toSend = { np: np, conf: conf, time: Helpers.get_time() };
if (socket === undefined) {
io.to(coll).emit("np", toSend);
//
getNextSong(coll, undefined);
var url = "https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
if (np[0].source == "soundcloud") url = np[0].thumbnail;
Helpers.sendColor(coll, false, url);
} else {
var url = "https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
if (np[0].source == "soundcloud") url = np[0].thumbnail;
Helpers.sendColor(coll, socket, url);
if (broadcast) {
socket.to(coll).emit("np", toSend);
return;
}
socket.emit("np", toSend);
}
}
} catch (e) {
console.log(e);
if (socket) {
if (broadcast) {
socket.to(coll).emit("np", {});
return;
}
socket.emit("np", {});
} else {
io.to(coll).emit("np", {});
}
}
}
async function getNextSong(coll, socket) {
//coll = coll.replace(/ /g,'');
return new Promise(async (resolve, reject) => {
var doc = await aggregate(coll, nextSongAggregate);
if (doc.length == 1) {
var thumbnail = "";
var source = "youtube";
if (doc[0].source && doc[0].source == "soundcloud") {
source = "soundcloud";
thumbnail = doc[0].thumbnail;
}
if (socket != undefined) {
socket.emit("next_song", {
videoId: doc[0].id,
title: doc[0].title,
source: source,
thumbnail: thumbnail
});
} else {
io.to(coll).emit("next_song", {
videoId: doc[0].id,
title: doc[0].title,
source: source,
thumbnail: thumbnail
});
}
}
resolve();
});
}
module.exports.getNowPlaying = getNowPlaying;
module.exports.getNextSong = getNextSong;
module.exports.sendPlay = sendPlay;

View File

@@ -1,228 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var remove = require(pathThumbnails + "/handlers/dbFunctions/remove.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var aggregate = require(pathThumbnails + "/handlers/dbFunctions/aggregate.js");
var sort = require(pathThumbnails + "/handlers/dbFunctions/sort.js");
var projects = require(pathThumbnails + "/handlers/aggregates.js");
var Play = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/play.js");
var changeSong = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/changeSong.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
async function sendList(coll, socket, send, list_send, configs, shuffled) {
//coll = coll.replace(/ /g,'');
var _conf = await aggregate(coll + "_settings", [
{
$match: {
id: "config"
}
},
{
$project: projects.toShowConfig
}
]);
var conf = _conf;
if (conf.length == 0) {
var conf = {
id: "config",
addsongs: false,
adminpass: "",
allvideos: true,
frontpage: true,
longsongs: false,
removeplay: false,
shuffle: true,
skip: false,
skips: [],
startTime: Helpers.get_time(),
views: [],
vote: false,
description: "",
thumbnail: "",
rules: "",
toggleChat: true,
userpass: ""
};
await update(coll + "_settings", { id: "config" }, conf, { upsert: true });
sendList(coll, socket, send, list_send, configs, shuffled);
} else {
var docs = await aggregate(coll, [
{
$match: { type: { $ne: "suggested" } }
},
{
$project: projects.project_object
},
{ $sort: { now_playing: -1, votes: -1, added: 1 } }
]);
if (docs.length > 0) {
var np_docs = await find(coll, { now_playing: true });
if (np_docs.length == 0) {
var now_playing_doc = await aggregate(coll, [
{
$match: {
views: {
$exists: false
},
type: {
$ne: "suggested"
}
}
},
{
$sort: {
now_playing: -1,
votes: -1,
added: 1,
title: 1
}
},
{
$limit: 1
}
]);
if (now_playing_doc[0].now_playing == false) {
await update(
coll,
{ id: now_playing_doc[0].id, now_playing: false },
{
$set: {
now_playing: true,
votes: 0,
guids: [],
added: Helpers.get_time()
}
}
);
await update(
coll + "_settings",
{ id: "config" },
{
$set: {
startTime: Helpers.get_time(),
skips: []
}
}
);
Frontpage.update_frontpage(
coll,
now_playing_doc[0].id,
now_playing_doc[0].title,
now_playing_doc[0].thumbnail,
now_playing_doc[0].source
);
sendList(coll, socket, send, list_send, configs, shuffled);
}
} else if (np_docs.length > 1) {
var docs = await aggregate(coll, [
{
$match: {
now_playing: true
}
},
{
$sort: {
now_playing: -1,
votes: -1,
added: 1,
title: 1
}
}
]);
var real_now_playing = docs[docs.length - 1];
await update(
coll,
{ now_playing: true, id: { $ne: real_now_playing.id } },
{ $set: { now_playing: false } },
{ multi: true }
);
sendList(coll, socket, send, list_send, configs, shuffled);
} else {
if (Helpers.get_time() - conf[0].startTime > np_docs[0].duration) {
await changeSong(coll, false, np_docs[0].id, conf, socket);
sendList(coll, socket, send, list_send, configs, shuffled);
} else {
if (list_send) {
io.to(coll).emit("channel", {
type: "list",
playlist: docs,
shuffled: shuffled
});
} else if (!list_send) {
socket.emit("channel", {
type: "list",
playlist: docs,
shuffled: shuffled
});
}
if (socket === undefined && send) {
Play.sendPlay(coll);
} else if (send) {
Play.sendPlay(coll, socket);
}
}
}
} else {
if (list_send) {
io.to(coll).emit("channel", {
type: "list",
playlist: docs,
shuffled: shuffled
});
} else if (!list_send) {
socket.emit("channel", {
type: "list",
playlist: docs,
shuffled: shuffled
});
}
if (socket === undefined && send) {
Play.sendPlay(coll);
} else if (send) {
Play.sendPlay(coll, socket);
}
}
if (configs) {
if (conf.length > 0) {
if (conf[0].adminpass !== "") conf[0].adminpass = true;
if (conf[0].hasOwnProperty("userpass") && conf[0].userpass != "")
conf[0].userpass = true;
else conf[0].userpass = false;
io.to(coll).emit("conf", conf);
} else if (conf.length == 0 && docs.length > 0) {
var conf = {
id: "config",
addsongs: false,
adminpass: "",
allvideos: true,
frontpage: true,
longsongs: false,
removeplay: false,
shuffle: true,
skip: false,
skips: [],
startTime: Helpers.get_time(),
views: [],
vote: false,
desc: "",
userpass: ""
};
await update(coll + "_settings", { id: "config" }, conf, {
upsert: true
});
io.to(coll).emit("conf", conf);
}
}
}
if (socket) {
var sugg = await sort(coll, { type: "suggested" }, { added: 1 });
socket.emit("suggested", sugg);
}
}
module.exports = sendList;

View File

@@ -1,179 +0,0 @@
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var remove = require(pathThumbnails + "/handlers/dbFunctions/remove.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
async function setSessionAdminPass(id, adminpass, list) {
return new Promise(async (resolve, reject) => {
try {
if (id == "empty" || id == undefined) {
resolve();
return;
}
var docs = update(
id,
{ _id: list },
{ $set: { adminpass: hash_pass(decrypt_string(adminpass), true) } },
{ upsert: true }
);
resolve();
} catch (e) {
reject();
}
});
}
async function setSessionChatPass(id, name, pass) {
return new Promise(async (resolve, reject) => {
try {
if (id == "empty" || id == undefined) {
resolve();
return;
}
var docs = await update(
id,
{ _id: "_chat_" },
{ $set: { password: pass, name: name } },
{ upsert: true }
);
resolve();
} catch (e) {
reject();
return;
}
});
}
async function getSessionChatPass(id) {
return new Promise(async (resolve, reject) => {
try {
if (id == "empty" || id == undefined) {
resolve({ name: "", pass: "", gotten: false });
return;
}
var d = await find(id, { _id: "_chat_" });
if (d.length > 0) {
var name = "";
var pass = "";
if (d[0].name != undefined) name = d[0].name;
if (d[0].password != undefined) pass = d[0].password;
resolve({ name: name, pass: pass, gotten: false });
return;
} else {
resolve({ name: "", pass: "", gotten: false });
return;
}
} catch (e) {
reject();
return;
}
});
}
async function setChromecastHost(id, other_id, list) {
return new Promise(async (resolve, reject) => {
try {
if (
id == "empty" ||
id == undefined ||
other_id == "empty" ||
other_id == undefined
) {
resolve(false);
return;
}
await update(
id,
{ _id: list },
{ chromecast: true, id: other_id },
{ upsert: true }
);
resolve(true);
return;
} catch (e) {
resolve(false);
}
});
}
async function setSessionUserPass(id, userpass, list) {
return new Promise(async (resolve, reject) => {
try {
if (id == "empty" || id == undefined || userpass == undefined) {
reject();
return;
}
update(
id,
{ _id: list },
{ $set: { userpass: userpass } },
{ upsert: true }
);
resolve();
return;
} catch (e) {
reject();
}
});
}
async function getSessionAdminUser(id, list) {
return new Promise(async (resolve, reject) => {
try {
if (id == "empty" || id == undefined) {
resolve({ userpass: "", adminpass: "", gotten: false });
return;
}
var d = await find(id, { _id: list });
var userpass = "";
var adminpass = "";
if (d.length > 0) {
if (d[0].hasOwnProperty("chromecast") && d[0].chromecast) {
return await getSessionAdminUser(d[0].id, list);
} else {
if (d[0].userpass != undefined) userpass = d[0].userpass;
if (d[0].adminpass != undefined) adminpass = d[0].adminpass;
resolve({ userpass: userpass, adminpass: adminpass, gotten: true });
}
} else {
resolve({ userpass: userpass, adminpass: adminpass, gotten: true });
}
} catch (e) {
resolve({ userpass: "", adminpass: "", gotten: false });
}
});
}
async function removeSessionChatPass(id) {
return new Promise(async (resolve, reject) => {
if (id == "empty" || id == undefined) {
resolve();
return;
}
await remove(id, { _id: "_chat_" });
resolve();
return;
});
}
async function removeSessionAdminPass(id, channel) {
return new Promise(async (resolve, reject) => {
if (id == "empty" || id == undefined) {
resolve();
return;
}
await update(id, { _id: channel }, { $set: { adminpass: "" } });
resolve();
});
}
module.exports.setSessionAdminPass = setSessionAdminPass;
module.exports.setSessionChatPass = setSessionChatPass;
module.exports.getSessionChatPass = getSessionChatPass;
module.exports.setChromecastHost = setChromecastHost;
module.exports.setSessionUserPass = setSessionUserPass;
module.exports.getSessionAdminUser = getSessionAdminUser;
module.exports.removeSessionChatPass = removeSessionChatPass;
module.exports.removeSessionAdminPass = removeSessionAdminPass;

View File

@@ -1,246 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
var SessionHandler = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
var Inlist = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/inlistCheck.js");
var Timeout = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/timeout.js");
var changeSong = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/changeSong.js");
var Play = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/play.js");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
async function skip(list, guid, coll, offline, socket, callback) {
var socketid = socket.zoff_id;
if (list === undefined || list === null || list === "") {
var result = {
msg: {
expected: "object",
got: typeof list
}
};
socket.emit("update_required", result);
return;
}
if (coll == undefined && list.hasOwnProperty("channel"))
coll = list.channel.toLowerCase();
if (coll !== undefined) {
try {
coll = list.channel.toLowerCase(); //.replace(/ /g,'');
if (coll.length == 0) return;
coll = Helpers.removeEmojis(coll).toLowerCase();
//coll = coll.replace(/_/g, "");
//coll = filter.clean(coll);
} catch (e) {
return;
}
}
if (!list.hasOwnProperty("id") || list.id == undefined) {
socket.emit("toast", "The list is empty.");
return;
}
if (
!list.hasOwnProperty("id") ||
!list.hasOwnProperty("channel") ||
(typeof list.id != "string" && typeof list.id != "number") ||
typeof list.channel != "string"
) {
var result = {
channel: {
expected: "string",
got: list.hasOwnProperty("channel") ? typeof list.channel : undefined
},
pass: {
expected: "string",
got: list.hasOwnProperty("pass") ? typeof list.pass : undefined
},
userpass: {
expected: "string",
got: list.hasOwnProperty("userpass") ? typeof list.userpass : undefined
},
id: {
expected: "string",
got: list.hasOwnProperty("id") ? typeof list.id : undefined
}
};
socket.emit("update_required", result);
return;
}
list.id = list.id + "";
var sessionAdminUser = await SessionHandler.getSessionAdminUser(
Helpers.getSession(socket),
coll
);
var userpass = sessionAdminUser.userpass;
var adminpass = sessionAdminUser.adminpass;
var gotten = sessionAdminUser.gotten;
if (adminpass != "" || list.pass == undefined) {
list.pass = Helpers.hash_pass(adminpass);
} else if (list.pass != "") {
list.pass = Helpers.hash_pass(
Helpers.hash_pass(Helpers.decrypt_string(list.pass), true)
);
} else {
list.pass = "";
}
if (userpass != "" || list.userpass == undefined) {
list.userpass = userpass;
} else {
list.userpass = crypto
.createHash("sha256")
.update(Helpers.decrypt_string(list.userpass))
.digest("base64");
}
var docs = await find(coll + "_settings");
if (
docs.length > 0 &&
(docs[0].userpass == undefined ||
docs[0].userpass == "" ||
(list.hasOwnProperty("userpass") && docs[0].userpass == list.userpass))
) {
Inlist.check(coll, guid, socket, offline, undefined, "place 12");
var video_id;
adminpass = "";
video_id = list.id;
var err = list.error;
var trueError = false;
if (err) {
trueError = await Search.check_if_error_or_blocked(
video_id,
coll,
err == "5" ||
err == "100" ||
err == "101" ||
err == "150" ||
err == 5 ||
err == 100 ||
err == 101 ||
err == 150
);
}
var error = false;
if (!trueError) {
adminpass = list.pass;
} else if (trueError) {
error = true;
}
hash = adminpass;
//db.collection(coll + "_settings").find(function(err, docs){
var strictSkip = false;
var strictSkipNumber = 10;
if (docs[0].strictSkip) strictSkip = docs[0].strictSkip;
if (docs[0].strictSkipNumber) strictSkipNumber = docs[0].strictSkipNumber;
if (docs !== null && docs.length !== 0) {
if (
!docs[0].skip ||
(docs[0].adminpass == hash && docs[0].adminpass !== "") ||
error
) {
var frontpage_viewers = await find("frontpage_lists", { _id: coll });
if (
error ||
((strictSkip &&
((docs[0].adminpass == hash && docs[0].adminpass !== "") ||
docs[0].skips.length + 1 >= strictSkipNumber)) ||
(!strictSkip &&
((frontpage_viewers[0].viewers / 2 <= docs[0].skips.length + 1 &&
!Helpers.contains(docs[0].skips, guid) &&
frontpage_viewers[0].viewers != 2) ||
(frontpage_viewers[0].viewers == 2 &&
docs[0].skips.length + 1 == 2 &&
!Helpers.contains(docs[0].skips, guid)) ||
(docs[0].adminpass == hash &&
docs[0].adminpass !== "" &&
docs[0].skip))))
) {
console.log("here");
var canContinue = await Timeout.check(
"skip",
1,
coll,
coll,
error,
true,
socket,
"The channel is skipping too often, please wait "
);
console.log("canSkip", canContinue);
if (!canContinue) {
return;
}
try {
await changeSong(coll, error, video_id, docs);
} catch (e) {
socket.emit("toast", "Something went wrong.. Please try again");
return;
}
Play.sendPlay(coll);
socket.emit("toast", "skip");
var docs = await find("user_names", { guid: guid });
if (docs.length == 1) {
var n = await find("registered_users", { _id: docs[0].name });
var icon = false;
if (n.length > 0 && n[0].icon) {
icon = n[0].icon;
}
io.to(coll).emit("chat", {
from: docs[0].name,
icon: icon,
msg: " skipped"
});
}
} else if (!Helpers.contains(docs[0].skips, guid)) {
await update(
coll + "_settings",
{ id: "config" },
{ $push: { skips: guid } }
);
if (frontpage_viewers[0].viewers == 2 && !strictSkip) {
to_skip = 1;
} else if (strictSkip) {
to_skip = strictSkipNumber - docs[0].skips.length - 1;
} else {
to_skip =
Math.ceil(frontpage_viewers[0].viewers / 2) -
docs[0].skips.length -
1;
}
socket.emit("toast", to_skip + " more are needed to skip!");
var docs = await find("user_names", { guid: guid });
if (docs.length == 1) {
var n = await find("registered_users", { _id: docs[0].name });
var icon = false;
if (n.length > 0 && n[0].icon) {
icon = n[0].icon;
}
socket.to(coll).emit("chat", {
from: docs[0].name,
msg: " voted to skip"
});
}
} else {
socket.emit("toast", "alreadyskip");
}
} else socket.emit("toast", "noskip");
}
//});
} else {
socket.emit("auth_required");
}
}
module.exports.skip = skip;

View File

@@ -1,68 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
var create = require(pathThumbnails + "/handlers/dbFunctions/create.js");
var insert = require(pathThumbnails + "/handlers/dbFunctions/insert.js");
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
function check(
type,
timeout,
channel,
guid,
conf_pass,
this_pass,
socket,
error_message
) {
return new Promise(async (resolve, reject) => {
if (conf_pass != "" && conf_pass == this_pass) {
resolve(true);
return;
}
var docs = await find("timeout_api", {
type: type,
guid: guid
});
if (docs.length > 0) {
var date = new Date(docs[0].createdAt);
date.setSeconds(date.getSeconds() + timeout);
var now = new Date();
var retry_in = (date.getTime() - now.getTime()) / 1000;
if (retry_in > 0) {
if (!error_message) {
resolve(false);
return;
} else if (error_message) {
var sOrNot =
Math.ceil(retry_in) > 1 || Math.ceil(retry_in) == 0 ? "s" : "";
socket.emit(
"toast",
error_message + Math.ceil(retry_in) + " second" + sOrNot + "."
);
} else {
socket.emit("toast", "wait_longer");
}
return;
}
}
var now_date = new Date();
await update(
"timeout_api",
{ type: type, guid: guid },
{
$set: {
createdAt: now_date,
type: type,
guid: guid
}
},
{ upsert: true }
);
resolve(true);
});
}
module.exports.check = check;

View File

@@ -1,20 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
function aggregate(collection, aggregateObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).aggregate(aggregateObject, function(
error,
results
) {
if (error) {
reject(error);
return;
}
resolve(results);
});
});
}
module.exports = aggregate;

View File

@@ -1,33 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function collection(collection) {
return new Promise(async (resolve, reject) => {
db.createCollection(coll, function(err, docs) {
if (err) {
reject(err);
return;
}
resolve(docs);
});
});
}
async function index(collection, indexObject, extraObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).createIndex(indexObject, extraObject, function(
err,
docs
) {
if (err) {
reject(err);
return;
}
resolve(docs);
});
});
}
module.exports.collection = collection;
module.exports.index = index;

View File

@@ -1,17 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function find(collection, searchObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).find(searchObject, (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
module.exports = find;

View File

@@ -1,17 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function findAndModify(collection, query) {
return new Promise(async (resolve, reject) => {
db.collection(collection).findAndModify(query, function(err, docs) {
if (err) {
reject(err);
return;
}
resolve(docs);
});
});
}
module.exports = findAndModify;

View File

@@ -1,17 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function insert(collection, insertObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).insert(insertObject, function(err, docs) {
if (err) {
reject(err);
return;
}
resolve(docs);
});
});
}
module.exports = insert;

View File

@@ -1,17 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
function remove(collection, removeObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).remove(removeObject, (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
module.exports = remove;

View File

@@ -1,19 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function sort(collection, searchObject, sortObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection)
.find(searchObject)
.sort(sortObject, (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
module.exports = sort;

View File

@@ -1,22 +0,0 @@
var path = require("path");
var mongojs = require("mongojs");
var db = require(pathThumbnails + "/handlers/db.js");
async function update(collection, searchObject, updateObject, extraObject) {
return new Promise(async (resolve, reject) => {
db.collection(collection).update(
searchObject,
updateObject,
extraObject,
(error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
}
);
});
}
module.exports = update;

View File

@@ -1,174 +0,0 @@
var crypto = require("crypto");
var ColorThief = require("color-thief-jimp");
var Jimp = require("jimp");
var sIO = require(pathThumbnails + "/apps/client.js").socketIO;
function encodeChannelName(str) {
var _fn = encodeURIComponent;
str = filter.clean(str);
var toReturn = _fn(str);
toReturn = toReturn.replace(/_/g, "%5F");
toReturn = toReturn.replace(/'/g, "%27");
toReturn = toReturn.replace(/%26amp%3B/g, "%26").replace(/%26amp%3b/g, "%26");
toReturn = toReturn.toLowerCase();
return toReturn;
}
function decodeChannelName(str) {
var _fn = decodeURIComponent;
str = str.toUpperCase();
var toReturn = _fn(str.replace(/%5F/g, "_").replace(/%27/g, "'"));
toReturn = filter.clean(toReturn);
return toReturn.toLowerCase();
}
function contains(a, obj) {
try {
var i = a.length;
while (i--) {
if (a[i] === obj) {
return true;
}
}
return false;
} catch (e) {
return false;
}
}
function getSession(socket) {
try {
/*var cookieParser = require("cookie-parser");
var cookie = require("cookie");
var parsedCookies = cookie.parse(socket.handshake.headers.cookie);
return parsedCookies["_uI"];*/
if (socket.cookie_id == undefined) throw "Undefined error";
return socket.cookie_id;
} catch (e) {
// Returning "sessiong"-based on place of connection
return hash_pass(
socket.handshake.headers["user-agent"] +
socket.handshake.address +
socket.handshake.headers["accept-language"]
);
//return "empty";
}
}
function hash_pass(adminpass, hex) {
if (adminpass == undefined || adminpass == "") return "";
if (hex)
return crypto
.createHash("sha256")
.update(adminpass)
.digest("hex");
return crypto
.createHash("sha256")
.update(adminpass)
.digest("base64");
}
function decrypt_string(pw) {
try {
return Buffer.from(pw, "base64").toString("ascii");
} catch (e) {
return "";
}
}
function removeEmojis(string) {
//https://stackoverflow.com/a/41164278/4266467
var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
return string.replace(regex, "");
}
function get_time() {
var d = new Date();
var time = Math.floor(d.getTime() / 1000);
return time;
}
function sendColor(coll, socket, url, ajax, res) {
if (coll != undefined && typeof coll == "string") {
//coll = coll.replace(/ /g,'');
}
if (url.indexOf("://") == -1)
url = "https://img.youtube.com/vi/" + url + "/mqdefault.jpg";
//var url = 'https://img.youtube.com/vi/'+id+'/mqdefault.jpg';
Jimp.read(url)
.then(function(image) {
var c = ColorThief.getColor(image);
if (ajax) {
res.header({ "Content-Type": "application/json" });
res.status(200).send(c);
return;
} else {
if (socket) {
socket.emit("color", { color: c, only: true });
} else {
io.to(coll).emit("color", { color: c, only: false });
}
}
})
.catch(function(err) {
console.log("Crashed on fetching image, url is " + url);
console.log("Is ajax: " + ajax);
if (ajax) {
res.header({ "Content-Type": "application/json" });
res.status(404);
return;
}
});
}
function rndName(seed, len) {
var vowels = ["a", "e", "i", "o", "u"];
consts = [
"b",
"c",
"d",
"f",
"g",
"h",
"j",
"k",
"l",
"m",
"n",
"p",
"r",
"s",
"t",
"v",
"w",
"x",
"y"
];
len = Math.floor(len);
word = "";
is_vowel = false;
var arr;
try {
for (var i = 0; i < len; i++) {
if (is_vowel) arr = vowels;
else arr = consts;
is_vowel = !is_vowel;
word += arr[(seed[i % seed.length].charCodeAt() + i) % (arr.length - 1)];
}
} catch (e) {
return rndName(uniqid.time().toLowerCase(), len);
}
return word;
}
module.exports.rndName = rndName;
module.exports.contains = contains;
module.exports.sendColor = sendColor;
module.exports.encodeChannelName = encodeChannelName;
module.exports.decodeChannelName = decodeChannelName;
module.exports.getSession = getSession;
module.exports.hash_pass = hash_pass;
module.exports.decrypt_string = decrypt_string;
module.exports.removeEmojis = removeEmojis;
module.exports.get_time = get_time;

View File

@@ -9,10 +9,6 @@ var Suggestions = require(pathThumbnails + "/handlers/suggestions.js");
var ListSettings = require(pathThumbnails + "/handlers/list_settings.js");
var Frontpage = require(pathThumbnails + "/handlers/frontpage.js");
var Search = require(pathThumbnails + "/handlers/search.js");
var Join = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/joinList.js");
var Skip = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/skip.js");
var crypto = require("crypto");
var Filter = require("bad-words");
var filter = new Filter({ placeHolder: "x" });
@@ -191,8 +187,24 @@ module.exports = function() {
});
socket.on("error_video", function(msg) {
msg = middleware(msg);
coll = msg.channel;
try {
msg.channel = Functions.encodeChannelName(msg.channel);
var _list = msg.channel; //.replace(/ /g,'');
if (_list.length == 0) return;
if (_list.indexOf("?") > -1) {
_list = _list.substring(0, _list.indexOf("?"));
msg.channel = _list;
}
coll = Functions.removeEmojis(_list).toLowerCase();
//coll = coll.replace(/_/g, "");
//coll = filter.clean(coll);
} catch (e) {
return;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Search.check_error_video(msg, coll);
});
@@ -228,32 +240,57 @@ module.exports = function() {
});
socket.on("suggest_thumbnail", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Suggestions.thumbnail(msg, coll, guid, offline, socket);
});
socket.on("suggest_description", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Suggestions.description(msg, coll, guid, offline, socket);
});
socket.on("suggest_rules", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Suggestions.rules(msg, coll, guid, offline, socket);
});
socket.on("namechange", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Chat.namechange(msg, guid, socket);
});
socket.on("removename", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
if (typeof msg != "object" || !msg.hasOwnProperty("channel")) {
var result = {
channel: {
@@ -268,8 +305,13 @@ module.exports = function() {
});
socket.on("offline", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
if (
!msg.hasOwnProperty("status") ||
!msg.hasOwnProperty("channel") ||
@@ -290,7 +332,7 @@ module.exports = function() {
return;
}
var status = msg.status;
var channel = Functions.encodeChannelName(msg.channel); //.replace(/ /g,'');
var channel = msg.channel; //.replace(/ /g,'');
if (status) {
in_list = false;
offline = true;
@@ -366,8 +408,13 @@ module.exports = function() {
});
socket.on("get_history", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
if (
!msg.hasOwnProperty("channel") ||
!msg.hasOwnProperty("all") ||
@@ -395,26 +442,46 @@ module.exports = function() {
});
socket.on("chat", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Chat.chat(msg, guid, offline, socket);
});
socket.on("all,chat", function(msg) {
msg = middleware(msg);
coll = msg.channel;
Chat.all_chat(msg, guid, offline, socket);
socket.on("all,chat", function(data) {
if (data.hasOwnProperty("channel") && data.channel.indexOf("?") > -1) {
var _list = data.channel.substring(0, data.channel.indexOf("?"));
data.channel = _list;
}
if (data.hasOwnProperty("channel")) {
data.channel = Functions.encodeChannelName(data.channel);
}
Chat.all_chat(data, guid, offline, socket);
});
socket.on("frontpage_lists", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
Frontpage.frontpage_lists(msg, socket);
});
socket.on("import_zoff", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
ListChange.addFromOtherList(msg, guid, offline, socket);
});
@@ -422,25 +489,42 @@ module.exports = function() {
List.now_playing(list, fn, socket);
});
socket.on("id", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (typeof msg == "object")
io.to(msg.id).emit(msg.id.toLowerCase(), {
type: msg.type,
value: msg.value
socket.on("id", function(arr) {
if (arr.hasOwnProperty("channel") && arr.channel.indexOf("?") > -1) {
var _list = arr.channel.substring(0, arr.channel.indexOf("?"));
arr.channel = _list;
}
if (arr.hasOwnProperty("channel")) {
arr.channel = Functions.encodeChannelName(arr.channel);
}
if (typeof arr == "object")
io.to(arr.id).emit(arr.id.toLowerCase(), {
type: arr.type,
value: arr.value
});
});
socket.on("join_silent", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
} else {
return;
}
List.join_silent(msg, socket);
});
socket.on("list", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
try {
//var _list = msg.channel.replace(/ /g,'');
var _list = msg.channel;
@@ -460,7 +544,7 @@ module.exports = function() {
if (msg.hasOwnProperty("offline") && msg.offline) {
offline = true;
}
Join.joinList(msg, guid, coll, offline, socket);
List.list(msg, guid, coll, offline, socket);
Functions.get_short_id(socket);
});
@@ -486,10 +570,15 @@ module.exports = function() {
List.end(obj, coll, guid, offline, socket);
});
socket.on("addPlaylist", function(msg) {
msg = middleware(msg);
coll = msg.channel;
ListChange.addPlaylist(msg, guid, offline, socket);
socket.on("addPlaylist", function(arr) {
if (arr.hasOwnProperty("channel") && arr.channel.indexOf("?") > -1) {
var _list = arr.channel.substring(0, arr.channel.indexOf("?"));
arr.channel = _list;
}
if (arr.hasOwnProperty("channel")) {
arr.channel = Functions.encodeChannelName(arr.channel);
}
ListChange.addPlaylist(arr, guid, offline, socket);
});
socket.on("add", function(arr) {
@@ -523,8 +612,13 @@ module.exports = function() {
socket.on("delete_all", function(msg) {
try {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
if (coll.length == 0) return;
coll = Functions.removeEmojis(coll).toLowerCase();
@@ -539,8 +633,13 @@ module.exports = function() {
});
socket.on("vote", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
if (coll !== undefined) {
try {
coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
@@ -556,30 +655,53 @@ module.exports = function() {
ListChange.voteUndecided(msg, coll, guid, offline, socket);
});
socket.on("password", function(msg) {
msg = middleware(msg);
coll = msg.channel;
socket.on("password", function(inp) {
if (inp.hasOwnProperty("channel") && inp.channel.indexOf("?") > -1) {
var _list = inp.channel.substring(0, inp.channel.indexOf("?"));
inp.channel = _list;
}
if (inp.hasOwnProperty("channel")) {
inp.channel = Functions.encodeChannelName(inp.channel);
}
//if(coll != undefined) coll.replace(/ /g,'');
ListSettings.password(msg, coll, guid, offline, socket);
ListSettings.password(inp, coll, guid, offline, socket);
});
socket.on("skip", function(msg) {
msg = middleware(msg);
coll = msg.channel;
socket.on("skip", function(list) {
if (list.hasOwnProperty("channel") && list.channel.indexOf("?") > -1) {
var _list = list.channel.substring(0, list.channel.indexOf("?"));
list.channel = _list;
coll = list.channel;
}
if (list.hasOwnProperty("channel")) {
list.channel = Functions.encodeChannelName(list.channel);
}
//if(coll != undefined) coll.replace(/ /g,'');
Skip.skip(msg, guid, coll, offline, socket);
List.skip(list, guid, coll, offline, socket);
});
socket.on("conf", function(msg) {
msg = middleware(msg);
coll = msg.channel;
socket.on("conf", function(conf) {
if (conf.hasOwnProperty("channel") && conf.channel.indexOf("?") > -1) {
var _list = conf.channel.substring(0, conf.channel.indexOf("?"));
conf.channel = _list;
coll = conf.channel;
}
if (conf.hasOwnProperty("channel")) {
conf.channel = Functions.encodeChannelName(conf.channel);
coll = conf.channel;
}
//if(coll != undefined) coll.replace(/ /g,'');
ListSettings.conf_function(conf, coll, guid, offline, socket);
});
socket.on("shuffle", function(msg) {
msg = middleware(msg);
coll = msg.channel;
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
try {
coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
if (coll.length == 0) return;
@@ -811,17 +933,6 @@ module.exports = function() {
//send_ping();
};
function middleware(msg) {
if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
var _list = list.channel.substring(0, msg.channel.indexOf("?"));
msg.channel = _list;
}
if (msg.hasOwnProperty("channel")) {
msg.channel = Functions.encodeChannelName(msg.channel);
}
return msg;
}
/*
function send_ping() {
db.collection("connected_users").update({users: {$exists: true}}, {$set: {users: []}}, {multi: true}, function(err, docs){

View File

@@ -1,9 +1,6 @@
var ColorThief = require("color-thief-jimp");
var Jimp = require("jimp");
var Functions = require(pathThumbnails + "/handlers/functions.js");
var AdvancedFunctions = require(pathThumbnails +
"/handlers/dbFunctions/advancedFunctions/joinList.js");
var Frontpage = require(pathThumbnails + "/handlers/frontpage.js");
var projects = require(pathThumbnails + "/handlers/aggregates.js");
var crypto = require("crypto");
@@ -18,7 +15,6 @@ var filter = new Filter({ placeHolder: "x" });
var request = require("request");
var db = require(pathThumbnails + "/handlers/db.js");
// done
function now_playing(list, fn, socket) {
if (typeof list !== "string" || typeof fn !== "function") {
socket.emit("update_required");
@@ -36,46 +32,216 @@ function now_playing(list, fn, socket) {
}
function join_silent(msg, socket) {
if (typeof msg === "object" && msg !== undefined && msg !== null) {
var channelName = msg.channel;
var tryingPassword = false;
var password = "";
if (msg.password != "") {
tryingPassword = true;
password = Functions.decrypt_string(msg.password);
password = crypto
.createHash("sha256")
.update(password)
.digest("base64");
}
if (typeof msg === "object" && msg !== undefined && msg !== null) {
var channelName = msg.channel;
var tryingPassword = false;
var password = "";
if(msg.password != "") {
tryingPassword = true;
password = Functions.decrypt_string(msg.password);
password = crypto
.createHash("sha256")
.update(password)
.digest("base64");
}
channelName = channelName.toLowerCase(); //.replace(/ /g,'');
channelName = Functions.removeEmojis(channelName).toLowerCase();
db.collection(channelName + "_settings").find(function(err, docs) {
if (docs.length == 0) {
socket.emit("join_silent_declined", "");
channelName = channelName.toLowerCase(); //.replace(/ /g,'');
channelName = Functions.removeEmojis(channelName).toLowerCase();
db.collection(channelName + "_settings").find(function(err, docs) {
if(docs.length == 0) {
socket.emit("join_silent_declined", "");
return;
}
if(docs[0].userpass == "" || docs[0].userpass == undefined || docs[0].userpass == password) {
socket.join(channelName);
socket.emit("join_silent_accepted", "");
send_play(channelName, socket);
} else {
socket.emit("join_silent_declined", "");
}
});
} else {
return;
}
if (
docs[0].userpass == "" ||
docs[0].userpass == undefined ||
docs[0].userpass == password
) {
socket.join(channelName);
socket.emit("join_silent_accepted", "");
send_play(channelName, socket);
} else {
socket.emit("join_silent_declined", "");
}
});
} else {
return;
}
}
}
function list(msg, guid, coll, offline, socket) {
AdvancedFunctions.joinList(msg, guid, coll, offline, socket);
var socketid = socket.zoff_id;
if (typeof msg === "object" && msg !== undefined && msg !== null) {
Functions.getSessionAdminUser(Functions.getSession(socket), coll, function(
userpass,
adminpass,
gotten
) {
if (gotten && userpass != "" && !msg.hasOwnProperty("pass")) {
msg.pass = userpass;
} else {
msg.pass = crypto
.createHash("sha256")
.update(Functions.decrypt_string(msg.pass))
.digest("base64");
}
adminpass = Functions.hash_pass(adminpass);
if (
!msg.hasOwnProperty("version") ||
!msg.hasOwnProperty("channel") ||
msg.version != VERSION ||
msg.version == undefined ||
typeof msg.channel != "string"
) {
var result = {
channel: {
expected: "string",
got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined
},
version: {
expected: VERSION,
got: msg.version
},
pass: {
expected: "string",
got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined
}
};
socket.emit("update_required", result);
return;
}
coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
coll = Functions.removeEmojis(coll).toLowerCase();
//coll = filter.clean(coll);
var pass = msg.pass;
db.collection("frontpage_lists").find({ _id: coll }, function(
err,
frontpage_lists
) {
if (frontpage_lists.length == 1) {
db.collection(coll + "_settings").find(function(err, docs) {
if (
docs.length == 0 ||
(docs.length > 0 &&
(docs[0].userpass == undefined ||
docs[0].userpass == "" ||
docs[0].userpass == pass))
) {
if (
docs.length > 0 &&
docs[0].hasOwnProperty("userpass") &&
docs[0].userpass != "" &&
docs[0].userpass == pass
) {
Functions.setSessionUserPass(
Functions.getSession(socket),
msg.pass,
coll,
function() {}
);
socket.emit("auth_accepted", { value: true });
}
if (docs.length > 0 && docs[0].userpass != pass) {
Functions.setSessionUserPass(
Functions.getSession(socket),
"",
coll,
function() {}
);
}
if (
docs.length > 0 &&
docs[0].hasOwnProperty("adminpass") &&
docs[0].adminpass != "" &&
docs[0].adminpass == adminpass
) {
socket.emit("pw", true);
}
in_list = true;
socket.join(coll);
Functions.check_inlist(
coll,
guid,
socket,
offline,
undefined,
"place 10"
);
if (frontpage_lists[0].viewers != undefined) {
io.to(coll).emit("viewers", frontpage_lists[0].viewers);
} else {
io.to(coll).emit("viewers", 1);
}
send_list(coll, socket, true, false, true);
} else {
socket.emit("auth_required");
}
});
} else {
db.createCollection(coll, function(err, docs) {
db.collection(coll).createIndex(
{ id: 1 },
{ unique: true },
function(e, d) {
var configs = {
addsongs: false,
adminpass: "",
allvideos: true,
frontpage: true,
longsongs: false,
removeplay: false,
shuffle: true,
skip: false,
skips: [],
startTime: Functions.get_time(),
views: [],
vote: false,
description: "",
thumbnail: "",
rules: "",
userpass: "",
id: "config",
toggleChat: true
};
db.collection(coll + "_settings").insert(configs, function(
err,
docs
) {
socket.join(coll);
send_list(coll, socket, true, false, true);
db.collection("frontpage_lists").insert(
{
_id: coll,
count: 0,
frontpage: true,
accessed: Functions.get_time(),
viewers: 1
},
function(e, d) {}
);
Functions.check_inlist(
coll,
guid,
socket,
offline,
undefined,
"place 11"
);
});
}
);
});
}
});
});
} else {
var result = {
msg: {
expected: "object",
got: typeof msg
}
};
socket.emit("update_required", result);
}
}
function skip(list, guid, coll, offline, socket, callback) {

View File

@@ -43,20 +43,20 @@
</a>
</li>
<li>
<a title="Like what we made? Help us by donating (a) beer!" class="waves-effect waves-light btn orange light-blue share donate-button">
<a class="waves-effect waves-light btn orange share donate-button">
<i class="material-icons left footer-button-icon">payment</i>Donate
</a>
</li>
<li>
<a href="https://github.com/users/kasperrt/sponsorship" target="_blank" class="waves-effect waves-light btn pink accent-1 share">
<i class="material-icons left footer-button-icon">favorite</i>Sponsor
</a>
</li>
<li class="google-play-image-list">
<a class="android-image-link" href="https://play.google.com/store/apps/details?id=zoff.me.zoff&hl=no&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1">
<img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png"/>
</a>
</li>
<li class="apple-appstore-image-list">
<a class="apple-image-link" href="https://itunes.apple.com/us/app/zoff/id1402037061?ls=1&mt=8">
<img alt="Get it on the AppStore" src="/assets/images/appstore.svg"/>
</a>
</li>
</ul>
</div>
</div>