func HandleLogin(lre *minegate.LoginRequestEvent) { if lre.Rejected() { return } res, err := lre.Upstream.GetExtra("bungeecord") if err != nil { //Assume false. return } bval := minegate.ToBool(res) if bval { // Enabled bungeecord support. lre.Infof("Patching for bungeecord.") uname := lre.LoginPacket.Name remoteip := lre.GetRemoteIP() buff := bytes.NewBuffer(make([]byte, 0, len(prefix)+len(uname)+4)) buff.WriteString(prefix) buff.WriteString(uname) // Data is the faked uuid, for offline only. // Online mode is not available, since online mode introduces protocol encryption. // For online mode, please use bungeecord! data := ToUUID(md5.Sum(buff.Bytes())) lre.Debugf("Offline username: %s, UUID: %s", uname, data) lre.InitPacket.ServerAddr += "\x00" + remoteip + "\x00" + data } return }
func userLogin(event *minegate.LoginRequestEvent) { if event.Rejected() { return } server := strings.ToLower(event.Upstream.Server) user := strings.ToLower(event.LoginPacket.Name) connID := event.GetConnID() ollock.Lock() defer ollock.Unlock() if online_list[server] == nil { online_list[server] = mapset.NewThreadUnsafeSet() } s := online_list[server] if !s.Add(user) { event.Warnf("[conntrack] User %s is already in server %s, rejected.", event.LoginPacket.Name, event.Upstream.Server) event.Reason("You are already in this server.") return } conn_in[connID] = loginInfo{ Server: server, User: user, } event.Infof("[conntrack] User %s joined server %s.", event.LoginPacket.Name, event.Upstream.Server) event.Infof("[conntrack] Upstream online user: %d. Total online user: %d.", online_list[server].Cardinality(), len(conn_in)) }