diff --git a/internal/db/queries.go b/internal/db/queries.go index 33a521e..9248014 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1146,25 +1146,6 @@ func (database *Database) GetAway( return msg, nil } -// GetAwayByNick returns the away message for a nick. -// Returns an empty string if the user is not away. -func (database *Database) GetAwayByNick( - ctx context.Context, - nick string, -) (string, error) { - var msg string - - err := database.conn.QueryRowContext(ctx, - "SELECT away_message FROM sessions WHERE nick = ?", - nick, - ).Scan(&msg) - if err != nil { - return "", fmt.Errorf("get away by nick: %w", err) - } - - return msg, nil -} - // SetTopicMeta sets the topic along with who set it and // when. func (database *Database) SetTopicMeta( diff --git a/internal/db/schema/001_initial.sql b/internal/db/schema/001_initial.sql index 68eb87c..4ea5e28 100644 --- a/internal/db/schema/001_initial.sql +++ b/internal/db/schema/001_initial.sql @@ -8,6 +8,7 @@ CREATE TABLE IF NOT EXISTS sessions ( nick TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL DEFAULT '', signing_key TEXT NOT NULL DEFAULT '', + away_message TEXT NOT NULL DEFAULT '', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, last_seen DATETIME DEFAULT CURRENT_TIMESTAMP ); @@ -30,6 +31,8 @@ CREATE TABLE IF NOT EXISTS channels ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, topic TEXT NOT NULL DEFAULT '', + topic_set_by TEXT NOT NULL DEFAULT '', + topic_set_at DATETIME, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); diff --git a/internal/db/schema/002_away_and_topic_meta.sql b/internal/db/schema/002_away_and_topic_meta.sql deleted file mode 100644 index cf92eb3..0000000 --- a/internal/db/schema/002_away_and_topic_meta.sql +++ /dev/null @@ -1,6 +0,0 @@ --- Add away message to sessions -ALTER TABLE sessions ADD COLUMN away_message TEXT NOT NULL DEFAULT ''; - --- Add topic metadata to channels -ALTER TABLE channels ADD COLUMN topic_set_by TEXT NOT NULL DEFAULT ''; -ALTER TABLE channels ADD COLUMN topic_set_at DATETIME; diff --git a/internal/handlers/api.go b/internal/handlers/api.go index a2abf3d..88f9cd7 100644 --- a/internal/handlers/api.go +++ b/internal/handlers/api.go @@ -71,11 +71,10 @@ func (hdlr *Handlers) requireAuth( sessionID, clientID, nick, err := hdlr.authSession(request) if err != nil { - hdlr.respondError( - writer, request, - "unauthorized", - http.StatusUnauthorized, - ) + hdlr.respondJSON(writer, request, map[string]any{ + "error": "not registered", + "numeric": irc.ErrNotRegistered, + }, http.StatusUnauthorized) return 0, 0, "", false } @@ -925,8 +924,8 @@ func (hdlr *Handlers) handlePrivmsg( if target == "" { hdlr.enqueueNumeric( request.Context(), clientID, - irc.ErrNeedMoreParams, nick, []string{command}, - "Not enough parameters", + irc.ErrNoRecipient, nick, []string{command}, + "No recipient given", ) hdlr.broker.Notify(sessionID) hdlr.respondJSON(writer, request, @@ -940,8 +939,8 @@ func (hdlr *Handlers) handlePrivmsg( if len(lines) == 0 { hdlr.enqueueNumeric( request.Context(), clientID, - irc.ErrNeedMoreParams, nick, []string{command}, - "Not enough parameters", + irc.ErrNoTextToSend, nick, []string{command}, + "No text to send", ) hdlr.broker.Notify(sessionID) hdlr.respondJSON(writer, request, @@ -1028,8 +1027,8 @@ func (hdlr *Handlers) handleChannelMsg( if !isMember { hdlr.respondIRCError( writer, request, clientID, sessionID, - irc.ErrNotOnChannel, nick, []string{target}, - "You're not on that channel", + irc.ErrCannotSendToChan, nick, []string{target}, + "Cannot send to channel", ) return diff --git a/internal/handlers/api_test.go b/internal/handlers/api_test.go index d8eb7c8..57cad28 100644 --- a/internal/handlers/api_test.go +++ b/internal/handlers/api_test.go @@ -810,9 +810,9 @@ func TestMessageMissingBody(t *testing.T) { msgs, _ := tserver.pollMessages(token, lastID) - if !findNumeric(msgs, "461") { + if !findNumeric(msgs, "412") { t.Fatalf( - "expected ERR_NEEDMOREPARAMS (461), got %v", + "expected ERR_NOTEXTTOSEND (412), got %v", msgs, ) } @@ -834,9 +834,9 @@ func TestMessageMissingTo(t *testing.T) { msgs, _ := tserver.pollMessages(token, lastID) - if !findNumeric(msgs, "461") { + if !findNumeric(msgs, "411") { t.Fatalf( - "expected ERR_NEEDMOREPARAMS (461), got %v", + "expected ERR_NORECIPIENT (411), got %v", msgs, ) } @@ -869,9 +869,9 @@ func TestNonMemberCannotSend(t *testing.T) { msgs, _ := tserver.pollMessages(aliceToken, lastID) - if !findNumeric(msgs, "442") { + if !findNumeric(msgs, "404") { t.Fatalf( - "expected ERR_NOTONCHANNEL (442), got %v", + "expected ERR_CANNOTSENDTOCHAN (404), got %v", msgs, ) }