public static Character GetCharacter(TContext ctx, CharacterMode mode, string auth, string clientUUID)
        {
            int userId = 0;

            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);

                if (user == null)
                {
                    OTA.Logging.ProgramLog.Error.Log("No user found ");
                    return(null);
                }

                userId = user.Id;
            }
            else if (mode != CharacterMode.UUID)
            {
                return(null);
            }

            if (mode == CharacterMode.AUTH)
            {
                return(ctx.Characters.SingleOrDefault(x => x.UserId == userId));
            }
            else
            {
                return(ctx.Characters.SingleOrDefault(x => x.UUID == clientUUID));
            }
        }
        bool IPermissionHandler.AddNodeToUser(string username, string node, bool deny = false)
        {
            var usr          = AuthenticatedUsers.GetUser(username);
            var permissionId = _nodes.FindOrCreate(this, node, deny);

            var id = _userPerms.Insert(this, usr.Value.Id, permissionId);

            return(id > 0L);
        }
        bool IPermissionHandler.AddUserToGroup(string username, string groupName)
        {
            var grp = PermissionsHandler.FindGroup(groupName);
            var usr = AuthenticatedUsers.GetUser(username);

            if (usr != null && grp != null)
            {
                return(_users.Insert(this, usr.Value.Id, grp.Id) > 0L);
            }
            return(false);
        }
        bool IPermissionHandler.RemoveUserFromGroup(string username, string groupName)
        {
            var grp = PermissionsHandler.FindGroup(groupName);
            var usr = AuthenticatedUsers.GetUser(username);

            if (usr != null && grp != null)
            {
                return(_users.Delete(this, usr.Value.Id, grp.Id));
            }
            return(false);
        }
        OTA.Data.Group IPermissionHandler.GetInheritedGroupForUser(string username)
        {
            var usr = AuthenticatedUsers.GetUser(username);

            return((
                       from x in _users.UserGroup
                       join y in _groups.Groups on x.GroupId equals y.Id
                       where x.UserId == usr.Value.Id
                       select y
                       ).FirstOrDefault());
        }
        string[] IPermissionHandler.UserGroupList(string username)
        {
            var usr = AuthenticatedUsers.GetUser(username);

            return((
                       from x in _users.UserGroup
                       join y in _groups.Groups on x.GroupId equals y.Id
                       where x.UserId == usr.Value.Id
                       select y.Name
                       ).ToArray());
        }
        bool IPermissionHandler.RemoveNodeFromUser(string username, string node, bool deny = false)
        {
            var usr        = AuthenticatedUsers.GetUser(username);
            var permission = _nodes.Find(node, deny);

            if (permission != null)
            {
                return(_userPerms
                       .Delete(this, usr.Value.Id, permission.Value.Id));
            }
            return(false);
        }
        public void LogIn()
        {
            AuthenticatedUsers users = _sessionHelper.Authenticate(Username, Password);

            if (users.Id != 0)
            {
                IWindowManager manager = new WindowManager();
                manager.ShowWindow(new ShellViewModel(_sessionHelper, _events), null, null);
                TryClose();
            }
            else
            {
                MessageBox.Show("Credential not found", "OK");
            }
        }
        TDSM.API.Data.PermissionNode[] IPermissionHandler.UserNodes(string username)
        {
            var usr = AuthenticatedUsers.GetUser(username);

            return((
                       from x in _userPerms.UserNodes
                       join y in _nodes.Nodes on x.PermissionId equals y.Id
                       where x.UserId == usr.Value.Id
                       select new TDSM.API.Data.PermissionNode()
            {
                Node = y.Node,
                Deny = y.Deny
            }
                       ).ToArray());
        }
