97 lines
2.7 KiB
Go
97 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/jackc/pgx/v4"
|
|
)
|
|
|
|
type MessageText struct {
|
|
t *string
|
|
}
|
|
|
|
type Message struct {
|
|
t int
|
|
time time.Time
|
|
userid int
|
|
buffername string
|
|
sender string
|
|
message string
|
|
}
|
|
|
|
func (mt MessageText) Scan(src interface{}) error {
|
|
switch v := src.(type) {
|
|
case string:
|
|
*mt.t = v
|
|
case []byte:
|
|
*mt.t = string(v)
|
|
case nil:
|
|
*mt.t = ""
|
|
default:
|
|
*mt.t = ""
|
|
}
|
|
return nil
|
|
}
|
|
|
|
|
|
func logsHandler (w http.ResponseWriter, r *http.Request){
|
|
rr := rq{w,r}
|
|
if isAuthed,user := testAuth(rr,users); isAuthed {
|
|
con,err := pgx.Connect(context.Background(), config.Database)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
defer con.Close(context.Background())
|
|
channel,err := url.PathUnescape( strings.Split(r.RequestURI,"/")[2] )
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
w.WriteHeader(503)
|
|
w.Write([]byte("Could not decode url"))
|
|
}
|
|
var uid int
|
|
err = con.QueryRow(context.Background(), "select userid from quasseluser where username=$1",user).Scan(&uid)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
if uid != 0 {
|
|
rows,err := con.Query(context.Background(), "select * from (select backlog.type, backlog.time, buffer.userid, buffer.buffername, sender.sender, backlog.message from backlog natural join sender natural join buffer where buffer.userid=$1 and type in (1, 4, 32, 128) and buffer.buffername=$2 order by backlog.time asc) as test;", uid,channel )
|
|
defer rows.Close()
|
|
if err != nil{
|
|
fmt.Println(err)
|
|
}
|
|
for rows.Next() {
|
|
var m Message
|
|
|
|
err = rows.Scan(&m.t,&m.time,&m.userid,&m.buffername,&m.sender,MessageText{&m.message})
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
sendernick := strings.Split(m.sender,"!")
|
|
|
|
|
|
time := m.time.String()
|
|
switch m.t {
|
|
case 1:
|
|
w.Write([]byte(time+" <"+sendernick[0]+"> "+m.message+"\n"))
|
|
case 4:
|
|
w.Write([]byte(time+" * "+sendernick[0]+" "+m.message+"\n"))
|
|
case 32:
|
|
w.Write([]byte(time+" "+sendernick[0]+" joined "+m.message+"\n"))
|
|
case 128:
|
|
w.Write([]byte(time+" "+sendernick[0]+" left: "+m.message+"\n"))
|
|
}
|
|
}
|
|
if rows.Err() != nil {
|
|
fmt.Println(rows.Err())
|
|
}
|
|
}
|
|
} else {
|
|
authFail(rr)
|
|
}
|
|
}
|