public static bool Exists(this HttpContext HttpContext, PortableRecipesContext _context)
 {
     if (HttpContext.Request.Cookies.ContainsKey("PortableRecipesContext"))
     {
         var old_cookie  = HttpContext.Request.Cookies["PortableRecipesContext"];
         var old_session = _context.Session.FirstOrDefault(s => s.CookieName == old_cookie);
         return(old_session != null);
     }
     return(false);
 }
        public static void Deleted <U>(this HttpContext HttpContext, PortableRecipesContext _context, string entity_name, U entity) where U : IEntity
        {
            var now = DateTime.Now;

            _context.Session.RemoveRange(
                from s in _context.Session
                where (s.LoggedEntityId == entity.Id && s.LoggedEntityName == entity_name) ||
                (s.LoggedEntityId == null || s.LoggedEntityName == null) ||
                (now - s.CreatedAt).TotalDays >= 30
                select s);
            _context.SaveChanges();
        }
        public static T Get <T>(this HttpContext HttpContext, PortableRecipesContext _context)
        {
            if (!HttpContext.Request.Cookies.ContainsKey("PortableRecipesContext"))
            {
                return(default(T));
            }
            var old_cookie  = HttpContext.Request.Cookies["PortableRecipesContext"];
            var old_session = _context.Session.FirstOrDefault(s => s.CookieName == old_cookie);

            if (old_session != null)
            {
                return(JsonConvert.DeserializeObject <T>(old_session.Content));
            }
            return(default(T));
        }
        public static void Set <T>(this HttpContext HttpContext, PortableRecipesContext _context, T payload)
        {
            var cookie  = HttpContext.Request.Cookies["PortableRecipesContext"];
            var session = _context.Session.FirstOrDefault(s => s.CookieName == cookie);

            if (session != null)
            {
                session.Content = JsonConvert.SerializeObject(payload);
            }
            else
            {
                session = new Session()
                {
                    CookieName = cookie, Content = JsonConvert.SerializeObject(payload), CreatedAt = DateTime.Now
                };
                _context.Session.Add(session);
            }
            _context.SaveChanges();
        }
 public static void Logout(this HttpContext HttpContext, PortableRecipesContext _context)
 {
     if (HttpContext.Request.Cookies.ContainsKey("PortableRecipesContext"))
     {
         var old_cookie  = HttpContext.Request.Cookies["PortableRecipesContext"];
         var old_session = _context.Session.FirstOrDefault(s => s.CookieName == old_cookie);
         if (old_session != null)
         {
             _context.Session.Remove(old_session);
             _context.SaveChanges();
             if (new Random().Next(100) < 10)
             {
                 var now       = DateTime.Now;
                 var to_remove = _context.Session.Where(s => now - s.CreatedAt > TimeSpan.FromDays(365)).ToList();
                 _context.Session.RemoveRange(to_remove);
                 _context.SaveChanges();
             }
         }
         HttpContext.Response.Cookies.Delete("PortableRecipesContext");
     }
 }
 public AmericanApiController(PortableRecipesContext context, IHostingEnvironment env, IOptions <MailOptions> mailOptionsAccessor)
 {
     _context     = context;
     _mailOptions = mailOptionsAccessor.Value;
     this.env     = env;
 }
 public KeepAliveApiController(PortableRecipesContext context, IOptions <MailOptions> mailOptionsAccessor)
 {
     _context     = context;
     _mailOptions = mailOptionsAccessor.Value;
 }
        public static void Login <T, U>(this HttpContext HttpContext, Microsoft.AspNetCore.Hosting.IHostingEnvironment env, PortableRecipesContext _context, string entity_name, U entity, T payload) where U : IEntity
        {
            HttpContext.Logout(_context);
            var now = DateTime.Now;

            _context.Session.RemoveRange(
                from s in _context.Session
                where (s.LoggedEntityId == entity.Id && s.LoggedEntityName == entity_name) ||
                (s.LoggedEntityId == null || s.LoggedEntityName == null) ||
                (now - s.CreatedAt).TotalDays >= 30
                select s);
            _context.SaveChanges();
            var random_id = PasswordHasher.RandomString;

            HttpContext.Response.Cookies.Append("PortableRecipesContext", random_id,
                                                new Microsoft.AspNetCore.Http.CookieOptions()
            {
                Expires  = DateTimeOffset.Now.AddDays(30),
                HttpOnly = true,
                Secure   = !env.IsDevelopment()
            });
            var new_session = new Session()
            {
                CookieName       = random_id,
                LoggedEntityId   = entity.Id,
                LoggedEntityName = entity_name,
                AdditionalInfo   = HttpContext.Connection.RemoteIpAddress.ToString(),
                Content          = JsonConvert.SerializeObject(payload),
                CreatedAt        = DateTime.Now
            };

            _context.Session.Add(new_session);
            _context.SaveChanges();
        }
示例#9
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IOptions <ApiOptions> apiOptionsAccessor, IHostingEnvironment env, ILoggerFactory loggerFactory, PortableRecipesContext dbContext, IAntiforgery antiforgery)
        {
            // loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddConsole(LogLevel.Error);

            Filters.RestrictToUserTypeAttribute.ApiToken = apiOptionsAccessor.Value.ApiToken;

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
                app.UseBrowserLink();
                PortableRecipesContextSeeds.Initialize(dbContext);
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                loggerFactory.AddNLog();
            }
            app.Use(async(context, next) =>
            {
                context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
                await next();
            });
            PortableRecipesContextSeeds.InitializePagesAndSingletons(dbContext);

            app.UseStaticFiles();

            // app.UseIdentity();

            app.UseSession();

            app.UseMvc(routes =>
            {
            });
        }
示例#10
0
 public CustomController(PortableRecipesContext context, IOptions <MailOptions> mailOptionsAccessor)
 {
     _context     = context;
     _mailOptions = mailOptionsAccessor.Value;
 }