Use Peer.Username method

master
HimbeerserverDE 2021-01-30 12:24:37 +01:00
parent 97738655f1
commit e8de7b1cc9
10 changed files with 39 additions and 39 deletions

View File

@ -23,7 +23,7 @@ func processAoRmAdd(p *Peer, data []byte) []byte {
namelen := binary.BigEndian.Uint16(data[8+si : 10+si])
name := data[10+si : 10+si+uint32(namelen)]
if string(name) == string(p.username) {
if string(name) == p.Username() {
if p.initAoReceived {
binary.BigEndian.PutUint16(data[4+countRm*2:6+countRm*2], countAdd-1)
data = append(data[:si], data[7+si+initDataLen:]...)

View File

@ -173,7 +173,7 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
return true
}
err = modAuthItem(db, string(src.username), pwd)
err = modAuthItem(db, src.Username(), pwd)
if err != nil {
log.Print(err)
return true
@ -181,7 +181,7 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
db.Close()
} else {
log.Print("User " + string(src.username) + " at " + src.Addr().String() + " did not enter sudo mode before attempting to change the password")
log.Print("User " + src.Username() + " at " + src.Addr().String() + " did not enter sudo mode before attempting to change the password")
}
return true
case ToServerSrpBytesA:
@ -195,7 +195,7 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
return true
}
pwd, err := readAuthItem(db, string(src.username))
pwd, err := readAuthItem(db, src.Username())
if err != nil {
log.Print(err)
return true
@ -242,7 +242,7 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
lenM := binary.BigEndian.Uint16(pkt.Data[2:4])
M := pkt.Data[4 : 4+lenM]
M2 := srp.CalculateM(src.username, src.srp_s, src.srp_A, src.srp_B, src.srp_K)
M2 := srp.CalculateM([]byte(src.Username()), src.srp_s, src.srp_A, src.srp_B, src.srp_K)
if subtle.ConstantTimeCompare(M, M2) == 1 {
// Password is correct
@ -260,7 +260,7 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
<-ack
} else {
// Client supplied wrong password
log.Print("User " + string(src.username) + " at " + src.Addr().String() + " supplied wrong password for sudo mode")
log.Print("User " + src.Username() + " at " + src.Addr().String() + " supplied wrong password for sudo mode")
// Send DENY_SUDO_MODE
data := []byte{0, ToClientDenySudoMode}

40
init.go
View File

@ -23,15 +23,15 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
if p2.IsSrv() {
// We're trying to connect to a server
// INIT
data := make([]byte, 11+len(p.username))
data := make([]byte, 11+len(p.Username()))
data[0] = uint8(0x00)
data[1] = uint8(ToServerInit)
data[2] = uint8(0x1c)
binary.BigEndian.PutUint16(data[3:5], uint16(0x0000))
binary.BigEndian.PutUint16(data[5:7], uint16(0x0025))
binary.BigEndian.PutUint16(data[7:9], uint16(0x0027))
binary.BigEndian.PutUint16(data[9:11], uint16(len(p.username)))
copy(data[11:], p.username)
binary.BigEndian.PutUint16(data[9:11], uint16(len(p.Username())))
copy(data[11:], []byte(p.Username()))
time.Sleep(250 * time.Millisecond)
@ -68,7 +68,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
case ToClientHello:
if pkt.Data[10]&AuthMechSRP > 0 {
// Compute and send SRP_BYTES_A
_, _, err := srp.NewClient([]byte(strings.ToLower(string(p.username))), passPhrase)
_, _, err := srp.NewClient([]byte(strings.ToLower(p.Username())), passPhrase)
if err != nil {
log.Print(err)
continue
@ -98,7 +98,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
<-ack
} else {
// Compute and send s and v
s, v, err := srp.NewClient([]byte(strings.ToLower(string(p.username))), passPhrase)
s, v, err := srp.NewClient([]byte(strings.ToLower(p.Username())), passPhrase)
if err != nil {
log.Print(err)
continue
@ -126,7 +126,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
s := pkt.Data[4 : lenS+4]
B := pkt.Data[lenS+6:]
K, err := srp.CompleteHandshake(p.srp_A, p.srp_a, []byte(strings.ToLower(string(p.username))), passPhrase, s, B)
K, err := srp.CompleteHandshake(p.srp_A, p.srp_a, []byte(strings.ToLower(p.Username())), passPhrase, s, B)
if err != nil {
log.Print(err)
continue
@ -134,7 +134,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
p.srp_K = K
M := srp.CalculateM(p.username, s, p.srp_A, B, p.srp_K)
M := srp.CalculateM([]byte(p.Username()), s, p.srp_A, B, p.srp_K)
data := make([]byte, 4+len(M))
data[0] = uint8(0x00)
@ -234,10 +234,10 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
switch cmd := binary.BigEndian.Uint16(pkt.Data[0:2]); cmd {
case ToServerInit:
// Process data
p2.username = pkt.Data[11:]
p2.username = string(pkt.Data[11:])
// Send HELLO
data := make([]byte, 13+len(p2.username))
data := make([]byte, 13+len(p2.Username()))
data[0] = uint8(0x00)
data[1] = uint8(ToClientHello)
data[2] = uint8(0x1c)
@ -245,7 +245,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
binary.BigEndian.PutUint16(data[5:7], uint16(0x0027))
// Check if user is already connected
if IsOnline(string(p2.username)) {
if IsOnline(p2.Username()) {
data := []byte{
0, ToClientAccessDenied,
AccessDeniedAlreadyConnected, 0, 0, 0, 0,
@ -265,7 +265,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
}
// Check if username is reserved for media or RPC
if string(p2.username) == "media" || string(p2.username) == "rpc" {
if p2.Username() == "media" || p2.Username() == "rpc" {
data := []byte{
0, ToClientAccessDenied,
AccessDeniedWrongName, 0, 0, 0, 0,
@ -290,7 +290,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
continue
}
pwd, err := readAuthItem(db, string(p2.username))
pwd, err := readAuthItem(db, p2.Username())
if err != nil {
log.Print(err)
continue
@ -308,8 +308,8 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
binary.BigEndian.PutUint32(data[7:11], uint32(AuthMechSRP))
}
binary.BigEndian.PutUint16(data[11:13], uint16(len(p2.username)))
copy(data[13:], p2.username)
binary.BigEndian.PutUint16(data[11:13], uint16(len(p2.Username())))
copy(data[13:], []byte(p2.Username()))
ack, err := p2.Send(rudp.Pkt{Data: data})
if err != nil {
@ -357,13 +357,13 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
continue
}
err = addAuthItem(db, string(p2.username), pwd)
err = addAuthItem(db, p2.Username(), pwd)
if err != nil {
log.Print(err)
continue
}
err = addPrivItem(db, string(p2.username))
err = addPrivItem(db, p2.Username())
if err != nil {
log.Print(err)
continue
@ -426,7 +426,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
continue
}
pwd, err := readAuthItem(db, string(p2.username))
pwd, err := readAuthItem(db, p2.Username())
if err != nil {
log.Print(err)
continue
@ -494,7 +494,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
lenM := binary.BigEndian.Uint16(pkt.Data[2:4])
M := pkt.Data[4 : 4+lenM]
M2 := srp.CalculateM(p2.username, p2.srp_s, p2.srp_A, p2.srp_B, p2.srp_K)
M2 := srp.CalculateM([]byte(p2.Username()), p2.srp_s, p2.srp_A, p2.srp_B, p2.srp_K)
if subtle.ConstantTimeCompare(M, M2) == 1 {
// Password is correct
@ -522,7 +522,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
<-ack
} else {
// Client supplied wrong password
log.Print("User " + string(p2.username) + " at " + p2.Addr().String() + " supplied wrong password")
log.Print("User " + p2.Username() + " at " + p2.Addr().String() + " supplied wrong password")
// Send ACCESS_DENIED
data := []byte{
@ -548,7 +548,7 @@ func Init(p, p2 *Peer, ignMedia, noAccessDenied bool, fin chan *Peer) {
p2.sendMedia(pkt.Data[2:])
case ToServerClientReady:
if forceDefaultServer, ok := GetConfKey("force_default_server").(bool); !forceDefaultServer || !ok {
srvname, err := GetStorageKey("server:" + string(p2.username))
srvname, err := GetStorageKey("server:" + p2.Username())
if err != nil {
srvname, ok = GetConfKey("servers:" + GetConfKey("default_server").(string) + ":address").(string)
if !ok {

View File

@ -80,7 +80,7 @@ func (l *Listener) GetPeerByUsername(name string) *Peer {
defer l.mu.RUnlock()
for peer := range l.peers {
if string(peer.username) == name {
if peer.Username() == name {
return peer
}
}

View File

@ -397,7 +397,7 @@ func loadMedia() {
loadMediaCache()
clt := &Peer{username: []byte("media")}
clt := &Peer{username: "media"}
servers := GetConfKey("servers").(map[interface{}]interface{})
for server := range servers {

View File

@ -18,7 +18,7 @@ var connectedPeersMu sync.RWMutex
type Peer struct {
*rudp.Peer
username []byte
username string
srp_s []byte
srp_A []byte
srp_a []byte
@ -43,7 +43,7 @@ type Peer struct {
// Username returns the username of the Peer
// if it isn't a server
func (p *Peer) Username() string { return string(p.username) }
func (p *Peer) Username() string { return p.username }
// Forward reports whether the Proxy func should continue or stop
func (p *Peer) Forward() bool {

View File

@ -26,11 +26,11 @@ func processJoin(p *Peer) {
rpcSrvMu.Lock()
for srv := range rpcSrvs {
srv.doRpc("->JOIN "+string(p.username), "--")
srv.doRpc("->JOIN "+p.Username(), "--")
}
rpcSrvMu.Unlock()
onlinePlayers[string(p.username)] = true
onlinePlayers[p.Username()] = true
for i := range onJoinPlayer {
onJoinPlayer[i](p)
}
@ -42,11 +42,11 @@ func processLeave(p *Peer) {
rpcSrvMu.Lock()
for srv := range rpcSrvs {
srv.doRpc("->LEAVE "+string(p.username), "--")
srv.doRpc("->LEAVE "+p.Username(), "--")
}
rpcSrvMu.Unlock()
onlinePlayers[string(p.username)] = false
onlinePlayers[p.Username()] = false
for i := range onLeavePlayer {
onLeavePlayer[i](p)
}

View File

@ -123,7 +123,7 @@ func (p *Peer) GetPrivs() (map[string]bool, error) {
}
defer db.Close()
eprivs, err := readPrivItem(db, string(p.username))
eprivs, err := readPrivItem(db, p.Username())
if err != nil {
return nil, err
}
@ -139,7 +139,7 @@ func (p *Peer) SetPrivs(privs map[string]bool) error {
}
defer db.Close()
err = modPrivItem(db, string(p.username), encodePrivs(privs))
err = modPrivItem(db, p.Username(), encodePrivs(privs))
if err != nil {
return err
}

View File

@ -30,7 +30,7 @@ func processRedirectDone(p *Peer, newsrv string) {
rpcSrvMu.Lock()
for srv := range rpcSrvs {
srv.doRpc("->REDIRECTED "+string(p.username)+" "+newsrv+" "+successstr, "--")
srv.doRpc("->REDIRECTED "+p.Username()+" "+newsrv+" "+successstr, "--")
}
rpcSrvMu.Unlock()

4
rpc.go
View File

@ -149,7 +149,7 @@ func (p *Peer) doRpc(rpc, rq string) {
func connectRpc() {
servers := GetConfKey("servers").(map[interface{}]interface{})
for server := range servers {
clt := &Peer{username: []byte("rpc")}
clt := &Peer{username: "rpc"}
straddr := GetConfKey("servers:" + server.(string) + ":address")
@ -230,7 +230,7 @@ func startRpc() {
case <-reconnect.C:
servers := GetConfKey("servers").(map[interface{}]interface{})
for server := range servers {
clt := &Peer{username: []byte("rpc")}
clt := &Peer{username: "rpc"}
straddr := GetConfKey("servers:" + server.(string) + ":address")