Ejemplo n.º 10
0
 public void Authenticate(String username, String password)
 {
     if (AuthenticatedUsers.ContainsKey(username))
     {
         if (AuthenticatedUsers[username] == password)
         {
             AuthTuple = new Tuple <string, string>(username, password);
             SocketWriter.WriteToSocket(NWStream, "OK");
         }
         else
         {
             SocketWriter.WriteToSocket(NWStream, "FAILED");
         }
     }
     else
     {
         SocketWriter.WriteToSocket(NWStream, "FAILED");
     }
 }
Ejemplo n.º 11
0
        internal void Register(String username, String password)
        {
            if (AuthenticatedUsers.ContainsKey(username))
            {
                SocketWriter.WriteToSocket(NWStream, "FAILED");
            }
            else
            {
                AuthenticatedUsers.Add(username, password);

                Stream          stream     = File.Open(StorageLocation + "users.osl", FileMode.OpenOrCreate);
                BinaryFormatter bformatter = new BinaryFormatter( );
                bformatter.Serialize(stream, AuthenticatedUsers);

                stream.Close( );

                AuthTuple = new Tuple <string, string>(username, password);
                SocketWriter.WriteToSocket(NWStream, "OK");
            }
        }
Ejemplo n.º 12
0
        public static int GetCharacterId(CharacterMode mode, string auth, string clientUUID)
        {
            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);
                return(user.Value.Id);
            }
            else if (mode != CharacterMode.UUID)
            {
                return(0);
            }

            using (var bl = Storage.GetBuilder(CharacterManager.SQLSafeName))
            {
                bl.SelectFrom(TableName, new string[] { ColumnNames.Id },
                              new WhereFilter(ColumnNames.UUID, clientUUID)
                              );

                return(Storage.ExecuteScalar <Int32>(bl));
            }
        }
Ejemplo n.º 13
0
        public AuthenticatedUser GetAuthenticatedUser(string userId)
        {
            try
            {
                if (!AuthenticatedUsers.ContainsKey(userId))
                {
                    if (!AuthenticatedUsers.TryAdd(userId, new AuthenticatedUser()
                    {
                        UserId = userId
                    }))
                    {
                        return(null);
                    }
                }

                return(AuthenticatedUsers[userId]);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
                Debug.Assert(false, Invariant($"Error on create authenticated user: {e}"));
                return(null);
            }
        }
