Commit Graph
100 Commits
Author SHA1 Message Date
Simon Ser fc8aa30756 lib/client: add generic error handling to roundtrip() 2021-12-04 17:22:36 +01:00
Simon Ser 8c8bd43638 lib/client: introduce IRCError 2021-12-04 17:05:34 +01:00
Simon Ser 30e3ec392f Update channel join status when kicked 2021-12-04 16:52:38 +01:00
Simon Ser ada9ff3b71 components/buffer-header: fix missing "join" button for parted channel 2021-12-03 19:09:52 +01:00
Simon Ser 93ba0e6443 Disable debug logs in production
console.debug logs cause some performance issues because the browser
is forced to save the logged objects just in case the user opens the
debugging tools.

They can be force-enabled back by adding ?debug=1 to the URL.

Only console.debug is disabled, console.log and other levels are a lot
less verbose and still enabled by default.
2021-12-01 11:40:59 +01:00
Simon Ser 07c9cdebb6 Add usage message to development server 2021-12-01 10:44:03 +01:00
Simon Ser aef2812348 Add custom developement server
This implements a tiny WebSocket proxy useful for development
purposes.
2021-12-01 10:34:41 +01:00
Simon Ser a1ff1be342 Mark auth dialog as loading 2021-11-30 16:05:08 +01:00
Simon Ser 47f56f06b9 Mark register/verify dialogs as loading 2021-11-30 15:49:52 +01:00
Simon Ser 1e84412172 Show "Manage network" even if upstream is disconnected
Fixes: 86853eb2e5 ("components/buffer-header: hide action buttons when disconnected")
2021-11-30 15:29:24 +01:00
Simon Ser 451bb4c73f Add link to verify account next to VERIFICATION_REQUIRED message 2021-11-30 15:13:34 +01:00
Simon Ser be08302c1f Add support for draft/account-registration
A new UI to register and verify accounts is added.
2021-11-30 14:59:44 +01:00
Simon Ser c4a78283af Linkify error messages
Sometimes servers will put links and channels in their error
messages. Make it easy for users to click them.
2021-11-29 13:38:07 +01:00
Simon Ser 25e69a551e Clear channel joined field when disconnected 2021-11-29 11:44:45 +01:00
Simon Ser 86853eb2e5 components/buffer-header: hide action buttons when disconnected 2021-11-29 11:44:28 +01:00
Simon Ser 1800b6bea1 components/member-list: re-render on State.users update 2021-11-28 20:13:08 +01:00
Simon Ser fcce340846 Dim away users in member list
References: https://todo.sr.ht/~emersion/gamja/13
2021-11-28 20:09:48 +01:00
Simon Ser e29ccf7220 Add embedded Content-Security-Policy
Add a baseline CSP applicable to all gamja deployments. Resources
can only be loaded from the current host, frames and objects are
disallowed, and scripts are allowed to connect to any host (to allow
cross-site WebSocket connections).

If the server returns a different CSP via an HTTP header, the
effective CSP will be the intersection.
2021-11-27 12:35:02 +01:00
Simon Ser d8d2cbe0f7 readme: add nginx file server directive 2021-11-27 12:26:25 +01:00
Simon Ser 0d2067e33e components/connect-form: replace auto-join text field with checkbox
The intent of the auto-join field is to ask the user whether they
really want to join the pre-filled channel. Users rarely want to
customize this field, they can just manually click "Join" after
connecting if they want to join another channel.
2021-11-27 12:08:23 +01:00
Simon Ser 3e309e9dfe Ignore RPL_AWAY 2021-11-23 17:58:49 +01:00
Simon Ser 3e2ac307f6 Add post-connect UI to login via SASL
If the server supports SASL and if we aren't logged in with any
account, add a UI to authenticate via SASL. This allows users to
login anonymously then login via SASL.

