示例#1
0
        private static async Task InitliazeDb()
        {
            using (var context = new BakaContext())
            {
                await context.Database.EnsureCreatedAsync();

                var root_user = await context.Users.FirstOrDefaultAsync(x => x.Token == Config.RootToken);

                if (root_user != null)
                {
                    Console.WriteLine("Root user already exists!\n" + JsonConvert.SerializeObject(root_user));
                    return;
                }

                root_user = new BakaUser()
                {
                    Name          = "ROOT_USER",
                    Username      = "******",
                    InitialIp     = "ROOT_USER",
                    UploadLimitMB = 500,
                    Deleted       = false,
                    Disabled      = false,
                    Timestamp     = DateTime.Now,
                    Email         = "ROOT_USER_DO_NOT_USE_FOR_UPLOADING_OBJECTS",
                    Token         = Config.RootToken,
                    AccountType   = "su_full"
                };

                await context.Users.AddAsync(root_user);

                await context.SaveChangesAsync();

                Console.WriteLine("Created root user!\n" + JsonConvert.SerializeObject(root_user));
            }
        }
示例#2
0
        public async Task <IActionResult> GetUserInfo(string token)
        {
            try
            {
                AuthModel model = Authorize("su_full");
                if (!model.Authorized)
                {
                    Response.StatusCode = 401;

                    return(Json(new
                    {
                        success = false,
                        error = model.Reason,
                        code = 401
                    }));
                }

                using (var context = new BakaContext())
                {
                    BakaUser return_usr = await context.Users.FirstOrDefaultAsync(x => x.Token == token);

                    if (return_usr == null)
                    {
                        return(NotFound(new { success = false, error = "404 Not Found", code = 404 }));
                    }

                    return(Json(new
                    {
                        id = return_usr.Id,
                        username = return_usr.Username,
                        name = return_usr.Name,
                        email = return_usr.Email,
                        upload_limit = return_usr.UploadLimitMB,
                        initial_ip = return_usr.InitialIp,
                        timestamp = return_usr.Timestamp.ToFileTimeUtc().ToString(),
                        token = return_usr.Token,
                        deleted = return_usr.Deleted,
                        disabled = return_usr.Disabled,
                        account_type = return_usr.AccountType,
                        links = return_usr.Links,
                        files = return_usr.Files,
                    }));
                }
            }
            catch
            {
                Response.StatusCode = 500;

                return(Json(new
                {
                    success = false,
                    error = "500 Internal Server Error",
                    code = 500
                }));
            }
        }
示例#3
0
        public async Task <IActionResult> DeleteUser(string token)
        {
            try
            {
                AuthModel model = Authorize("su_full");
                if (!model.Authorized)
                {
                    Response.StatusCode = 401;

                    return(Json(new
                    {
                        success = false,
                        error = model.Reason,
                        code = 401
                    }));
                }
                using (var context = new BakaContext())
                {
                    BakaUser return_usr = await context.Users.FirstOrDefaultAsync(x => x.Token == token);

                    if (return_usr == null)
                    {
                        return(NotFound(new { success = false, error = "404 Not Found", code = 404 }));
                    }

                    if (!Globals.Config.PreserveDeletedFiles)
                    {
                        context.Users.Remove(return_usr);
                    }
                    else
                    {
                        return_usr.Deleted = true;
                    }

                    await context.SaveChangesAsync();

                    return(Json(new
                    {
                        success = true,
                        code = 200,
                        deleted = true
                    }));
                }
            }
            catch
            {
                Response.StatusCode = 500;

                return(Json(new
                {
                    success = false,
                    error = "500 Internal Server Error",
                    code = 500
                }));
            }
        }
示例#4
0
        public async Task <IActionResult> ResetUserToken(string token)
        {
            try
            {
                AuthModel model = Authorize("su_full");
                if (!model.Authorized)
                {
                    Response.StatusCode = 401;

                    return(Json(new
                    {
                        success = false,
                        error = model.Reason,
                        code = 401
                    }));
                }

                using (var context = new BakaContext())
                {
                    BakaUser return_usr = await context.Users.FirstOrDefaultAsync(x => x.Token == token);

                    if (return_usr == null)
                    {
                        return(NotFound(new
                        {
                            success = false,
                            error = "404 Not Found",
                            code = 404
                        }));
                    }

                    return_usr.Token = Globals.GenerateToken(return_usr);

                    await context.SaveChangesAsync();

                    return(Json(new
                    {
                        new_token = return_usr.Token
                    }));
                }
            }
            catch
            {
                Response.StatusCode = 500;

                return(Json(new
                {
                    success = false,
                    error = "500 Internal Server Error",
                    code = 500
                }));
            }
        }