Ejemplo n.º 14
0
        public static bool UpdateCharacter
        (
            CharacterMode mode,
            string auth,
            string clientUUID,
            int health,
            int maxHealth,
            int mana,
            int maxMana,
            int spawnX,
            int spawnY,
            int hair,
            byte hairDye,
            int hideVisual,
            byte difficulty,
            uint hairColor,
            uint skinColor,
            uint eyeColor,
            uint shirtColor,
            uint underShirtColor,
            uint pantsColor,
            uint shoeColor,
            int anglerQuests
        )
        {
            int?userId = null;

            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);
                userId = user.Value.Id;
            }
            else if (mode != CharacterMode.UUID)
            {
                return(false);
            }

            using (var bl = Storage.GetBuilder(CharacterManager.SQLSafeName))
            {
                if (mode == CharacterMode.AUTH)
                {
                    bl.Update(TableName, new DataParameter[]
                    {
                        new DataParameter(ColumnNames.Health, health),
                        new DataParameter(ColumnNames.MaxHealth, maxHealth),
                        new DataParameter(ColumnNames.Mana, mana),
                        new DataParameter(ColumnNames.MaxMana, maxMana),
                        new DataParameter(ColumnNames.SpawnX, spawnX),
                        new DataParameter(ColumnNames.SpawnY, spawnY),
                        new DataParameter(ColumnNames.Hair, hair),
                        new DataParameter(ColumnNames.HairDye, hairDye),
                        new DataParameter(ColumnNames.HideVisual, hideVisual),
                        new DataParameter(ColumnNames.Difficulty, difficulty),
                        new DataParameter(ColumnNames.HairColor, hairColor),
                        new DataParameter(ColumnNames.SkinColor, skinColor),
                        new DataParameter(ColumnNames.EyeColor, eyeColor),
                        new DataParameter(ColumnNames.ShirtColor, shirtColor),
                        new DataParameter(ColumnNames.UnderShirtColor, underShirtColor),
                        new DataParameter(ColumnNames.PantsColor, pantsColor),
                        new DataParameter(ColumnNames.ShoeColor, shoeColor),
                        new DataParameter(ColumnNames.AnglerQuests, anglerQuests)
                    },
                              new WhereFilter(ColumnNames.UserId, userId.Value)
                              );
                }
                else
                {
                    bl.Update(TableName, new DataParameter[]
                    {
                        new DataParameter(ColumnNames.Health, health),
                        new DataParameter(ColumnNames.MaxHealth, maxHealth),
                        new DataParameter(ColumnNames.Mana, mana),
                        new DataParameter(ColumnNames.MaxMana, maxMana),
                        new DataParameter(ColumnNames.SpawnX, spawnX),
                        new DataParameter(ColumnNames.SpawnY, spawnY),
                        new DataParameter(ColumnNames.Hair, hair),
                        new DataParameter(ColumnNames.HairDye, hairDye),
                        new DataParameter(ColumnNames.HideVisual, hideVisual),
                        new DataParameter(ColumnNames.Difficulty, difficulty),
                        new DataParameter(ColumnNames.HairColor, hairColor),
                        new DataParameter(ColumnNames.SkinColor, skinColor),
                        new DataParameter(ColumnNames.EyeColor, eyeColor),
                        new DataParameter(ColumnNames.ShirtColor, shirtColor),
                        new DataParameter(ColumnNames.UnderShirtColor, underShirtColor),
                        new DataParameter(ColumnNames.PantsColor, pantsColor),
                        new DataParameter(ColumnNames.ShoeColor, shoeColor),
                        new DataParameter(ColumnNames.AnglerQuests, anglerQuests)
                    },
                              new WhereFilter(ColumnNames.UUID, clientUUID)
                              );
                }

                return(Storage.ExecuteNonQuery(bl) > 0);
            }
        }
        public static Character UpdateCharacter
        (
            TContext ctx,
            CharacterMode mode,
            string auth,
            string clientUUID,
            int health,
            int maxHealth,
            int mana,
            int maxMana,
            int spawnX,
            int spawnY,
            int hair,
            byte hairDye,
            int hideVisual,
            byte difficulty,
            uint hairColor,
            uint skinColor,
            uint eyeColor,
            uint shirtColor,
            uint underShirtColor,
            uint pantsColor,
            uint shoeColor,
            int anglerQuests
        )
        {
            int?userId = null;

            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);
                userId = user.Id;
            }
            else if (mode != CharacterMode.UUID)
            {
                return(null);
            }

            Character chr;

            if (mode == CharacterMode.AUTH)
            {
                chr = ctx.Characters.Single(x => x.UserId == userId.Value);
            }
            else
            {
                chr = ctx.Characters.Single(x => x.UUID == clientUUID);
            }

            chr.Health          = health;
            chr.MaxHealth       = maxHealth;
            chr.Mana            = mana;
            chr.MaxMana         = maxMana;
            chr.SpawnX          = spawnX;
            chr.SpawnY          = spawnY;
            chr.Hair            = hair;
            chr.HairDye         = hairDye;
            chr.HideVisual      = hideVisual;
            chr.Difficulty      = difficulty;
            chr.HairColor       = hairColor;
            chr.SkinColor       = skinColor;
            chr.EyeColor        = eyeColor;
            chr.ShirtColor      = shirtColor;
            chr.UnderShirtColor = underShirtColor;
            chr.PantsColor      = pantsColor;
            chr.ShoeColor       = shoeColor;
            chr.AnglerQuests    = anglerQuests;

            ctx.SaveChanges();

            return(chr);
        }
        public static Character NewCharacter
        (
            TContext ctx,
            CharacterMode mode,
            string auth,
            string clientUUID,
            int health,
            int maxHealth,
            int mana,
            int maxMana,
            int spawnX,
            int spawnY,
            int hair,
            byte hairDye,
            int hideVisual,
            byte difficulty,
            uint hairColor,
            uint skinColor,
            uint eyeColor,
            uint shirtColor,
            uint underShirtColor,
            uint pantsColor,
            uint shoeColor,
            int anglerQuests
        )
        {
            int?userId = null;

            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);
                userId = user.Id;
            }
            else if (mode != CharacterMode.UUID)
            {
                return(null);
            }

            Character chr = new Character()
            {
                UserId          = userId,
                UUID            = clientUUID,
                Health          = health,
                MaxHealth       = maxHealth,
                Mana            = mana,
                MaxMana         = maxMana,
                SpawnX          = spawnX,
                SpawnY          = spawnY,
                Hair            = hair,
                HairDye         = hairDye,
                HideVisual      = hideVisual,
                Difficulty      = difficulty,
                HairColor       = hairColor,
                SkinColor       = skinColor,
                EyeColor        = eyeColor,
                ShirtColor      = shirtColor,
                UnderShirtColor = underShirtColor,
                PantsColor      = pantsColor,
                ShoeColor       = shoeColor,
                AnglerQuests    = anglerQuests
            };

            ctx.Characters.Add(chr);

            ctx.SaveChanges();

            return(chr);
        }
