Example #1
0
        public void HideHashlinkDialog(bool cancelled = false)
        {
            var jip = (IJSInProcessRuntime)JSRuntime;

            jip.InvokeVoid("ZorboApp.hideHashlinkDialog");

            if (!cancelled && !string.IsNullOrEmpty(ChatClient.HashlinkText))
            {
                var channel = Hashlinks.FromHashlinkString <ServerRecord>(ChatClient.HashlinkText);
                if (channel != null)
                {
                    ChatClient.JoiningChannel = null;
                    ChatClient.JoiningChannel = channel;

                    if (ChatClient.Username == "Zorbo User")
                    {
                        ShowNameDialog();
                    }
                    else
                    {
                        JoinChannel();
                    }
                }
            }
        }
Example #2
0
 public string DecodeHashlink(string hashlink)
 {
     try {
         return(Json.Serialize(Hashlinks.FromHashlinkString <ServerRecord>(hashlink)));
     }
     catch { }
     return(null);
 }
Example #3
0
 private JsonSecureStringConverter()
     : base(
         (writer, value, serializer) => {
     byte[] tmp = Encoding.UTF8.GetBytes(value.ToNativeString());
     serializer.Serialize(writer, Convert.ToBase64String(Hashlinks.E67(tmp, 34567)));
 },
         (reader, objectType, existingValue, hasValue, serializer) => {
     string ret = serializer.Deserialize <string>(reader);
     if (!string.IsNullOrEmpty(ret))
     {
         return(Encoding.UTF8.GetString(Hashlinks.D67(Convert.FromBase64String(ret), 34567)).ToSecureString());
     }
     return(null);
 })
 { }
