Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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))
}