Ejemplo n.º 17
0
        public static int NewCharacter
        (
            CharacterMode mode,
            string auth,
            string clientUUID,
            int health,
            int maxHealth,
            int mana,
            int maxMana,
            int spawnX,
            int spawnY,
            int hair,
            byte hairDye,
            int hideVisual,
            byte difficulty,
            uint hairColor,
            uint skinColor,
            uint eyeColor,
            uint shirtColor,
            uint underShirtColor,
            uint pantsColor,
            uint shoeColor,
            int anglerQuests
        )
        {
            int?userId = null;

            if (mode == CharacterMode.AUTH)
            {
                var user = AuthenticatedUsers.GetUser(auth);
                userId = user.Value.Id;
            }
            else if (mode != CharacterMode.UUID)
            {
                return(0);
            }

            using (var bl = Storage.GetBuilder(CharacterManager.SQLSafeName))
            {
                bl.InsertInto(TableName,
                              new DataParameter(ColumnNames.UserId, userId),
                              new DataParameter(ColumnNames.UUID, clientUUID),
                              new DataParameter(ColumnNames.Health, health),
                              new DataParameter(ColumnNames.MaxHealth, maxHealth),
                              new DataParameter(ColumnNames.Mana, mana),
                              new DataParameter(ColumnNames.MaxMana, maxMana),
                              new DataParameter(ColumnNames.SpawnX, spawnX),
                              new DataParameter(ColumnNames.SpawnY, spawnY),
                              new DataParameter(ColumnNames.Hair, hair),
                              new DataParameter(ColumnNames.HairDye, hairDye),
                              new DataParameter(ColumnNames.HideVisual, hideVisual),
                              new DataParameter(ColumnNames.Difficulty, difficulty),
                              new DataParameter(ColumnNames.HairColor, hairColor),
                              new DataParameter(ColumnNames.SkinColor, skinColor),
                              new DataParameter(ColumnNames.EyeColor, eyeColor),
                              new DataParameter(ColumnNames.ShirtColor, shirtColor),
                              new DataParameter(ColumnNames.UnderShirtColor, underShirtColor),
                              new DataParameter(ColumnNames.PantsColor, pantsColor),
                              new DataParameter(ColumnNames.ShoeColor, shoeColor),
                              new DataParameter(ColumnNames.AnglerQuests, anglerQuests)
                              );

                return((int)Storage.ExecuteInsert(bl)); //Get the new ID
            }
        }
