84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
"github.com/khlieng/dispatch/storage"
|
|
)
|
|
|
|
type connectDefaults struct {
|
|
Name string `json:"name"`
|
|
Address string `json:"address"`
|
|
Channels []string `json:"channels"`
|
|
Password bool `json:"password"`
|
|
SSL bool `json:"ssl"`
|
|
}
|
|
|
|
type indexData struct {
|
|
Defaults connectDefaults `json:"defaults"`
|
|
Servers []storage.Server `json:"servers,omitempty"`
|
|
Channels []storage.Channel `json:"channels,omitempty"`
|
|
|
|
// Users in the selected channel
|
|
Users *Userlist `json:"users,omitempty"`
|
|
|
|
// Last messages in the selected channel
|
|
Messages *Messages `json:"messages,omitempty"`
|
|
}
|
|
|
|
func getIndexData(r *http.Request, session *Session) *indexData {
|
|
servers := session.user.GetServers()
|
|
connections := session.getConnectionStates()
|
|
for i, server := range servers {
|
|
servers[i].Connected = connections[server.Host]
|
|
servers[i].Port = ""
|
|
servers[i].TLS = false
|
|
servers[i].Password = ""
|
|
servers[i].Username = ""
|
|
servers[i].Realname = ""
|
|
}
|
|
|
|
channels := session.user.GetChannels()
|
|
for i, channel := range channels {
|
|
channels[i].Topic = channelStore.GetTopic(channel.Server, channel.Name)
|
|
}
|
|
|
|
data := indexData{
|
|
Defaults: connectDefaults{
|
|
Name: viper.GetString("defaults.name"),
|
|
Address: viper.GetString("defaults.address"),
|
|
Channels: viper.GetStringSlice("defaults.channels"),
|
|
Password: viper.GetString("defaults.password") != "",
|
|
SSL: viper.GetBool("defaults.ssl"),
|
|
},
|
|
Servers: servers,
|
|
Channels: channels,
|
|
}
|
|
|
|
params := strings.Split(strings.Trim(r.URL.Path, "/"), "/")
|
|
if len(params) == 2 && isChannel(params[1]) {
|
|
users := channelStore.GetUsers(params[0], params[1])
|
|
if len(users) > 0 {
|
|
data.Users = &Userlist{
|
|
Server: params[0],
|
|
Channel: params[1],
|
|
Users: users,
|
|
}
|
|
}
|
|
|
|
messages, err := session.user.GetLastMessages(params[0], params[1], 25)
|
|
if err == nil && len(messages) > 0 {
|
|
data.Messages = &Messages{
|
|
Server: params[0],
|
|
To: params[1],
|
|
Messages: messages,
|
|
}
|
|
}
|
|
}
|
|
|
|
return &data
|
|
}
|