mirror of
https://github.com/jech/galene.git
synced 2024-11-23 00:55:58 +01:00
Split handshake into login/join.
For now, join must follow login, but it will make it easier to extend the protocol for joining multiple groups (think federation).
This commit is contained in:
parent
6bde5f986a
commit
7b51296262
3 changed files with 37 additions and 4 deletions
3
group.go
3
group.go
|
@ -231,6 +231,9 @@ func addClient(name string, c client) (*group, error) {
|
||||||
|
|
||||||
func delClient(c client) {
|
func delClient(c client) {
|
||||||
g := c.Group()
|
g := c.Group()
|
||||||
|
if g == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
g.mu.Lock()
|
g.mu.Lock()
|
||||||
defer g.mu.Unlock()
|
defer g.mu.Unlock()
|
||||||
|
|
||||||
|
|
|
@ -612,12 +612,15 @@ function serverConnect() {
|
||||||
let up = getUserPass();
|
let up = getUserPass();
|
||||||
try {
|
try {
|
||||||
send({
|
send({
|
||||||
type: 'handshake',
|
type: 'login',
|
||||||
id: myid,
|
id: myid,
|
||||||
group: group,
|
|
||||||
username: up.username,
|
username: up.username,
|
||||||
password: up.password,
|
password: up.password,
|
||||||
})
|
})
|
||||||
|
send({
|
||||||
|
type: 'join',
|
||||||
|
group: group,
|
||||||
|
})
|
||||||
sendRequest(document.getElementById('requestselect').value);
|
sendRequest(document.getElementById('requestselect').value);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
31
webclient.go
31
webclient.go
|
@ -619,13 +619,31 @@ func startClient(conn *websocket.Conn) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Type != "handshake" {
|
if m.Type != "login" {
|
||||||
|
conn.WriteMessage(websocket.CloseMessage,
|
||||||
|
websocket.FormatCloseMessage(
|
||||||
|
websocket.CloseProtocolError,
|
||||||
|
"you must login first",
|
||||||
|
),
|
||||||
|
)
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.ContainsRune(m.Username, ' ') {
|
if strings.ContainsRune(m.Username, ' ') {
|
||||||
err = userError("don't put spaces in your username")
|
// at this point, the writer is not running yet, so format
|
||||||
|
// the message ourselves
|
||||||
|
conn.WriteJSON(clientMessage{
|
||||||
|
Type: "error",
|
||||||
|
Value: "don't put spaces in your username",
|
||||||
|
})
|
||||||
|
conn.WriteMessage(websocket.CloseMessage,
|
||||||
|
websocket.FormatCloseMessage(
|
||||||
|
websocket.CloseProtocolError,
|
||||||
|
"don't put spaces in your username",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,6 +683,15 @@ func startClient(conn *websocket.Conn) (err error) {
|
||||||
c.writerDone = make(chan struct{})
|
c.writerDone = make(chan struct{})
|
||||||
go clientWriter(conn, c.writeCh, c.writerDone)
|
go clientWriter(conn, c.writeCh, c.writerDone)
|
||||||
|
|
||||||
|
err = conn.ReadJSON(&m)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.Type != "join" {
|
||||||
|
return protocolError("you must join a group first")
|
||||||
|
}
|
||||||
|
|
||||||
g, err := addClient(m.Group, c)
|
g, err := addClient(m.Group, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue