@lordbex/thelounge 4.4.3-blowfish

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/.thelounge_home +1 -0
  2. package/LICENSE +22 -0
  3. package/README.md +95 -0
  4. package/client/index.html.tpl +69 -0
  5. package/dist/defaults/config.js +465 -0
  6. package/dist/package.json +174 -0
  7. package/dist/server/client.js +678 -0
  8. package/dist/server/clientManager.js +220 -0
  9. package/dist/server/command-line/index.js +85 -0
  10. package/dist/server/command-line/install.js +123 -0
  11. package/dist/server/command-line/outdated.js +30 -0
  12. package/dist/server/command-line/start.js +34 -0
  13. package/dist/server/command-line/storage.js +103 -0
  14. package/dist/server/command-line/uninstall.js +40 -0
  15. package/dist/server/command-line/upgrade.js +64 -0
  16. package/dist/server/command-line/users/add.js +67 -0
  17. package/dist/server/command-line/users/edit.js +39 -0
  18. package/dist/server/command-line/users/index.js +17 -0
  19. package/dist/server/command-line/users/list.js +53 -0
  20. package/dist/server/command-line/users/remove.js +37 -0
  21. package/dist/server/command-line/users/reset.js +64 -0
  22. package/dist/server/command-line/utils.js +177 -0
  23. package/dist/server/config.js +138 -0
  24. package/dist/server/helper.js +161 -0
  25. package/dist/server/identification.js +139 -0
  26. package/dist/server/index.js +3 -0
  27. package/dist/server/log.js +35 -0
  28. package/dist/server/models/chan.js +275 -0
  29. package/dist/server/models/msg.js +92 -0
  30. package/dist/server/models/network.js +546 -0
  31. package/dist/server/models/prefix.js +31 -0
  32. package/dist/server/models/user.js +42 -0
  33. package/dist/server/plugins/auth/ldap.js +188 -0
  34. package/dist/server/plugins/auth/local.js +41 -0
  35. package/dist/server/plugins/auth.js +70 -0
  36. package/dist/server/plugins/changelog.js +103 -0
  37. package/dist/server/plugins/clientCertificate.js +115 -0
  38. package/dist/server/plugins/dev-server.js +33 -0
  39. package/dist/server/plugins/inputs/action.js +54 -0
  40. package/dist/server/plugins/inputs/away.js +20 -0
  41. package/dist/server/plugins/inputs/ban.js +45 -0
  42. package/dist/server/plugins/inputs/blow.js +44 -0
  43. package/dist/server/plugins/inputs/connect.js +41 -0
  44. package/dist/server/plugins/inputs/ctcp.js +29 -0
  45. package/dist/server/plugins/inputs/disconnect.js +15 -0
  46. package/dist/server/plugins/inputs/ignore.js +74 -0
  47. package/dist/server/plugins/inputs/ignorelist.js +50 -0
  48. package/dist/server/plugins/inputs/index.js +105 -0
  49. package/dist/server/plugins/inputs/invite.js +31 -0
  50. package/dist/server/plugins/inputs/kick.js +26 -0
  51. package/dist/server/plugins/inputs/kill.js +13 -0
  52. package/dist/server/plugins/inputs/list.js +12 -0
  53. package/dist/server/plugins/inputs/mode.js +55 -0
  54. package/dist/server/plugins/inputs/msg.js +106 -0
  55. package/dist/server/plugins/inputs/mute.js +56 -0
  56. package/dist/server/plugins/inputs/nick.js +55 -0
  57. package/dist/server/plugins/inputs/notice.js +42 -0
  58. package/dist/server/plugins/inputs/part.js +46 -0
  59. package/dist/server/plugins/inputs/quit.js +27 -0
  60. package/dist/server/plugins/inputs/raw.js +13 -0
  61. package/dist/server/plugins/inputs/rejoin.js +25 -0
  62. package/dist/server/plugins/inputs/topic.js +24 -0
  63. package/dist/server/plugins/inputs/whois.js +19 -0
  64. package/dist/server/plugins/irc-events/away.js +59 -0
  65. package/dist/server/plugins/irc-events/cap.js +62 -0
  66. package/dist/server/plugins/irc-events/chghost.js +29 -0
  67. package/dist/server/plugins/irc-events/connection.js +152 -0
  68. package/dist/server/plugins/irc-events/ctcp.js +72 -0
  69. package/dist/server/plugins/irc-events/error.js +80 -0
  70. package/dist/server/plugins/irc-events/help.js +21 -0
  71. package/dist/server/plugins/irc-events/info.js +21 -0
  72. package/dist/server/plugins/irc-events/invite.js +27 -0
  73. package/dist/server/plugins/irc-events/join.js +53 -0
  74. package/dist/server/plugins/irc-events/kick.js +39 -0
  75. package/dist/server/plugins/irc-events/link.js +442 -0
  76. package/dist/server/plugins/irc-events/list.js +47 -0
  77. package/dist/server/plugins/irc-events/message.js +187 -0
  78. package/dist/server/plugins/irc-events/mode.js +124 -0
  79. package/dist/server/plugins/irc-events/modelist.js +67 -0
  80. package/dist/server/plugins/irc-events/motd.js +29 -0
  81. package/dist/server/plugins/irc-events/names.js +21 -0
  82. package/dist/server/plugins/irc-events/nick.js +45 -0
  83. package/dist/server/plugins/irc-events/part.js +35 -0
  84. package/dist/server/plugins/irc-events/quit.js +32 -0
  85. package/dist/server/plugins/irc-events/sasl.js +26 -0
  86. package/dist/server/plugins/irc-events/topic.js +42 -0
  87. package/dist/server/plugins/irc-events/unhandled.js +31 -0
  88. package/dist/server/plugins/irc-events/welcome.js +22 -0
  89. package/dist/server/plugins/irc-events/whois.js +57 -0
  90. package/dist/server/plugins/messageStorage/sqlite.js +454 -0
  91. package/dist/server/plugins/messageStorage/text.js +124 -0
  92. package/dist/server/plugins/packages/index.js +200 -0
  93. package/dist/server/plugins/packages/publicClient.js +66 -0
  94. package/dist/server/plugins/packages/themes.js +61 -0
  95. package/dist/server/plugins/storage.js +88 -0
  96. package/dist/server/plugins/sts.js +85 -0
  97. package/dist/server/plugins/uploader.js +267 -0
  98. package/dist/server/plugins/webpush.js +99 -0
  99. package/dist/server/server.js +857 -0
  100. package/dist/server/storageCleaner.js +131 -0
  101. package/dist/server/utils/fish.js +432 -0
  102. package/dist/shared/irc.js +19 -0
  103. package/dist/shared/linkify.js +81 -0
  104. package/dist/shared/types/chan.js +22 -0
  105. package/dist/shared/types/changelog.js +2 -0
  106. package/dist/shared/types/config.js +2 -0
  107. package/dist/shared/types/mention.js +2 -0
  108. package/dist/shared/types/msg.js +34 -0
  109. package/dist/shared/types/network.js +2 -0
  110. package/dist/shared/types/storage.js +2 -0
  111. package/dist/shared/types/user.js +2 -0
  112. package/dist/webpack.config.js +224 -0
  113. package/index.js +38 -0
  114. package/package.json +174 -0
  115. package/public/audio/pop.wav +0 -0
  116. package/public/css/style.css +12 -0
  117. package/public/css/style.css.map +1 -0
  118. package/public/favicon.ico +0 -0
  119. package/public/fonts/fa-solid-900.woff +0 -0
  120. package/public/fonts/fa-solid-900.woff2 +0 -0
  121. package/public/img/favicon-alerted.ico +0 -0
  122. package/public/img/icon-alerted-black-transparent-bg-72x72px.png +0 -0
  123. package/public/img/icon-alerted-grey-bg-192x192px.png +0 -0
  124. package/public/img/icon-black-transparent-bg.svg +1 -0
  125. package/public/img/logo-grey-bg-120x120px.png +0 -0
  126. package/public/img/logo-grey-bg-152x152px.png +0 -0
  127. package/public/img/logo-grey-bg-167x167px.png +0 -0
  128. package/public/img/logo-grey-bg-180x180px.png +0 -0
  129. package/public/img/logo-grey-bg-192x192px.png +0 -0
  130. package/public/img/logo-grey-bg-512x512px.png +0 -0
  131. package/public/img/logo-grey-bg.svg +1 -0
  132. package/public/img/logo-horizontal-transparent-bg-inverted.svg +1 -0
  133. package/public/img/logo-horizontal-transparent-bg.svg +1 -0
  134. package/public/img/logo-transparent-bg-inverted.svg +1 -0
  135. package/public/img/logo-transparent-bg.svg +1 -0
  136. package/public/img/logo-vertical-transparent-bg-inverted.svg +1 -0
  137. package/public/img/logo-vertical-transparent-bg.svg +1 -0
  138. package/public/js/bundle.js +2 -0
  139. package/public/js/bundle.js.map +1 -0
  140. package/public/js/bundle.vendor.js +3 -0
  141. package/public/js/bundle.vendor.js.LICENSE.txt +18 -0
  142. package/public/js/bundle.vendor.js.map +1 -0
  143. package/public/js/loading-error-handlers.js +1 -0
  144. package/public/robots.txt +2 -0
  145. package/public/service-worker.js +1 -0
  146. package/public/thelounge.webmanifest +53 -0
  147. package/public/themes/default.css +35 -0
  148. package/public/themes/morning.css +183 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const lodash_1 = __importDefault(require("lodash"));