Ejemplo n.º 18
0
        void UserPermission(ISender sender, ArgumentList args)
        {
            if (!Storage.IsAvailable)
            {
                throw new CommandError("No permissions plugin or data plugin is attached");
            }

            int         a = 0;
            string      username, groupName, node, password;
            UserDetails?user;
            Group       grp;
            bool        deny, op;

            var cmd = args.GetString(a++);

            switch (cmd)
            {
            case "addgroup":
                //user addgroup "username" "group"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }
                if (!args.TryGetString(a++, out groupName))
                {
                    throw new CommandError("Expected group name after username");
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                grp = Storage.FindGroup(groupName);
                if (grp == null)
                {
                    throw new CommandError("Group does not exist: " + groupName);
                }

                if (Storage.AddUserToGroup(user.Value.Username, grp.Name))
                {
                    sender.Message(String.Format("Successfully added {0} to group {1} ", user.Value.Username, grp.Name), Color.Green);
                }
                else
                {
                    sender.Message(String.Format("Failed to add {0} from group {1} ", user.Value.Username, grp.Name), Color.Red);
                }
                break;

            case "removegroup":
                //user removegroup "username" "group"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }
                if (!args.TryGetString(a++, out groupName))
                {
                    throw new CommandError("Expected group name after username");
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                grp = Storage.FindGroup(groupName);
                if (grp == null)
                {
                    throw new CommandError("Group does not exist: " + groupName);
                }

                if (Storage.RemoveUserFromGroup(user.Value.Username, grp.Name))
                {
                    sender.Message(String.Format("Successfully removed {0} to group {1} ", user.Value.Username, grp.Name), Color.Green);
                }
                else
                {
                    sender.Message(String.Format("Failed to remove {0} from group {1} ", user.Value.Username, grp.Name), Color.Red);
                }
                break;

            case "addnode":
                //user addnode "username" "node" "deny"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }
                if (!args.TryGetString(a++, out node))
                {
                    throw new CommandError("Expected node name after username");
                }

                if (!args.TryGetBool(a++, out deny))
                {
                    deny = false;
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                if (Storage.AddNodeToUser(user.Value.Username, node, deny))
                {
                    sender.Message(String.Format("Successfully added {0} to user {1} ", node, user.Value.Username), Color.Green);
                }
                else
                {
                    sender.Message(String.Format("Failed to add {0} from user {1} ", node, user.Value.Username), Color.Red);
                }
                break;

            case "removenode":
                //user removenode "username" "node" "deny"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }
                if (!args.TryGetString(a++, out node))
                {
                    throw new CommandError("Expected node name after username");
                }

                if (!args.TryGetBool(a++, out deny))
                {
                    deny = false;
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                if (Storage.RemoveNodeFromUser(user.Value.Username, node, deny))
                {
                    sender.Message(String.Format("Successfully removed {0} to user {1} ", node, user.Value.Username), Color.Green);
                }
                else
                {
                    sender.Message(String.Format("Failed to remove {0} from user {1} ", node, user.Value.Username), Color.Red);
                }
                break;

            case "groups":
            case "listgroups":
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                var groups = Storage.UserGroupList(username);
                if (groups != null && groups.Length > 0)
                {
                    ProgramLog.Admin.Log("Current groups:");
                    foreach (var gps in groups)
                    {
                        sender.Message("\t" + gps);
                    }
                }
                else
                {
                    sender.Message("There are no registered groups for user " + user.Value.Username);
                }
                break;

            case "nodes":
            case "listnodes":
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }

                user = AuthenticatedUsers.GetUser(username);
                if (null == user)
                {
                    throw new CommandError("No user found by: " + username);
                }

                var nodes = Storage.UserNodes(username);
                if (nodes != null && nodes.Length > 0)
                {
                    sender.Message("Current permissions for user {0}:", user.Value.Username);
                    foreach (var nd in nodes)
                    {
                        sender.Message("\t{0}\t- {1}", nd.Deny ? "Denied" : "Allowed", nd.Node);
                    }
                }
                else
                {
                    sender.Message("There are no permissions assigned to user: "******"search":
                //user search "part"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected part of a users name after [" + cmd + "]");
                }

                var matches = AuthenticatedUsers.FindUsersByPrefix(username);
                if (matches != null && matches.Length > 0)
                {
                    sender.Message("Matches:");
                    foreach (var mth in matches)
                    {
                        sender.Message("\t" + mth);
                    }
                }
                else
                {
                    sender.Message("There are no registered users matching " + username);
                }
                break;

            case "add":
                //user add "username" "password" "op"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }

                if (!args.TryGetString(a++, out password))
                {
                    throw new CommandError("Expected password name after username");
                }

                args.TryGetBool(a++, out op);

                var existing = AuthenticatedUsers.GetUser(username);
                if (existing == null)
                {
                    if (AuthenticatedUsers.CreateUser(username, password, op))
                    {
                        if (op)
                        {
                            sender.Message("Successfully created user as operator: " + username);
                        }
                        else
                        {
                            sender.Message("Successfully created user " + username);
                        }
                    }
                    else
                    {
                        throw new CommandError("User failed to be created");
                    }
                }
                else
                {
                    throw new CommandError("A user already exists by the name " + username);
                }
                break;

            case "update":
                //user add "username" "password" "op"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }

                if (!args.TryGetString(a++, out password))
                {
                    throw new CommandError("Expected password name after username");
                }

                args.TryGetBool(a++, out op);

                var updatee = AuthenticatedUsers.GetUser(username);
                if (updatee != null)
                {
                    if (AuthenticatedUsers.UpdateUser(username, password, op))
                    {
                        if (op)
                        {
                            sender.Message("Successfully updated user as operator: " + username);
                        }
                        else
                        {
                            sender.Message("Successfully updated user " + username);
                        }
                    }
                    else
                    {
                        throw new CommandError("User failed to be updated");
                    }
                }
                else
                {
                    throw new CommandError("No user exists by the name " + username);
                }
                break;

            case "remove":
                //user remove "username"
                if (!args.TryGetString(a++, out username))
                {
                    throw new CommandError("Expected username name after [" + cmd + "]");
                }

                var delUser = AuthenticatedUsers.GetUser(username);
                if (delUser != null)
                {
                    if (AuthenticatedUsers.DeleteUser(username))
                    {
                        sender.Message("Successfully removed user " + username);
                    }
                    else
                    {
                        throw new CommandError("User failed to be removed");
                    }
                }
                else
                {
                    throw new CommandError("Cannot find user " + username);
                }
                break;

            default:
                throw new CommandError("Invalid command " + cmd);
            }
        }
        public static bool SavePlayerData(IDbConnection ctx, IDbTransaction txn, bool save, Player player)
#endif
        {
            if (!player.IsAuthenticated())
            {
                return(false);
            }

            //If using a flat based system ensure the MODE is stored
            string authName = null;

            if (Mode == CharacterMode.AUTH)
            {
                var auth = player.GetAuthenticatedAs();
                if (!String.IsNullOrEmpty(auth))
                {
                    authName = auth;
                }
            }
            else if (Mode == CharacterMode.UUID)
            {
                if (!String.IsNullOrEmpty(player.ClientUUId))
                {
                    authName = player.ClientUUId + '@' + player.name;
                }
            }

            if (!String.IsNullOrEmpty(authName))
            {
                if (Storage.IsAvailable)
                {
                    var auth = player.GetAuthenticatedAs();

#if ENTITY_FRAMEWORK_6
                    int userId = 0;
                    if (Mode == CharacterMode.AUTH)
                    {
                        var user = AuthenticatedUsers.GetUser(auth);

                        if (user == null)
                        {
                            OTA.Logging.ProgramLog.Error.Log("No user found ");
                            return(false);
                        }

                        userId = user.Id;
                    }
                    else if (Mode != CharacterMode.UUID)
                    {
                        return(false);
                    }

                    //Sync the character
                    var character = ctx.GetCharacter(Mode, userId, player.ClientUUId);
                    if (null == character)
                    {
                        character = ctx.AddCharacter(userId, player);
                    }
                    else
                    {
                        character.UpdateCharacter(userId, player);
                    }

                    //Sync items
                    var items = ctx.Items.Where(x => x.CharacterId == character.Id).ToArray();

                    if (!SaveCharacterItems(ctx, save, player, character.Id, player.inventory, ItemType.Inventory, items))
                    {
                        return(false);
                    }
                    if (!SaveCharacterItems(ctx, save, player, character.Id, player.armor, ItemType.Armor, items))
                    {
                        return(false);
                    }
                    if (!SaveCharacterItems(ctx, save, player, character.Id, player.dye, ItemType.Dye, items))
                    {
                        return(false);
                    }
                    if (!SaveCharacterItems(ctx, save, player, character.Id, player.miscEquips, ItemType.Equipment, items))
                    {
                        return(false);
                    }
                    if (!SaveCharacterItems(ctx, save, player, character.Id, player.miscDyes, ItemType.MiscDyes, items))
                    {
                        return(false);
                    }
                    if (!SaveCharacterItem(ctx, save, player, character.Id, ItemType.Trash, player.trashItem, 0, items))
                    {
                        return(false);
                    }
#elif ENTITY_FRAMEWORK_7
#else
                    var character = Tables.CharacterTable.GetCharacter(ctx, txn, Mode, auth, player.ClientUUId);
                    if (character == null)
                    {
//                        if (player.ClearPluginData(Key_NewCharacter))
//                        {
                        character = Tables.CharacterTable.NewCharacter
                                    (
                            ctx,
                            txn,
                            Mode,
                            auth,
                            player.ClientUUId,
                            player.statLife,
                            player.statLifeMax,
                            player.statMana,
                            player.statManaMax,
                            player.SpawnX,
                            player.SpawnY,
                            player.hair,
                            player.hairDye,
                            player.hideVisual,
                            player.difficulty,
                            player.hairColor,
                            player.skinColor,
                            player.eyeColor,
                            player.shirtColor,
                            player.underShirtColor,
                            player.pantsColor,
                            player.shoeColor,
                            player.anglerQuestsFinished
                                    );
//                        }
//                        else
//                        {
//                            ProgramLog.Error.Log("Failed to save SSC for player: {0}", player.name);
//                            return false;
//                        }
                    }
                    else
                    {
                        character = Tables.CharacterTable.UpdateCharacter
                                    (
                            ctx,
                            txn,
                            Mode,
                            auth,
                            player.ClientUUId,
                            player.statLife,
                            player.statLifeMax,
                            player.statMana,
                            player.statManaMax,
                            player.SpawnX,
                            player.SpawnY,
                            player.hair,
                            player.hairDye,
                            player.hideVisual,
                            player.difficulty,
                            player.hairColor,
                            player.skinColor,
                            player.eyeColor,
                            player.shirtColor,
                            player.underShirtColor,
                            player.pantsColor,
                            player.shoeColor,
                            player.anglerQuestsFinished
                                    );
                    }

                    if (character != null)
                    {
                        if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.inventory, ItemType.Inventory))
                        {
                            return(false);
                        }
                        if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.armor, ItemType.Armor))
                        {
                            return(false);
                        }
                        if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.dye, ItemType.Dye))
                        {
                            return(false);
                        }
                        if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.miscEquips, ItemType.Equipment))
                        {
                            return(false);
                        }
                        if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.miscDyes, ItemType.MiscDyes))
                        {
                            return(false);
                        }
                        if (!SaveCharacterItem(ctx, txn, save, player, character.Id, ItemType.Trash, player.trashItem, 0))
                        {
                            return(false);
                        }

