Ejemplo n.º 1
0
        public async Task <IActionResult> Upload(List <IFormFile> files, string returnPath = "")
        {
            try
            {
                var size          = files.Sum(f => f.Length);
                var returnMessage = files.Count
                                    + (files.Count == 1 ? "file" : " files ")
                                    + $" uploaded of summary size "
                                    + UnixHelper.DetectUnitBySize(size);
                var(checkResultMessage, tmpFilesList) =
                    await _fileService.SanitizeFileUpload(files,
                                                          returnPath,
                                                          HttpContext.User.IsInRole("Admin"));

                returnMessage = string.IsNullOrEmpty(checkResultMessage) ? returnMessage : checkResultMessage;
                if (!string.IsNullOrEmpty(checkResultMessage))
                {
                    return(StatusCode(403, checkResultMessage));
                }

                await _fileService.PostSanitizeUpload(tmpFilesList);

                Log.Warning($"Accepted to be created at path: /Core/Storage/Browse?path={returnPath}");
                return(Accepted($"/Core/Storage/Browse?path={returnPath}", returnMessage));
            }
            catch (Exception e)
            {
                return(StatusCode(500, e.Message));
            }
        }
Ejemplo n.º 2
0
        private bool CheckTokenTime(string iat, string exp)
        {
            DateTime beginTime = DateTime.Parse(UnixHelper.LongDateTimeToDateTimeString(iat));
            DateTime expTime   = DateTime.Parse(UnixHelper.LongDateTimeToDateTimeString(exp));

            if (beginTime < DateTime.Now && DateTime.Now <= expTime)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 3
0
        public async Task List(string path)
        {
            var listing = new List <string>();

            if (!string.IsNullOrEmpty(path))
            {
                var tmpListing = (await _fileService.ListPath(path));
                foreach (var absolutePath in tmpListing)
                {
                    var mappedPath = UnixHelper.MapToSystemPath(absolutePath);

                    if (!Directory.Exists(absolutePath))
                    {
                        continue;
                    }
                    try
                    {
                        if (UnixHelper.HasAccess(_configuration.GetSection("OsUser")["OsUsername"], absolutePath))
                        {
                            listing.Add(new string(mappedPath));
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Error(e, "FileOperationHub#List");
                    }
                }
            }

            if (_signInManager.IsSignedIn(Context.User))
            {
                Log.Information($"Returning a listing to a signed user: {Context.User.Identity.Name}");

                var user = await _userManager.GetUserAsync(Context.User);

                await this.Clients.User(user.Id).SendAsync("ReceiveListing", listing);
            }
            else
            {
                Log.Information("Returning a listing to unknown user.");

                await this.Clients.All.SendAsync("ReceiveListing", listing);
            }
        }
Ejemplo n.º 4
0
 public void ApplyAcl(string osUser)
 {
     this.ContentsList.RemoveAll(entry =>
                                 !UnixHelper.HasAccess(osUser, entry.PhysicalPath) ||
                                 entry.Name.StartsWith("~"));
 }
Ejemplo n.º 5
0
 public override ValueTask <TypeParserResult <Dictionary <string, string> > > ParseAsync(string value, VolteContext _)
 => UnixHelper.TryParseNamedArguments(value, out var result)
     ? Success(result.Parsed)
     : Failure(result.Error.Message);
Ejemplo n.º 6
0
 ValueTask IPlatformService.RunShellAsync(string script, bool admin) => UnixHelper.RunShellAsync(script, admin);
        public LoginResult Login([FromBody] LoginRequest request)
        {
            LoginResult response = new LoginResult();

            if (request.UserName == "admin" && request.Password == "123456")
            {
                //初始化payload
                AuthInfo info = new AuthInfo {
                    UserName = "******", Roles = new List <string> {
                        "Admin", "Manager"
                    }, IsAdmin = true
                };


                Dictionary <String, Object> claims = new Dictionary <String, Object>();
                //JWT的签发者
                claims.Add("iss", "www.baidu.com");
                claims.Add("role", "admin,manager");
                //定义签发的对象 比如用户ID
                claims.Add("sub", "2008050260");
                //签发时间
                claims.Add("iat", UnixHelper.GetTimeStamp(DateTime.Now).ToString());
                //过期时间  默认延长15分钟
                claims.Add("exp", UnixHelper.GetTimeStamp(DateTime.Now.AddMinutes(1)).ToString());


                try
                {
                    const string secret = "No one can stand in the way of the Rejuvenation of the Chinese people!";
                    //初始化jwt算法对象
                    IJwtAlgorithm algorithm = new HMACSHA256Algorithm();   //除了256  还有512   318
                    //初始化序列化对象
                    IJsonSerializer serializer = new JsonNetSerializer();
                    //初始化urlencode对象
                    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                    //定义jwtEncode对象
                    IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
                    //生成token值
                    var token = encoder.Encode(claims, info, secret);
                    //生成token的例子:

                    /*第一个.号前字符串称之为header   base64解码后的明文为:{"typ":"JWT","alg":"HS256"}
                     *第二个.号前字符串称之为payload,可自定义一些非敏感信息  base64解码后的明文为:{"UserName":"******","Roles":["Admin","Manager"],"IsAdmin":true}
                     * 第三部分为验签部分 组成方式是:
                     *   HMACSHA256(
                     *              base64UrlEncode(header) + "." +
                     *              base64UrlEncode(payload),
                     *              SECREATE_KEY
                     *              )
                     */
                    response.Message = "请求成功";
                    response.Code    = 10000;
                    response.Token   = token;
                    response.Time    = DateTime.Now.ToString();
                }
                catch {
                }
            }
            else
            {
                response.Message = "用户名或密码错误";
                response.Code    = 10001;
                response.Token   = "";
                response.Time    = DateTime.Now.ToString();
            }

            return(response);
        }
Ejemplo n.º 8
0
        public async Task <IActionResult> Browse(string?path, int offset = 0, int count = 50)
        {
            var osUser = _configuration.GetSection("OsUser")["OsUsername"];

            if (string.IsNullOrEmpty(path) ||
                !UnixHelper.HasAccess(osUser,
                                      _fileService.RetrieveAbsoluteFromSystemPath(path)))
            {
                path = Path.DirectorySeparatorChar.ToString();
            }

            var contents = GetContents(path);

            ViewData["path"]      = path;
            ViewData["returnUrl"] = UnixHelper.GetParent(path);
            var lrmv = new FileResultViewModel();

            if (null == contents)
            {
                ReturnMessage = "Something went wrong...";
                return(View(lrmv));
            }

            if (!contents.Exists)
            {
                ReturnMessage = "The resource doesn't exist on the filesystem.";
                return(View(lrmv));
            }

            lrmv.Contents     = contents;
            lrmv.ContentsList = contents.ToList();

            await lrmv.SortContents();

            var fileInfosList = lrmv.ContentsList;

            var pageCount = fileInfosList.Count / count;

            SetPagingParams(offset, count, pageCount);

            Set("Offset", offset.ToString(), 3600);
            Set("Count", count.ToString(), 3600);
            Set("PageCount", pageCount.ToString(), 3600);

            if (fileInfosList.Count > count)
            {
                lrmv.ApplyPaging(offset, count);
            }

            if (!HttpContext.User.IsInRole("Admin"))
            {
                try
                {
                    lrmv.ApplyAcl(osUser);
                }
                catch (InvalidOperationException ex)
                {
                    Log.Error(ex, "StorageController#Browse");
                }
            }

            var fileInfo = _fileService.RetrieveFileInfoFromSystemPath(path);

            if (fileInfo.Exists &&
                !fileInfo.IsDirectory)
            {
                return(RedirectToAction(nameof(Download), new { @id = fileInfo.Name, @z = true }));
            }

            return(View(lrmv));
        }