7
+ const helper_1 = __importDefault(require("../../helper"));
8
+ const msg_1 = __importDefault(require("../../models/msg"));
9
+ const user_1 = __importDefault(require("../../models/user"));
10
+ const package_json_1 = __importDefault(require("../../../package.json"));
11
+ const msg_2 = require("../../../shared/types/msg");
12
+ const ctcpResponses = {
13
+ CLIENTINFO: () => Object.getOwnPropertyNames(ctcpResponses)
14
+ .filter((key) => key !== "CLIENTINFO" && typeof ctcpResponses[key] === "function")
15
+ .join(" "),
16
+ PING: ({ message }) => message.substring(5),
17
+ SOURCE: () => package_json_1.default.repository.url,
18
+ VERSION: () => package_json_1.default.name + " -- " + package_json_1.default.homepage,
19
+ };
20
+ exports.default = (function (irc, network) {
21
+ const client = this;
22
+ const lobby = network.getLobby();
23
+ irc.on("ctcp response", function (data) {
24
+ const shouldIgnore = network.ignoreList.some(function (entry) {
25
+ return helper_1.default.compareHostmask(entry, data);
26
+ });
27
+ if (shouldIgnore) {
28
+ return;
29
+ }
30
+ let chan = network.getChannel(data.nick);
31
+ if (typeof chan === "undefined") {
32
+ chan = lobby;
33
+ }
34
+ const msg = new msg_1.default({
35
+ type: msg_2.MessageType.CTCP,
36
+ time: data.time,
37
+ from: chan.getUser(data.nick),
38
+ ctcpMessage: data.message,
39
+ });
40
+ chan.pushMessage(client, msg, true);
41
+ });
42
+ // Limit requests to a rate of one per second max
43
+ irc.on("ctcp request", lodash_1.default.throttle((data) => {
44
+ // Ignore echoed ctcp requests that aren't targeted at us
45
+ // See https://github.com/kiwiirc/irc-framework/issues/225
46
+ if (data.nick === irc.user.nick &&
47
+ data.nick !== data.target &&
48
+ network.irc.network.cap.isEnabled("echo-message")) {
49
+ return;
50
+ }
51
+ const shouldIgnore = network.ignoreList.some(function (entry) {
52
+ return helper_1.default.compareHostmask(entry, data);
53
+ });
54
+ if (shouldIgnore) {
55
+ return;
56
+ }
57
+ const target = data.from_server ? data.hostname : data.nick;
58
+ const response = ctcpResponses[data.type];
59
+ if (response) {
60
+ irc.ctcpResponse(target, data.type, response(data));
61
+ }
62
+ // Let user know someone is making a CTCP request against their nick
63
+ const msg = new msg_1.default({
64
+ type: msg_2.MessageType.CTCP_REQUEST,
65
+ time: data.time,
66
+ from: new user_1.default({ nick: target }),
67
+ hostmask: data.ident + "@" + data.hostname,
68
+ ctcpMessage: data.message,
69
+ });
70
+ lobby.pushMessage(client, msg, true);
71
+ }, 1000, { trailing: false }));
72
+ });
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const config_1 = __importDefault(require("../../config"));
8
+ const msg_2 = require("../../../shared/types/msg");
9
+ exports.default = (function (irc, network) {
10
+ const client = this;
11
+ irc.on("irc error", function (data) {
12
+ const msg = new msg_1.default({
13
+ type: msg_2.MessageType.ERROR,
14
+ error: data.error,
15
+ showInActive: true,
16
+ nick: data.nick,
17
+ channel: data.channel,
18
+ reason: data.reason,
19
+ command: data.command,
20
+ });
21
+ let target = network.getLobby();
22
+ // If this error is channel specific and a channel
23
+ // with this name exists, put this error in that channel
24
+ if (data.channel) {
25
+ const channel = network.getChannel(data.channel);
26
+ if (typeof channel !== "undefined") {
27
+ target = channel;
28
+ msg.showInActive = false;
29
+ }
30
+ }
31
+ target.pushMessage(client, msg, true);
32
+ });
33
+ irc.on("nick in use", function (data) {
34
+ let message = data.nick + ": " + (data.reason || "Nickname is already in use.");
35
+ if (irc.connection.registered === false && !config_1.default.values.public) {
36
+ message += " An attempt to use it will be made when this nick quits.";
37
+ // Clients usually get nick in use on connect when reconnecting to a network
38
+ // after a network failure (like ping timeout), and as a result of that,
39
+ // TL will append a random number to the nick.
40
+ // keepNick will try to set the original nick name back if it sees a QUIT for that nick.
41
+ network.keepNick = irc.user.nick;
42
+ }
43
+ const lobby = network.getLobby();
44
+ const msg = new msg_1.default({
45
+ type: msg_2.MessageType.ERROR,
46
+ text: message,
47
+ showInActive: true,
48
+ });
49
+ lobby.pushMessage(client, msg, true);
50
+ if (irc.connection.registered === false) {
51
+ const nickLen = parseInt(network.irc.network.options.NICKLEN, 10) || 16;
52
+ const random = (data.nick || irc.user.nick) + Math.floor(Math.random() * 10);
53
+ // Safeguard nick changes up to allowed length
54
+ // Some servers may send "nick in use" error even for randomly generated nicks
55
+ if (random.length <= nickLen) {
56
+ irc.changeNick(random);
57
+ }
58
+ }
59
+ client.emit("nick", {
60
+ network: network.uuid,
61
+ nick: irc.user.nick,
62
+ });
63
+ });
64
+ irc.on("nick invalid", function (data) {
65
+ const lobby = network.getLobby();
66
+ const msg = new msg_1.default({
67
+ type: msg_2.MessageType.ERROR,
68
+ text: data.nick + ": " + (data.reason || "Nickname is invalid."),
69
+ showInActive: true,
70
+ });
71
+ lobby.pushMessage(client, msg, true);
72
+ if (irc.connection.registered === false) {
73
+ irc.changeNick(config_1.default.getDefaultNick());
74
+ }
75
+ client.emit("nick", {
76
+ network: network.uuid,
77
+ nick: irc.user.nick,
78
+ });
79
+ });
80
+ });
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const msg_2 = require("../../../shared/types/msg");
8
+ exports.default = (function (irc, network) {
9
+ const client = this;
10
+ irc.on("help", function (data) {
11
+ const lobby = network.getLobby();
12
+ if (data.help) {
13
+ const msg = new msg_1.default({
14
+ type: msg_2.MessageType.MONOSPACE_BLOCK,
15
+ command: "help",
16
+ text: data.help,
17
+ });
18
+ lobby.pushMessage(client, msg, true);
19
+ }
20
+ });
21
+ });
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const msg_2 = require("../../../shared/types/msg");
8
+ exports.default = (function (irc, network) {
9
+ const client = this;
10
+ irc.on("info", function (data) {
11
+ const lobby = network.getLobby();
12
+ if (data.info) {
13
+ const msg = new msg_1.default({
14
+ type: msg_2.MessageType.MONOSPACE_BLOCK,
15
+ command: "info",
16
+ text: data.info,
17
+ });
18
+ lobby.pushMessage(client, msg, true);
19
+ }
20
+ });
21
+ });
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const msg_2 = require("../../../shared/types/msg");
8
+ exports.default = (function (irc, network) {
9
+ const client = this;
10
+ irc.on("invite", function (data) {
11
+ let chan = network.getChannel(data.channel);
12
+ if (typeof chan === "undefined") {
13
+ chan = network.getLobby();
14
+ }
15
+ const invitedYou = data.invited === irc.user.nick;
16
+ const msg = new msg_1.default({
17
+ type: msg_2.MessageType.INVITE,
18
+ time: data.time,
19
+ from: chan.getUser(data.nick),
20
+ target: chan.getUser(data.invited),
21
+ channel: data.channel,
22
+ highlight: invitedYou,
23
+ invitedYou: invitedYou,
24
+ });
25
+ chan.pushMessage(client, msg);
26
+ });
27
+ });
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const user_1 = __importDefault(require("../../models/user"));
8
+ const msg_2 = require("../../../shared/types/msg");
9
+ const chan_1 = require("../../../shared/types/chan");
10
+ exports.default = (function (irc, network) {
11
+ const client = this;
12
+ irc.on("join", function (data) {
13
+ let chan = network.getChannel(data.channel);
14
+ if (typeof chan === "undefined") {
15
+ chan = client.createChannel({
16
+ name: data.channel,
17
+ state: chan_1.ChanState.JOINED,
18
+ });
19
+ client.emit("join", {
20
+ network: network.uuid,
21
+ chan: chan.getFilteredClone(true),
22
+ shouldOpen: false,
23
+ index: network.addChannel(chan),
24
+ });
25
+ client.save();
26
+ chan.loadMessages(client, network);
27
+ // Request channels' modes
28
+ network.irc.raw("MODE", chan.name);
29
+ }
30
+ else if (data.nick === irc.user.nick) {
31
+ chan.state = chan_1.ChanState.JOINED;
32
+ client.emit("channel:state", {
33
+ chan: chan.id,
34
+ state: chan.state,
35
+ });
36
+ }
37
+ const user = new user_1.default({ nick: data.nick });
38
+ const msg = new msg_1.default({
39
+ time: data.time,
40
+ from: user,
41
+ hostmask: data.ident + "@" + data.hostname,
42
+ gecos: data.gecos,
43
+ account: data.account,
44
+ type: msg_2.MessageType.JOIN,
45
+ self: data.nick === irc.user.nick,
46
+ });
47
+ chan.pushMessage(client, msg);
48
+ chan.setUser(new user_1.default({ nick: data.nick }));
49
+ client.emit("users", {
50
+ chan: chan.id,
51
+ });
52
+ });
53
+ });
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const msg_1 = __importDefault(require("../../models/msg"));
7
+ const msg_2 = require("../../../shared/types/msg");
8
+ const chan_1 = require("../../../shared/types/chan");
9
+ exports.default = (function (irc, network) {
10
+ const client = this;
11
+ irc.on("kick", function (data) {
12
+ const chan = network.getChannel(data.channel);
13
+ if (typeof chan === "undefined") {
14
+ return;
15
+ }
16
+ const user = chan.getUser(data.kicked);
17
+ const msg = new msg_1.default({
18
+ type: msg_2.MessageType.KICK,
19
+ time: data.time,
20
+ from: chan.getUser(data.nick),
21
+ target: user,
22
+ text: data.message || "",
23
+ highlight: data.kicked === irc.user.nick,
24
+ self: data.nick === irc.user.nick,
25
+ });
26
+ chan.pushMessage(client, msg);
27
+ if (data.kicked === irc.user.nick) {
28
+ chan.users = new Map();
29
+ chan.state = chan_1.ChanState.PARTED;
30
+ client.emit("channel:state", {
31
+ chan: chan.id,
32
+ state: chan.state,
33
+ });
34
+ }
35
+ else {
36
+ chan.removeUser(user);
37
+ }
38
+ });
39
+ });