Example #4
0
        public override bool OnTextCommand(IClient client, string cmd, string args)
        {
            switch (cmd)
            {
            case "id":
                Server.SendAnnounce(client, String.Format(Strings.UserId, client.Id));
                break;

            case "vroom":
                ushort vroom = 0;

                if (UInt16.TryParse(args, out vroom))
                {
                    client.Vroom = vroom;
                }

                break;

            case "admins":
            case "listadmins": {
                if (client.Admin > AdminLevel.User)
                {
                    var tmp = Server.History.Admin.ToList();
                    tmp.Sort((a, b) => ((int)a.Admin) - ((int)b.Admin));

                    Server.SendAnnounce(client, String.Format("-- Admins: {0} --", tmp.Count));

                    foreach (var user in tmp)
                    {
                        Server.SendAnnounce(client, String.Format("{0}: {1}", user.Admin, user.Name));
                    }
                }
            }
            break;

            case "topic":
                if (client.Admin > AdminLevel.Moderator)
                {
                    Server.Config.Topic = args;
                }

                break;

            case "info":
            case "whois": {
                if (client.Admin > AdminLevel.User)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null)
                    {
                        Server.SendAnnounce(client, String.Format("-- Whois: {0} --", target.Name));
                        Server.SendAnnounce(client, String.Format("Id: {0}", target.Id));
                        Server.SendAnnounce(client, String.Format("Level: {0}", target.Admin));
                        Server.SendAnnounce(client, String.Format("Vroom: {0}", target.Vroom));
                        Server.SendAnnounce(client, String.Format("Muzzled: {0}", target.Muzzled));
                        Server.SendAnnounce(client, String.Format("IsCaptcha: {0}", target.IsCaptcha));
                        Server.SendAnnounce(client, String.Format("Address: {0}", target.ExternalIp));
                        Server.SendAnnounce(client, String.Format("Client: {0}", target.Version));
                    }
                    else
                    {
                        Server.SendAnnounce(client, "-- Userlist Info --");

                        foreach (var user in Server.Users)
                        {
                            Server.SendAnnounce(client, String.Format("[{0}] - {1}", user.Id, user.Name));
                        }
                    }
                }
            }
            break;

            case "whowas": {
                if (client.Admin > AdminLevel.User)
                {
                    var targets = AresCommands.ParseHistoryCommand(Server, args, out args);

                    if (targets.Count > 0)
                    {
                        for (int i = 0; i < targets.Count; i++)
                        {
                            var target = targets[i];

                            Server.SendAnnounce(client, String.Format("-- Whowas: {0} --", target.Name));
                            Server.SendAnnounce(client, String.Format("Muzzled: {0}", target.Muzzled));
                            Server.SendAnnounce(client, String.Format("Trusted: {0}", target.Trusted));
                            Server.SendAnnounce(client, String.Format("Address: {0}", target.ClientId.ExternalIp));
                            Server.SendAnnounce(client, String.Format("LastSeen: {0} (Server Time)", target.LastSeen));

                            if (i < (targets.Count - 1))
                            {
                                Server.SendAnnounce(client, " ");
                            }
                        }
                    }
                    else
                    {
                        Server.SendAnnounce(client, Strings.HistoryNotFound);
                    }
                }
            }
            break;

            case "muzzle": {
                if (client.Admin > AdminLevel.User)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null && client.Admin > target.Admin)
                    {
                        target.Muzzled = true;
                    }
                }
            }
            break;

            case "unmuzzle": {
                if (client.Admin > AdminLevel.User)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null && client.Admin > target.Admin)
                    {
                        target.Muzzled = false;
                    }
                }
            }
            break;

            case "kill":
            case "kick":
            case "disconnect": {
                if (client.Admin > AdminLevel.User)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null && client.Admin > target.Admin)
                    {
                        Server.SendAnnounce(String.Format(Strings.Kicked, target.Name));
                        target.Disconnect();
                    }
                }
            }
            break;

            case "redirect": {
                if (client.Admin > AdminLevel.Moderator)
                {
                    IClient     target = AresCommands.ParseUserCommand(Server, args, out args);
                    AresChannel hash   = Hashlinks.FromHashlinkString <AresChannel>(args);

                    if (hash != null)
                    {
                        if (target != null && client.Admin > target.Admin)
                        {
                            Server.SendPacket(target, new Redirect(hash, String.Format(Strings.Redirected, hash.Name)));
                        }
                    }
                }
            }
            break;

            case "ban": {
                if (client.Admin > AdminLevel.User)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null && client.Admin > target.Admin)
                    {
                        Server.SendAnnounce(String.Format(Strings.Banned, target.Name));
                        target.Ban();
                    }
                }
            }
            break;

            case "bans":
            case "listbans": {
                if (client.Admin > AdminLevel.User)
                {
                    string format = "[{0}] - {1}";
                    Server.SendAnnounce(client, "-- Banned Users --");

                    for (int i = 0; i < Server.History.Bans.Count; i++)
                    {
                        var banned = Server.History.Bans[i];
                        var record = Server.History.Records.Find((s) => banned.Equals(s));

                        if (record != null)
                        {
                            Server.SendAnnounce(client, String.Format(format, i, record.Name));
                        }
                    }
                }
            }
            break;

            case "unban": {
                if (client.Admin > AdminLevel.User)
                {
                    var targets = AresCommands.ParseHistoryCommand(Server, args, out args);

                    if (targets.Count > 0)
                    {
                        targets.ForEach((s) => {
                                Server.History.Bans.Remove(s.ClientId);
                                Server.SendAnnounce(String.Format(Strings.Unbanned, s.Name));
                            });
                    }
                    else
                    {
                        Server.SendAnnounce(client, Strings.HistoryNotFound);
                    }
                }
            }
            break;

            case "cbans":
            case "clearbans": {
                if (client.Admin > AdminLevel.Moderator)
                {
                    Server.History.Bans.Clear();
                    Server.SendAnnounce(String.Format(Strings.BansCleared, client.Name));
                }
            }
            break;

            case "banrange":
                if (client.Admin > AdminLevel.Moderator)
                {
                    try {
                        Regex reg = new Regex(args, RegexOptions.IgnoreCase);
                        Server.History.RangeBans.Add(reg);

                        Server.SendAnnounce(String.Format(Strings.RangeBanAdd, reg.ToString()));
                    }
                    catch (ArgumentException ex) {
                        Server.SendAnnounce(String.Format(Strings.InvalidPattern, ex.Message));
                    }
                }
                break;

            case "rbans":
            case "listrangebans": {
                if (client.Admin > AdminLevel.Moderator)
                {
                    string format = "[{0}] - {1}";
                    Server.SendAnnounce(client, "-- Banned IP Addresses --");

                    for (int i = 0; i < Server.History.RangeBans.Count; i++)
                    {
                        var regex = Server.History.RangeBans[i];
                        Server.SendAnnounce(client, String.Format(format, i, regex.ToString()));
                    }
                }
            }
            break;

            case "unbanrange":
                if (client.Admin > AdminLevel.Moderator)
                {
                    if (int.TryParse(args, out int index))
                    {
                        if (index < 0)
                        {
                            index = 0;
                        }

                        if (index >= Server.History.RangeBans.Count)
                        {
                            Server.SendAnnounce(client, Strings.InvalidIndex);
                        }
                        else
                        {
                            Regex regex = Server.History.RangeBans[index];
                            Server.History.RangeBans.RemoveAt(index);

                            Server.SendAnnounce(String.Format(Strings.RangeBanRemove, regex.ToString()));
                        }
                    }
                    else
                    {
                        try {
                            Regex regex = new Regex(args);
                            Server.History.RangeBans.Remove(regex);

                            Server.SendAnnounce(String.Format(Strings.RangeBanRemove, regex.ToString()));
                        }
                        catch (Exception ex) {
                            Server.SendAnnounce(client, String.Format(Strings.InvalidPattern, ex.Message));
                        }
                    }
                }
                break;

            case "crangebans":
            case "clearrangebans": {
                if (client.Admin > AdminLevel.Moderator)
                {
                    Server.History.RangeBans.Clear();
                    Server.SendAnnounce(String.Format(Strings.RangeBansCleared, client.Name));
                }
            }
            break;

            case "grant": {
                if (client.Admin >= AdminLevel.Host)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null && Enum.TryParse(args, out AdminLevel tmp))
                    {
                        if (client.LocalHost || client.Admin >= target.Admin)
                        {
                            target.Admin = tmp;
                        }

                        else
                        {
                            target.Admin = (AdminLevel)Math.Min((int)client.Admin, (int)tmp);
                        }

                        var password = Server.History.Admin.Passwords.Find((s) => s.ClientId.Equals(target));

                        if (password != null)
                        {
                            password.ClientId = target.ClientId;
                            password.Level    = tmp;
                        }
                    }
                }
            }
            break;

            case "captcha": {
                if (client.Admin >= AdminLevel.Host)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null)
                    {
                        target.IsCaptcha = true;
                    }
                }
            }
            break;

            case "skipcaptcha": {
                if (client.Admin >= AdminLevel.Host)
                {
                    IClient target = AresCommands.ParseUserCommand(Server, args, out args);

                    if (target != null)
                    {
                        target.IsCaptcha = false;
                    }
                }
            }
            break;

            case "loadplugin":
                if (client.Admin >= AdminLevel.Host)
                {
                    Server.PluginHost.LoadPlugin(args);
                }

                break;

            case "killplugin":
                if (client.Admin >= AdminLevel.Host)
                {
                    Server.PluginHost.KillPlugin(args);
                }

                break;

            case "plugins":
            case "listplugins":
                if (client.Admin > AdminLevel.User)
                {
                    Server.SendAnnounce(client, "-- Active plugins --");

                    foreach (var plugin in Server.PluginHost)
                    {
                        if (plugin.Enabled)
                        {
                            Server.SendAnnounce(client, plugin.Name);
                        }
                    }
                }
                break;
            }

            return(true);
        }