This will also ease the draft/account-registration implementation.
2021-11-21 16:40:46 +01:00
Simon Ser 24b50a332c lib/client: make authenticate() return a promise
This lets the caller handle the success/failure.
2021-11-21 16:06:13 +01:00
Simon Ser adefc620de lib/client: send BOUNCER BIND and CAP END immediately
Don't wait for auth to finish. This reduces the number of roundtrips.
2021-11-21 13:48:41 +01:00
Simon Ser bc3abbec32 lib/client: catch handleMessage errors 2021-11-21 13:48:07 +01:00
Simon Ser 4f927b5536 lib/client: always request sasl cap when available
This will allow us to issue post-registration SASL commands.
2021-11-21 13:35:32 +01:00
Simon Ser 86b08296a0 lib/client: don't disconnect on SASL error if registered
This will let users try multiple auth attempts when we'll implement
post-registration auth.
2021-11-21 13:23:14 +01:00
Simon Ser 25dd6aabf6 lib/client: remove one roundtrip during SASL auth
Instead of waiting for the server's empty challenge, send two
AUTHENTICATE commands in a row.
2021-11-21 13:21:42 +01:00
Simon Ser 0af40a1a8e state: add account to server 2021-11-21 12:13:44 +01:00
Simon Ser 51bf8da3d6 lib/client: don't error out if SASL isn't available on RPL_WELCOME
Some servers (soju) might remove the sasl cap on connection
registration.
2021-11-19 19:32:13 +01:00
Simon Ser c4c0a77162 Avoid inline script in index.html
This helps Parcel generate a proper standalone JS bundle.
2021-11-17 10:58:02 +01:00
Simon Ser 3f2553291f ci: fix deploy branch check again, exclude config.json 2021-11-17 10:45:18 +01:00
Simon Ser debd50f482 ci: fix deploy branch check 2021-11-17 10:33:16 +01:00
Simon Ser a57428002f ci: add deploy task 2021-11-17 10:31:09 +01:00
Simon Ser bbfeb5bcbc ci: add .build.yml 2021-11-17 10:20:49 +01:00
Simon Ser 0980983bdc readme: add link to IRC channel 2021-11-17 10:17:41 +01:00
Simon Ser e37c2a2cec Auto-dismiss client error on reconnect
References: https://todo.sr.ht/~emersion/gamja/74
2021-11-17 10:12:36 +01:00
Simon Ser 82e5a2795d Properly handle port in irc:// URLs 2021-11-16 11:52:38 +01:00
Simon Ser a0b250df3f Reword ProtocolHandlerNagger message 2021-11-16 11:30:33 +01:00
Simon Ser 321140327e Add UI to enable protocol handler 2021-11-16 11:19:25 +01:00
Simon Ser be475026c8 lib/irc: fix handling for prefixes without host
name!user is a valid prefix.
2021-11-15 16:05:51 +01:00
Simon Ser 55361c5a2b Store WHO list in RPL_ENDOFWHO
This allows the state-tracker to figure out whether a WHO query
returned no result.
2021-11-10 10:32:23 +01:00
Simon Ser c11bf6508a Only allow one WHO command at a time
Closes: https://todo.sr.ht/~emersion/gamja/120
2021-11-10 10:08:47 +01:00
Simon Ser 195e4ca371 Don't stop fetching backlog on error
Some servers allow fetching history from some targets but not
others. Don't completely stop fetching chat history on error.