//                        for (var i = 0; i < player.inventory.Length; i++)
//                        {
//                            var item = player.inventory[i];
//                            var netId = 0;
//                            var prefix = 0;
//                            var stack = 0;
//                            var favorite = false;
//
//                            if (item != null)
//                            {
//                                netId = item.netID;
//                                prefix = item.prefix;
//                                stack = item.stack;
//                                favorite = item.favorited;
//                            }
//
//                            var itemId = Tables.ItemTable.GetItem(ItemType.Inventory, i, characterId);
//                            if (itemId > 0)
//                            {
//                                if (!Tables.ItemTable.UpdateItem(ItemType.Inventory, netId, prefix, stack, favorite, i, characterId))
//                                {
//                                    ProgramLog.Error.Log("Failed to save Inventory for player: {0}", player.name);
//                                    return false;
//                                }
//                            }
//                            else
//                            {
//                                itemId = Tables.ItemTable.NewItem(ItemType.Inventory, netId, prefix, stack, favorite, i, characterId);
//                            }
//                        }
//                        for (var i = 0; i < player.armor.Length; i++)
//                        {
//                            var item = player.armor[i];
//                            var netId = 0;
//                            var prefix = 0;
//                            var stack = 0;
//                            var favorite = false;
//
//                            if (item != null)
//                            {
//                                netId = item.netID;
//                                prefix = item.prefix;
//                                stack = item.stack;
//                                favorite = item.favorited;
//                            }
//
//                            var itemId = Tables.ItemTable.GetItem(ItemType.Armor, i, characterId);
//                            if (itemId > 0)
//                            {
//                                if (!Tables.ItemTable.UpdateItem(ItemType.Armor, netId, prefix, stack, favorite, i, characterId))
//                                {
//                                    ProgramLog.Error.Log("Failed to save Armor for player: {0}", player.name);
//                                    return false;
//                                }
//                            }
//                            else
//                            {
//                                itemId = Tables.ItemTable.NewItem(ItemType.Armor, netId, prefix, stack, favorite, i, characterId);
//                            }
//                        }
//                        for (var i = 0; i < player.dye.Length; i++)
//                        {
//                            var item = player.dye[i];
//                            var netId = 0;
//                            var prefix = 0;
//                            var stack = 0;
//                            var favorite = false;
//
//                            if (item != null)
//                            {
//                                netId = item.netID;
//                                prefix = item.prefix;
//                                stack = item.stack;
//                                favorite = item.favorited;
//                            }
//
//                            var itemId = Tables.ItemTable.GetItem(ItemType.Dye, i, characterId);
//                            if (itemId > 0)
//                            {
//                                if (!Tables.ItemTable.UpdateItem(ItemType.Dye, netId, prefix, stack, favorite, i, characterId))
//                                {
//                                    ProgramLog.Error.Log("Failed to save Dye for player: {0}", player.name);
//                                    return false;
//                                }
//                            }
//                            else
//                            {
//                                itemId = Tables.ItemTable.NewItem(ItemType.Dye, netId, prefix, stack, favorite, i, characterId);
//                            }
//                        }
                    }
#endif
                }
                else
                {
                    var dir = Path.Combine(Globals.CharacterDataPath, Mode.ToString());
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    var file = Path.Combine(dir, authName + ".ssc");
                    var data = new ServerCharacter(player);

//                    if (data.Buffs != null && data.BuffTime != null)
//                    {
//                        var max = Math.Min(data.Buffs.Length, data.BuffTime.Length);
//                        for (var x = 0; x < max; x++)
//                        {
//                            if (data.Buffs[x] > 0)
//                            {
//                                var time = data.BuffTime[x] * 60;
//
//                                ProgramLog.Plugin.Log("Saving buff {0} for {1}/{2}", data.Buffs[x], time, data.BuffTime[x]);
//                            }
//                        }
//                    }

                    var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
                    System.IO.File.WriteAllText(file, json);
                    return(true);
                }
            }
            return(false);
        }