summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-05-16 22:40:12 +0200
committerbt <bt@rctt.net>2026-05-16 22:46:48 +0200
commit4f6c84085795b32b07a42e47dff1a8b8956ecbb9 (patch)
treeba896ee49635843c51c08b6afb84a030b34a3c59
parent82902e9dc3ad67c49e4f9381b83d38a659efa083 (diff)
downloadsolec-4f6c84085795b32b07a42e47dff1a8b8956ecbb9.tar.gz
solec-4f6c84085795b32b07a42e47dff1a8b8956ecbb9.zip
Return channel history only if user is connected to it
-rw-r--r--core/data.go2
-rw-r--r--server/user.go18
-rw-r--r--storage/storage.go7
3 files changed, 21 insertions, 6 deletions
diff --git a/core/data.go b/core/data.go
index 4d18604..e3fd560 100644
--- a/core/data.go
+++ b/core/data.go
@@ -151,8 +151,6 @@ func Decode(buf io.Reader) (any, error) {
default:
return nil, fmt.Errorf("invalid payload type: %v", pType)
}
-
- return pType, nil
}
func decodeNumeric(buf io.Reader, ptr any) error {
diff --git a/server/user.go b/server/user.go
index 6b0e946..cc8c160 100644
--- a/server/user.go
+++ b/server/user.go
@@ -1,6 +1,7 @@
package server
import (
+ "fmt"
"log"
"net"
@@ -154,12 +155,25 @@ func (s *Server) handleUsermode(user *User, conn net.Conn, mode core.Usermode) e
return nil
}
+// TODO: Replace user.Send(error) with conn.Send()
+// TODO: Better errors
+
func (s *Server) handleHistory(user *User, conn net.Conn, hist core.History) error {
- // TODO: Add permissions check
+ addr, err := core.ReadAddr(hist.Channel)
+ if err != nil {
+ fmt.Println("cannot parse address:", err)
+ return user.Send(conn, core.Error{core.ErrorNotFound})
+ }
+
+ if _, ok := user.Channels[addr.Channel]; !ok {
+ fmt.Println("cannot get message history: not authorized")
+ return user.Send(conn, core.Error{core.ErrorNotFound})
+ }
messages, err := s.Storage.Read(hist.Channel, hist.Since, int(hist.Count), int(hist.Offset))
if err != nil {
- return err
+ fmt.Println("cannot get message history:", err)
+ return user.Send(conn, core.Error{core.ErrorNotFound})
}
for _, m := range messages {
diff --git a/storage/storage.go b/storage/storage.go
index 0103370..1dcea40 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -41,10 +41,13 @@ func (db *Database) Write(msg core.Message) (err error) {
func (db *Database) Read(channel string, since time.Time, num int, offset int) (history []core.Message, err error) {
rows, err := db.Query(
- "SELECT source, target, timestamp, content FROM messages WHERE timestamp > ? LIMIT ? OFFSET ?",
- since.Unix(), num, offset,
+ `SELECT source, target, timestamp, content FROM messages WHERE target = ? AND timestamp > ? LIMIT ? OFFSET ?`,
+ channel, since.Unix(), num, offset,
)
defer func() {
+ if rows == nil {
+ return
+ }
if err := rows.Close(); err != nil {
log.Println("cannot close database row:", err)
}