The root cause was a variable shadowing in Client.fetchBatch.
2021-11-10 09:53:17 +01:00
Simon Ser 1206cfae37 Add support for draft/extended-monitor
References: https://github.com/ircv3/ircv3-specifications/pull/466
2021-11-09 12:50:11 +01:00
Simon Ser df29650b98 Always insert non-chathistory messages at the end 2021-11-09 10:49:18 +01:00
Simon Ser 94901f1662 Request WHO info w/ empty message list in switchBuffer 2021-11-08 15:03:05 +01:00
Simon Ser 9475ffb8c6 Don't auto-join without prompting user 2021-11-08 13:01:54 +01:00
Simon Ser f3c48a3748 Add "open" URL param
This can be set to an irc:// URL to open. This is useful for
bouncers.
2021-11-08 12:33:02 +01:00
Simon Ser 14031c594b Ask confirmation before JOIN on irc:// link click 2021-11-08 10:44:10 +01:00
Simon Ser 74fe6ee944 Auto-join when adding new network on irc:// link click
Closes: https://todo.sr.ht/~emersion/gamja/111
2021-11-07 19:47:49 +01:00
Simon Ser a58befd6d7 s/var/let/ 2021-11-07 13:51:39 +01:00
Simon Ser 38a3075a2c Disconnect previous server on connect re-submit 2021-11-07 13:50:26 +01:00
Simon Ser 96dd8476ad De-duplicate nicks in folded JOIN/PART/QUIT lines 2021-11-05 15:00:08 +01:00
Simon Ser 800f5ceb6a Keep track of channel join status
This makes us behave better when we receive a self-PART message
from the server.
2021-11-05 11:49:56 +01:00
Simon Ser 7b19cf48a4 Add Parcel to dev dependencies
Closes: https://todo.sr.ht/~emersion/gamja/119
2021-11-04 12:21:21 +01:00
Simon Ser 50f10a43dd components/buffer: show MODE target if different from buffer name
This happens for user modes, for instance.
2021-11-03 21:58:26 +01:00
Simon Ser eb66045371 lib/client: use Client.isMyNick to handle self-NICK messages
This handles case-mapping.
2021-11-03 21:50:33 +01:00
Simon Ser a1ab87c71c Route self-NICK messages to server buffer 2021-11-03 21:49:53 +01:00
Simon Ser 8ebb61cb0e Route user MODE messages to server buffer 2021-11-03 21:44:24 +01:00
Simon Ser 8f90613951 components/buffer-header: add help text for user details
This makes it easier for users new to IRC to figure out what these
things mean. Additionally, it's not possible for a malicious user
to spoof the <abbr> style.
2021-11-03 17:23:32 +01:00
Simon Ser 0888af4a6f Request more messages for event-playback infinite scrolling
When the server supports draft/event-playback, some messages (like
join/part/etc) may be collapsed together. Request more messages to
avoid ending up with a half-filled page.
2021-11-03 16:31:12 +01:00
Simon Ser 08cd94d775 lib/irc: add "fullname" to isMeaningfulRealname 2021-11-02 18:12:18 +01:00
Simon Ser eec4126562 components/buffer-header: mark unauthenticated users as such 2021-11-02 18:04:53 +01:00
Simon Ser 6acf6d544a components/buffer-header: skip account name if it matches nick 2021-11-02 18:01:07 +01:00
Simon Ser ac7785aa7f lib/client: fix missing account in WHOX 2021-11-02 17:58:00 +01:00
Simon Ser 85e73d0ee8 Add RPL_WELCOME to server buffer 2021-11-02 15:27:24 +01:00
Simon Ser 483f0c65b1 Add hint in server operators buffer header 2021-11-01 18:45:16 +01:00
Simon Ser 33c3cf3278 Remove unnecessary irc.formatDate call 2021-10-29 16:34:50 +02:00
Simon Ser 40210f8b00 Upgrade http-server 2021-10-29 16:25:58 +02:00
Simon Ser a1057092e0 state: move in QUIT and NICK update logic 2021-10-23 23:24:11 +02:00
Simon Ser bf471abb1b Add App.routeMessage
This splits handleMessage into two functions: one decides in which
buffers the message should be appended to, the other performs
message side-effects like auto-join.
2021-10-23 23:01:32 +02:00
Simon Ser c4a1f38b33 state: process RPL_NAMREPLY atomically
This allows updating the buf.members map only once when receiving
RPL_ENDOFNAMES, instead of repeatedly re-creating it each time a
RPL_NAMREPLY message is received.
2021-10-23 20:05:07 +02:00
Simon Ser 92043ded2c lib/client: generalize pendingWHOIS, store list in ENDOF* messages
This allows processing a list of replies atomically and receiving
the ENDOF* marker.
2021-10-23 20:03:57 +02:00
Simon Ser b059e034e2 lib/client: rename whoisDB to pendingWHOIS, garbage collect 2021-10-23 19:48:04 +02:00
Simon Ser 49a59077b7 lib/irc: extend parseURL to support flags and skip auth + options 2021-10-20 14:33:16 +02:00
Simon Ser a313363ed7 gitignore: add Parcel files 2021-10-20 10:55:49 +02:00
Simon Ser ab2f8092a8 Add minimal Parcel integration
Closes: https://todo.sr.ht/~emersion/gamja/107
2021-10-19 00:50:02 +02:00
Simon Ser 4309cf44d3 Avoid using export * as namespace
This isn't supported by Safari.
2021-10-18 23:59:18 +02:00
Simon Ser 2d032259db Pretty-print RPL_LOGGEDIN and RPL_LOGGEDOUT 2021-10-18 22:11:14 +02:00
Simon Ser 3d09c43a91 Don't add RPL_YOURHOST to server buffer 2021-10-18 22:08:21 +02:00
Simon Ser e7054eab13 Don't add RPL_SASLSUCCESS to server buffer 2021-10-18 22:05:25 +02:00
Simon Ser d9f36c82ba Allow bouncers to set NETWORK in ISUPPORT
This allows bouncers to customize the name they appear with.
2021-10-18 19:51:30 +02:00
Simon Ser 12440691c9 Unescape ISUPPORT values
This allows ISUPPORT values to contain spaces.

