コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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());
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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");
            }
        }
コード例 #9
0
        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());
        }
コード例 #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");
     }
 }
コード例 #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");
            }
        }
コード例 #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));
            }
        }
コード例 #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);
            }
        }
コード例 #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);
            }
        }
コード例 #15
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);
        }
コード例 #16
0
        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);
        }
コード例 #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
            }
        }
コード例 #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);
            }
        }
コード例 #19
0
        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);
        }