示例#5
0
        public static string GenerateToken(BakaUser user)
        {
            var payload = new
            {
                ts = DateTime.Now.ToFileTimeUtc().ToString()
            };

            byte[] key = Encoding.UTF8.GetBytes(Config.JWTKey);

            string token = JWT.Encode(payload, key, JwsAlgorithm.HS256);

            return(token);
        }
示例#6
0
        public async Task <IActionResult> CreateUser([FromBody] NewUserModel details)
        {
            try
            {
                AuthModel model = Authorize("su_full");
                if (!model.Authorized)
                {
                    Response.StatusCode = 401;

                    return(Json(new
                    {
                        success = false,
                        error = model.Reason,
                        code = 401
                    }));
                }

                BakaUser return_usr;

                using (var context = new BakaContext())
                {
                    var usr = new BakaUser()
                    {
                        Name          = details.Name,
                        Username      = details.Username,
                        Email         = details.Email,
                        InitialIp     = null,
                        Timestamp     = DateTime.Now,
                        UploadLimitMB = details.UploadLimit,
                        Deleted       = false,
                        Disabled      = false,
                        AccountType   = "su_upload"
                    };

                    usr.Token = Globals.GenerateToken(usr);

                    await context.Users.AddAsync(usr);

                    await context.SaveChangesAsync();

                    return_usr = usr;
                }

                return(Json(new
                {
                    id = return_usr.Id,
                    username = return_usr.Username,
                    name = return_usr.Name,
                    initial_ip = return_usr.InitialIp,
                    timestamp = return_usr.Timestamp.ToFileTimeUtc().ToString(),
                    token = return_usr.Token,
                    deleted = return_usr.Deleted,
                    disabled = return_usr.Disabled,
                    email = return_usr.Email,
                    upload_limit = return_usr.UploadLimitMB,
                }));
            }
            catch (Exception e)
            {
                Response.StatusCode = 500;

                if (!Globals.Config.IsDebug)
                {
                    return(Json(new
                    {
                        success = false,
                        error = "500 Internal Server Error",
                        code = 500
                    }));
                }

                return(Json(new
                {
                    success = false,
                    error = "500 Internal Server Error",
                    code = 500,
                    exception = e.ToString(),
                }));
            }
        }
示例#7
0
        public async Task <IActionResult> GetUserFromId(int id)
        {
            AuthModel model = Authorize("su_full");

            if (!model.Authorized)
            {
                Response.StatusCode = 401;

                return(Json(new
                {
                    success = false,
                    error = model.Reason,
                    code = 401
                }));
            }

            try
            {
                using (var context = new BakaContext())
                {
                    BakaUser return_usr = await context.Users.Include(x => x.Links).Include(x => x.Files).FirstOrDefaultAsync(x => x.Id == id);

                    if (return_usr == null)
                    {
                        return(NotFound(new { success = false, error = "404 Not Found", code = 404 }));
                    }

                    return(Json(new
                    {
                        id = return_usr.Id,
                        username = return_usr.Username,
                        name = return_usr.Name,
                        email = return_usr.Email,
                        upload_limit = return_usr.UploadLimitMB,
                        initial_ip = return_usr.InitialIp,
                        timestamp = return_usr.Timestamp.ToFileTimeUtc().ToString(),
                        token = return_usr.Token,
                        deleted = return_usr.Deleted,
                        disabled = return_usr.Disabled,
                        account_type = return_usr.AccountType,
                        links = return_usr.Links.ToList(),
                        files = return_usr.Files.ToList(),
                    }));
                }
            }
            catch (Exception e)
            {
                Response.StatusCode = 500;

                if (!Globals.Config.IsDebug)
                {
                    return(Json(new
                    {
                        success = false,
                        error = "500 Internal Server Error",
                        code = 500
                    }));
                }

                return(Json(new
                {
                    success = false,
                    error = "500 Internal Server Error",
                    code = 500,
                    exception = e.ToString(),
                }));
            }
        }