References: https://github.com/ircdocs/modern-irc/pull/137
2021-10-18 13:29:11 +02:00
Simon Ser 34aea84dde Close buffer tabs on middle click 2021-10-17 19:33:02 +02:00
Simon Ser a31976586c Fallback to bouncer network host if name is unset 2021-10-15 18:23:56 +02:00
Simon Ser 8bdde589bb lib/irc: "unknown" is not a meaningful realname 2021-10-15 17:44:33 +02:00
Simon Ser bfef13824e Use ISUPPORT NETWORK if user hasn't specified custom name 2021-10-15 14:05:39 +02:00
Simon Ser 1a8d539c9e Use linkifyjs module 2021-10-14 20:55:55 +02:00
Simon Ser a120d79585 Handle IRC URLs without channel name 2021-10-13 16:47:01 +02:00
Simon Ser 3562478946 Open dialog to create new network on IRC URL click
If we're running under a bouncer and the user clicks a link with
a server we aren't connected to yet, open the dialog to add a new
network.

References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:40:34 +02:00
Simon Ser 405bc51c26 Handle click on irc:// channel URLs inside buffers
References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:18:59 +02:00
Simon Ser 631f119061 Switch from anchorme to linkifyjs 2021-10-13 15:33:41 +02:00
Simon Ser a7d3a3940a readme: mention server.ping when server doesn't send PINGs
For instance, soju doesn't send PINGs.
2021-10-12 20:18:29 +02:00
Simon Ser 21a4a71542 Add support for SASL EXTERNAL
Can be useful when the server is using e.g. a cookie for
authentication purposes.
2021-10-12 17:29:56 +02:00
Simon Ser a890665775 Allow revealing server field with ?server 2021-10-09 13:33:01 +02:00
Simon Ser a920914b4c Add nick to config.json 2021-10-09 10:45:44 +02:00
Simon Ser 47b12cc5d9 Add autoconnect to config.json 2021-10-09 10:45:44 +02:00
Simon Ser 312a3f812e Don't allow overriding server URL if set in config.json
This has security implications.
2021-10-09 10:34:51 +02:00
Simon Ser e3e3315125 Inherit from default connectParams in handleConfig
When handleConfig is called, this.state.connectParams will be set
to its default value. Inherit from it so that autoconnect isn't
missing any. If we ever add a new connect parameter, we don't want
an old localStorage to break connect() because it's missing the
param.
2021-10-09 10:10:51 +02:00