示例#1
0
        /// <summary>
        /// 获取Token
        /// </summary>
        /// <param name="AppId">分配的应用ID</param>
        /// <param name="AppKey">分配的应用密钥</param>
        /// <returns></returns>
        public static ActionResultVM GetToken(string AppId, string AppKey)
        {
            var vm = new ActionResultVM();

            try
            {
                using var db = new SQLiteConnection(SQLiteConn);
                db.CreateTable <SysKey>();
                var sk = db.Table <SysKey>().FirstOrDefault(x => x.SkAppId == AppId && x.SkAppKey == AppKey);
                if (sk != null)
                {
                    sk.SkToken           = Core.CalcTo.MD5(Core.UniqueTo.LongId().ToString());
                    sk.SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired"));

                    int num = db.Update(sk);
                    vm.Data = sk;
                    vm.Set(num > 0);
                }
                else
                {
                    vm.Set(ARTag.unauthorized);
                }
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#2
0
 /// <summary>
 /// 只读(1分钟后生效,为初始化数据预留时间)
 /// </summary>
 public static void IsReadOnly()
 {
     if (GlobalTo.GetValue <bool>("ReadOnly") && Process.GetCurrentProcess().StartTime.AddMinutes(1) < DateTime.Now)
     {
         throw new Exception("The database is read-only");
     }
 }
示例#3
0
        /// <summary>
        /// 链接
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string AutoLink(string path = "")
        {
            var isbh = Core.CacheTo.Get(GlobalTo.GetValue("Common:BuildHtmlKey")) as bool? ?? false;
            var hp   = isbh ? "" : "/home";

            return(hp + path);
        }
示例#4
0
        /// <summary>
        /// 获取Token
        /// </summary>
        /// <param name="AppId">分配的应用ID</param>
        /// <param name="AppKey">分配的应用密钥</param>
        /// <returns></returns>
        public static ActionResultVM GetToken(string AppId, string AppKey)
        {
            var vm = new ActionResultVM();

            try
            {
                using var db = new SQLiteConnection(SQLiteConn);
                var sk = db.Table <SysApp>().FirstOrDefault(x => x.AppId == AppId && x.AppKey == AppKey);
                if (sk != null)
                {
                    sk.Token           = NewToken();
                    sk.TokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired"));

                    int num = db.Update(sk);
                    vm.Data = new
                    {
                        sk.Token,
                        sk.TokenExpireTime
                    };
                    vm.Set(num > 0);
                }
                else
                {
                    vm.Set(ARTag.unauthorized);
                }
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#5
0
        public string AboutServerStatus()
        {
            string url    = GlobalTo.GetValue("ServiceApi:ServiceInfo");
            var    result = Core.HttpTo.Get(url);

            return(result);
        }
示例#6
0
        /// <summary>
        /// 配置连接字符串
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                switch (TDB)
                {
                case TypeDB.MySQL:
                    optionsBuilder.UseMySql(GlobalTo.GetValue("ConnectionStrings:MySQLConn"));
                    break;

                case TypeDB.SQLite:
                    optionsBuilder.UseSqlite(GlobalTo.GetValue("ConnectionStrings:SQLiteConn"));
                    break;

                case TypeDB.InMemory:
                    optionsBuilder.UseInMemoryDatabase(GlobalTo.GetValue("ConnectionStrings:InMemoryConn"));
                    break;

                case TypeDB.SQLServer:
                    optionsBuilder.UseSqlServer(GlobalTo.GetValue("ConnectionStrings:SQLServerConn"), options =>
                    {
                        //启用 row_number 分页 (兼容2005、2008)
                        //options.UseRowNumberForPaging();
                    });
                    break;

                case TypeDB.PostgreSQL:
                    optionsBuilder.UseNpgsql(GlobalTo.GetValue("ConnectionStrings:PostgreSQLConn"));
                    break;
                }

                //注册日志(修改日志等级为Information,可查看执行的SQL语句)
                optionsBuilder.UseLoggerFactory(LoggerFactory);
            }
        }
示例#7
0
        public ActionResultVM GetAppList(int pageNumber = 1, int pageSize = 20, string password = "******")
        {
            var vm = new ActionResultVM();

            try
            {
                if (GlobalTo.GetValue <bool>("Safe:IsDev"))
                {
                    if (string.IsNullOrWhiteSpace(password) || password != GlobalTo.GetValue("Safe:CreateAppPassword"))
                    {
                        vm.Set(ARTag.unauthorized);
                        vm.Msg = "密码错误";
                    }
                    else
                    {
                        vm = FileServerService.GetAppList(pageNumber, pageSize);
                    }
                }
                else
                {
                    vm.Set(ARTag.refuse);
                }
            }
            catch (Exception ex)
            {
                vm.Set(ex);
                Core.ConsoleTo.Log(ex);
            }

            return(vm);
        }
示例#8
0
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="ToMail">送达邮件地址</param>
        /// <param name="Title">标题</param>
        /// <param name="Content">内容</param>
        /// <returns></returns>
        public static ActionResultVM Send(string ToMail, string Title, string Content)
        {
            var vm = new ActionResultVM();

            try
            {
                var message = new MimeMessage();
                message.From.Add(new MailboxAddress(GlobalTo.GetValue("MailKit:FromAddress")));
                message.To.Add(new MailboxAddress(ToMail));
                message.Subject = Title;
                message.Body    = new BodyBuilder()
                {
                    HtmlBody = Content
                }.ToMessageBody();

                using var client = new SmtpClient();
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                client.Connect(GlobalTo.GetValue("MailKit:Host"), GlobalTo.GetValue <int>("MailKit:Port"), true);
                client.Authenticate(GlobalTo.GetValue("MailKit:Auth:UserName"), GlobalTo.GetValue("MailKit:Auth:Password"));
                client.Send(message);
                client.Disconnect(true);

                vm.Set(ARTag.success);
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#9
0
            public void OnActionExecuting(ActionExecutingContext context)
            {
                var an = GlobalTo.GetValue("AdminName");

                bool isv;

                //cookie 授权已登录
                if (context.HttpContext.User.Identity.IsAuthenticated)
                {
                    var uinfo = Application.CommonService.GetLoginUserInfo(context.HttpContext);
                    isv = uinfo.UserName == an;
                }
                else
                {
                    var token = context.HttpContext.Request.Headers["Authorization"].ToString();
                    var mo    = Application.CommonService.TokenValid(token);
                    isv = mo?.UserName == an;
                }

                if (!isv)
                {
                    context.Result = new ContentResult()
                    {
                        Content    = "unauthorized",
                        StatusCode = 401
                    };
                }
            }
示例#10
0
        public ActionResultVM GetToken(string AppId, string AppKey)
        {
            var vm = new ActionResultVM();

            try
            {
                if (string.IsNullOrWhiteSpace(AppId) || string.IsNullOrWhiteSpace(AppKey))
                {
                    vm.Set(ARTag.lack);
                    vm.Msg = "参数缺失";
                }
                else
                {
                    if (!(Core.CacheTo.Get(AppKey) is ActionResultVM cvm))
                    {
                        vm = FileServerService.GetToken(AppId, AppKey);

                        if (vm.Code == 200)
                        {
                            //Token缓存
                            Core.CacheTo.Set(AppKey, vm, GlobalTo.GetValue <int>("Safe:TokenCache"), false);
                        }
                    }
                    else
                    {
                        vm = cvm;
                    }
                }
示例#11
0
        public ActionResultVM CreateApp(string password)
        {
            var vm = new ActionResultVM();

            try
            {
                if (GlobalTo.GetValue <bool>("Safe:IsDev"))
                {
                    if (!string.IsNullOrWhiteSpace(password) && password == GlobalTo.GetValue("Safe:CreateAppPassword"))
                    {
                        vm = FileServerService.CreateApp();
                    }
                    else
                    {
                        vm.Set(ARTag.unauthorized);
                        vm.Msg = "密码错误";
                    }
                }
                else
                {
                    vm.Set(ARTag.refuse);
                }
            }
            catch (Exception ex)
            {
                vm.Set(ex);
                Core.ConsoleTo.Log(ex);
            }

            return(vm);
        }
示例#12
0
        public SharedResultVM UpdateUserPhoto(string type, string source)
        {
            var vm = new SharedResultVM();

            try
            {
                vm = Apps.LoginService.CompleteInfoValid(HttpContext);
                if (vm.Code == 200)
                {
                    var uinfo = Apps.LoginService.Get(HttpContext);

                    //物理根路径
                    var prp   = GlobalTo.GetValue("StaticResource:PhysicalRootPath").Replace("~", GlobalTo.ContentRootPath);
                    var ppath = PathTo.Combine(prp, GlobalTo.GetValue("StaticResource:AvatarPath"));

                    if (!Directory.Exists(ppath))
                    {
                        Directory.CreateDirectory(ppath);
                    }

                    if (string.IsNullOrWhiteSpace(uinfo.UserPhoto))
                    {
                        uinfo.UserPhoto = UniqueTo.LongId() + ".jpg";
                    }
                    var upname = uinfo.UserPhoto.Split('?')[0];
                    var npnew  = upname + "?" + DateTime.Now.ToTimestamp();

                    switch (type)
                    {
                    case "file":
                    {
                        source = source[(source.LastIndexOf(",") + 1)..];
示例#13
0
        /// <summary>
        /// 创建App
        /// </summary>
        /// <param name="owner">用户,唯一,文件夹名</param>
        /// <returns></returns>
        public static ActionResultVM CreateApp(string owner)
        {
            var vm = new ActionResultVM();

            try
            {
                using var db = new SQLiteConnection(SQLiteConn);

                var mo = new SysKey()
                {
                    SkAppId           = Core.UniqueTo.LongId().ToString(),
                    SkAppKey          = Core.UniqueTo.LongId().ToString() + Core.UniqueTo.LongId().ToString(),
                    SkCreateTime      = DateTime.Now,
                    SkOwner           = owner,
                    SkToken           = NewToken(),
                    SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")),
                    SkRemark          = "通过接口创建"
                };

                int num = db.Insert(mo);

                vm.Set(num > 0);
                vm.Data = mo;
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#14
0
        /// <summary>
        /// 验证Token
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public static Domain.UserInfo TokenValid(string token)
        {
            Domain.UserInfo mo = null;

            try
            {
                if (!string.IsNullOrWhiteSpace(token))
                {
                    var key = GlobalTo.GetValue("VerifyCode:Key");

                    var jo = Core.CalcTo.AESDecrypt(token, key).ToJObject();

                    if (DateTime.Now.ToTimestamp() < long.Parse(jo["expired"].ToString()))
                    {
                        mo = jo["mo"].ToString().ToEntity <Domain.UserInfo>();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(mo);
        }
示例#15
0
            /// <summary>
            /// 部署
            /// </summary>
            public void Deploy()
            {
                //根目录
                string domainPath = GlobalTo.GetValue("WebHook:GitHub:DomainRootPath");

                //子域名&文件夹
                string subdomain = PrepositoryName;

                if (!string.IsNullOrWhiteSpace(PhomePage))
                {
                    subdomain = PhomePage.Replace("//", "^").Split('^')[1].Split('.')[0];
                }

                string path = domainPath + subdomain;

                //异步
                ThreadPool.QueueUserWorkItem(callBack =>
                {
                    if (!Directory.Exists(path))
                    {
                        string cmd = CmdFor.GitClone(PgitUrl, path);
                        Core.CmdTo.Shell(cmd);
                    }
                    else
                    {
                        string cmd = CmdFor.GitPull(path);
                        Core.CmdTo.Shell(cmd);
                    }
                });
            }
示例#16
0
        /// <summary>
        /// 创建App
        /// </summary>
        /// <returns></returns>
        public static ActionResultVM CreateApp()
        {
            var vm = new ActionResultVM();

            try
            {
                using var db = new SQLiteConnection(SQLiteConn);
                db.CreateTable <SysKey>();

                var mo = new SysKey()
                {
                    SkAppId           = Core.UniqueTo.LongId().ToString(),
                    SkAppKey          = Core.UniqueTo.LongId().ToString() + Core.UniqueTo.LongId().ToString(),
                    SkCreateTime      = DateTime.Now,
                    SkName            = "默认",
                    SkToken           = Core.CalcTo.MD5(Core.UniqueTo.LongId().ToString()),
                    SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")),
                    SkRemark          = "系统自动生成"
                };

                int num = db.Insert(mo);

                vm.Set(num > 0);
                vm.Data = mo;
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#17
0
        /// <summary>
        /// 备份数据库
        /// </summary>
        public static ActionResultVM BackupDataBase()
        {
            var vm = new ActionResultVM();

            try
            {
                var listMsg = new List <object>();

                var kp = "Work:BackupDataBase:SQLServer:";

                //执行命令
                using var db   = new ContextBase();
                using var conn = db.Database.GetDbConnection();
                conn.Open();
                var connCmd = conn.CreateCommand();
                connCmd.CommandText = GlobalTo.GetValue(kp + "cmd");
                int en = connCmd.ExecuteNonQuery();

                listMsg.Add(en);

                vm.Set(ARTag.success);
                vm.data = listMsg;
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#18
0
 void IJob.Execute()
 {
     //启用任务
     if (GlobalTo.GetValue <bool>("Task:Enable"))
     {
         SmsNotSent();
     }
 }
示例#19
0
        public SharedResultVM ClearTmp()
        {
            return(SharedResultVM.Try(vm =>
            {
                string directoryPath = PathTo.Combine(GlobalTo.WebRootPath, GlobalTo.GetValue("StaticResource:TmpDir"));

                vm.Log.Add($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 清理临时目录:{directoryPath}");

                if (!Directory.Exists(directoryPath))
                {
                    vm.Set(SharedEnum.RTag.lack);
                    vm.Msg = "文件路径不存在";
                }
                else
                {
                    int delFileCount = 0;
                    int delFolderCount = 0;

                    //删除文件
                    var listFile = Directory.GetFiles(directoryPath).ToList();
                    foreach (var path in listFile)
                    {
                        if (!path.Contains("README"))
                        {
                            try
                            {
                                System.IO.File.Delete(path);
                                delFileCount++;
                            }
                            catch (Exception ex)
                            {
                                vm.Log.Add($"删除文件异常:{ex.Message}");
                            }
                        }
                    }

                    //删除文件夹
                    var listFolder = Directory.GetDirectories(directoryPath).ToList();
                    foreach (var path in listFolder)
                    {
                        try
                        {
                            Directory.Delete(path, true);
                            delFolderCount++;
                        }
                        catch (Exception ex)
                        {
                            vm.Log.Add($"删除文件夹异常:{ex.Message}");
                        }
                    }

                    vm.Log.Insert(0, $"删除文件{delFileCount}个,删除{delFolderCount}个文件夹");
                    vm.Set(SharedEnum.RTag.success);
                }

                return vm;
            }));
        }
示例#20
0
文件: Startup.cs 项目: netnr/blog
        public Startup(IConfiguration configuration, IHostEnvironment env)
        {
            GlobalTo.Configuration   = configuration;
            GlobalTo.HostEnvironment = env;

            SharedReady.ReadyTo.EncodingReg();
            SharedReady.ReadyTo.LegacyTimestamp();

            //结巴词典路径
            var jbPath = PathTo.Combine(GlobalTo.ContentRootPath, "db/jieba");

            if (!Directory.Exists(jbPath))
            {
                Directory.CreateDirectory(jbPath);
                try
                {
                    var dhost = "https://raw.githubusercontent.com/anderscui/jieba.NET/master/src/Segmenter/Resources/";
                    "prob_trans.json,prob_emit.json,idf.txt,pos_prob_start.json,pos_prob_trans.json,pos_prob_emit.json,char_state_tab.json".Split(',').ToList().ForEach(file =>
                    {
                        var fullPath = PathTo.Combine(jbPath, file);
                        HttpTo.DownloadSave(HttpTo.HWRequest(dhost + file), fullPath);
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
            JiebaNet.Segmenter.ConfigManager.ConfigFileBaseDir = jbPath;

            #region 第三方登录
            new List <Type>
            {
                typeof(QQConfig),
                typeof(WeChatConfig),
                typeof(WeiboConfig),
                typeof(GitHubConfig),
                typeof(GiteeConfig),
                typeof(TaoBaoConfig),
                typeof(MicroSoftConfig),
                typeof(DingTalkConfig),
                typeof(GoogleConfig),
                typeof(AliPayConfig),
                typeof(StackOverflowConfig)
            }.ForEach(lc =>
            {
                var fields = lc.GetFields();
                foreach (var field in fields)
                {
                    if (!field.Name.StartsWith("API_"))
                    {
                        var cv = GlobalTo.GetValue($"OAuthLogin:{lc.Name.Replace("Config", "")}:{field.Name}");
                        field.SetValue(lc, cv);
                    }
                }
            });
            #endregion
        }
示例#21
0
        /// <summary>
        /// 信息完整
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public static SharedResultVM CompleteInfoValid(HttpContext context)
        {
            var vm = new SharedResultVM();

            if (!context.User.Identity.IsAuthenticated)
            {
                vm.Log.Add("先登录");
            }
            else
            {
                if (GlobalTo.GetValue <bool>("Common:CompleteInfo"))
                {
                    var uinfo = Get(context);

                    if (string.IsNullOrWhiteSpace(uinfo.Nickname))
                    {
                        vm.Log.Add("填写昵称");
                    }

                    using var db = Data.ContextBaseFactory.CreateDbContext();
                    var umo = db.UserInfo.Find(uinfo.UserId);

                    if (umo.UserId != GlobalTo.GetValue <int>("Common:AdminId"))
                    {
                        if (umo.UserMailValid != 1)
                        {
                            vm.Log.Add("验证邮箱");
                        }

                        if (string.IsNullOrWhiteSpace(umo.UserPhone) || umo.UserPhone.Trim().Length != 11)
                        {
                            vm.Log.Add("填写手机号码");
                        }

                        if (string.IsNullOrWhiteSpace(umo.OpenId1) &&
                            string.IsNullOrWhiteSpace(umo.OpenId2) &&
                            string.IsNullOrWhiteSpace(umo.OpenId3) &&
                            string.IsNullOrWhiteSpace(umo.OpenId4) &&
                            string.IsNullOrWhiteSpace(umo.OpenId5) &&
                            string.IsNullOrWhiteSpace(umo.OpenId6))
                        {
                            vm.Log.Add("绑定一项授权关联");
                        }

                        if (umo.UserCreateTime.Value.AddDays(15) > DateTime.Now)
                        {
                            vm.Log.Add("新注册用户需 15 天以后才能操作");
                        }
                    }
                }
            }

            vm.Set(vm.Log.Count == 0);
            vm.Msg = string.Join("、", vm.Log);

            return(vm);
        }
示例#22
0
        /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //初始化库
            using var db = new SQLite.SQLiteConnection(Application.FileServerService.SQLiteConn);
            db.CreateTable <Model.SysApp>();
            db.CreateTable <Model.FileRecord>();

            //配置swagger
            app.UseSwagger().UseSwaggerUI(c =>
            {
                c.DocumentTitle = "FileServer API";
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "FileServer API");
                c.InjectStylesheet("/Home/SwaggerCustomStyle");
            });

            //静态资源允许跨域
            app.UseStaticFiles(new StaticFileOptions()
            {
                OnPrepareResponse = (x) =>
                {
                    x.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                },
                ServeUnknownFileTypes = true
            });

            //目录浏览
            string vrootdir = GlobalTo.GetValue("StaticResource:RootDir");
            string prootdir = Fast.PathTo.Combine(GlobalTo.WebRootPath, vrootdir);

            if (!System.IO.Directory.Exists(prootdir))
            {
                System.IO.Directory.CreateDirectory(prootdir);
            }
            app.UseFileServer(new FileServerOptions()
            {
                FileProvider            = new PhysicalFileProvider(prootdir),
                RequestPath             = new Microsoft.AspNetCore.Http.PathString(vrootdir),
                EnableDirectoryBrowsing = GlobalTo.GetValue <bool>("Safe:EnableDirectoryBrowsing"),
                EnableDefaultFiles      = false
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
示例#23
0
        public ActionResultVM Token([FromBody] ChatLoginVM chatLogin)
        {
            var vm = new ActionResultVM();

            try
            {
                if (string.IsNullOrWhiteSpace(chatLogin.UserName) || string.IsNullOrWhiteSpace(chatLogin.Password))
                {
                    vm.Set(ARTag.invalid);
                    vm.Msg = "账号或密码不能为空";
                    return(vm);
                }

                var pw = Core.CalcTo.MD5(chatLogin.Password);
                var uo = db.NChatUser.FirstOrDefault(x => x.CuUserName == chatLogin.UserName && x.CuPassword == pw);
                if (uo == null)
                {
                    vm.Set(ARTag.unauthorized);
                    vm.Msg = "账号或密码错误";
                    return(vm);
                }

                //token带的用户信息
                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.NameIdentifier, uo.CuUserId),
                    new Claim(ClaimTypes.Name, uo.CuUserName),
                    new Claim(ClaimTypes.UserData, new{
                        chatLogin.Device,
                        chatLogin.Sign
                    }.ToJson())
                };

                var expireDate = GlobalTo.GetValue <int>("TokenManagement:AccessExpiration");

                var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(GlobalTo.GetValue("TokenManagement:Secret")));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                var jwtToken    = new JwtSecurityToken(GlobalTo.GetValue("TokenManagement:Issuer"), GlobalTo.GetValue("TokenManagement:Audience"), claims, expires: DateTime.Now.AddSeconds(expireDate), signingCredentials: credentials);

                vm.Data = new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(jwtToken),
                    expireDate,
                    userId    = uo.CuUserId,
                    userName  = uo.CuUserName,
                    userPhoto = uo.CuUserPhoto
                };
                vm.Set(ARTag.success);
            }
            catch (Exception ex)
            {
                vm.Set(ex);
            }

            return(vm);
        }
示例#24
0
        public IActionResult UI()
        {
            var dkui = GlobalTo.GetValue("DataKitUI");

            string crContent;

            try
            {
                //非完整路径,相对项目路径,即 UI 静态页面放置到项目资源目录下
                if (!dkui.StartsWith("http"))
                {
                    var currHost = $"{Request.Scheme}://{Request.Host}{Request.PathBase}";
                    if (dkui.StartsWith("/") && currHost.EndsWith("/"))
                    {
                        currHost = currHost.TrimEnd('/');
                    }
                    dkui = currHost + dkui;
                }

                //优先取缓存
                var cacheDkui = Core.CacheTo.Get("DataKitUI") as string;
                if (string.IsNullOrWhiteSpace(cacheDkui))
                {
                    crContent = Core.HttpTo.Get(dkui);
                    Core.CacheTo.Set("DataKitUI", crContent);
                }
                else
                {
                    crContent = cacheDkui;

                    System.Threading.ThreadPool.QueueUserWorkItem(_ =>
                    {
                        try
                        {
                            Core.CacheTo.Set("DataKitUI", Core.HttpTo.Get(dkui));
                        }
                        catch (Exception)
                        {
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                crContent = "请求 UI 地址异常,错误信息:" + ex.Message;
            }

            return(new ContentResult()
            {
                StatusCode = 200,
                ContentType = "text/html",
                Content = crContent
            });
        }
示例#25
0
        /// <summary>
        /// 生成Token
        /// </summary>
        /// <param name="mo">授权用户信息</param>
        /// <returns></returns>
        public static string TokenMake(LoginUserVM mo)
        {
            var key = GlobalTo.GetValue("VerifyCode:Key");

            var token = Core.CalcTo.EnDES(new
            {
                mo,
                expired = DateTime.Now.AddDays(10).ToTimestamp()
            }.ToJson(), key);

            return(token);
        }
示例#26
0
        /// dotnet Netnr.Blog.Web.dll --urls "https://*:50"
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            //配置Kestrel接收文件
            webBuilder.ConfigureKestrel((context, options) =>
            {
                options.Limits.MaxRequestBodySize = GlobalTo.GetValue <int>("StaticResource:MaxSize") * 1024 * 1024;
            });

            webBuilder.UseStartup <Startup>();
        });
示例#27
0
文件: Startup.cs 项目: WuJiBase/np
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //配置swagger
            app.UseSwagger().UseSwaggerUI(c =>
            {
                c.DocumentTitle = $"{GlobalTo.GetValue("Common:EnglishName")} API";
                c.SwaggerEndpoint("/swagger/v1/swagger.json", c.DocumentTitle);
            });

            //默认起始页index.html
            DefaultFilesOptions options = new DefaultFilesOptions();

            options.DefaultFileNames.Add("index.html");
            app.UseDefaultFiles(options);

            //静态资源允许跨域
            app.UseStaticFiles(new StaticFileOptions()
            {
                OnPrepareResponse = (x) =>
                {
                    x.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                }
            });

            app.UseRouting();

            //授权访问
            app.UseAuthentication();
            app.UseAuthorization();

            //session
            app.UseSession();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapControllerRoute("U", "{controller=U}/{id}", new { action = "index" });
                endpoints.MapControllerRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute("Code", "{area:exists}/{controller=Code}/{id?}/{sid?}", new { action = "index" });
                endpoints.MapControllerRoute("Raw", "{area:exists}/{controller=Raw}/{id?}", new { action = "index" });
                endpoints.MapControllerRoute("User", "{area:exists}/{controller=User}/{id?}", new { action = "index" });
            });
        }
示例#28
0
            public void OnAuthorization(AuthorizationFilterContext context)
            {
                //验证登录标记是最新,不是则注销登录(即同一用户不允许同时在线,按缓存时间生效)
                if (context.HttpContext.User.Identity.IsAuthenticated && GlobalTo.GetValue <bool>("SingleSignOn"))
                {
                    var uinfo = new Application.UserAuthService(context.HttpContext).Get();

                    string ServerSign = HelpFuncTo.GetLogonSign(uinfo.UserId);
                    if (uinfo.UserSign != ServerSign)
                    {
                        context.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                    }
                }
            }
示例#29
0
        public IActionResult Index()
        {
            if (db.Database.IsInMemory())
            {
                return(Content("不支持内存数据库,请切换其它数据库"));
            }

            if (Enum.TryParse(GlobalTo.GetValue("TypeDB"), true, out TypeDB tdb))
            {
                ViewData["dbi"] = (int)tdb;
            }

            return(View());
        }
示例#30
0
        /// <summary>
        /// 创建 DbContextOptionsBuilder
        /// </summary>
        /// <returns></returns>
        public static DbContextOptionsBuilder <ContextBase> CreateDbContextOptionsBuilder(DbContextOptionsBuilder builder = null)
        {
            if (builder == null)
            {
                builder = new DbContextOptionsBuilder <ContextBase>();
            }

            if (!builder.IsConfigured)
            {
                System.Enum.TryParse(GlobalTo.GetValue("TypeDB"), true, out GlobalTo.TDB);

                var conn = GlobalTo.GetConn();

                switch (GlobalTo.TDB)
                {
                case TypeDB.MySQL:
                    builder.UseMySql(conn);
                    break;

                case TypeDB.SQLite:
                    builder.UseSqlite(conn.Replace("~", GlobalTo.ContentRootPath));
                    break;

                case TypeDB.SQLServer:
                    builder.UseSqlServer(conn, options =>
                    {
                        //启用 row_number 分页 (兼容2005、2008)
                        //options.UseRowNumberForPaging();
                    });
                    break;

                case TypeDB.PostgreSQL:
                {
                    builder.UseNpgsql(conn);
                }
                break;

                case TypeDB.InMemory:
                    builder.UseInMemoryDatabase(conn);
                    break;
                }

                //注册日志(修改日志等级为Information,可查看执行的SQL语句)
                builder.EnableSensitiveDataLogging();
                builder.UseLoggerFactory(LoggerFactory);
            }

            return(builder as DbContextOptionsBuilder <ContextBase>);
        }