コード例 #1
0
 public static DbSet <E> GetDbSet <E>(this Factory <E> factory, ScribsDbContext db) where E : Entity, new()
 {
     if (typeof(E) == typeof(User))
     {
         return(db.Users as DbSet <E>);
     }
     if (typeof(E) == typeof(Access))
     {
         return(db.Accesses as DbSet <E>);
     }
     if (typeof(E) == typeof(SheetTemplate))
     {
         return(db.SheetTemplates as DbSet <E>);
     }
     if (typeof(E) == typeof(SheetTemplateField))
     {
         return(db.SheetTemplateFields as DbSet <E>);
     }
     if (typeof(E) == typeof(Sheet))
     {
         return(db.Sheets as DbSet <E>);
     }
     if (typeof(E) == typeof(SheetField))
     {
         return(db.SheetFields as DbSet <E>);
     }
     throw new NotImplementedException();
 }
コード例 #2
0
        public static ClaimsPrincipal GetPrincipal(ScribsDbContext db, JwtSecurityToken jwtToken, out Access access)
        {
            access = null;
            try {
                var tokenHandler = new JwtSecurityTokenHandler();
                var claims       = jwtToken.Claims.ToList();
                var claim        = claims.Find(o => o.Type == "nameid");
                var user         = User.Factory.GetInstance(db, int.Parse(claim.Value));
                access = db.Accesses.FirstOrDefault(o => o.UserId == user.Id && o.Status == Status.Active);
                if (access == null)
                {
                    return(null);
                }
                var symmetricKey = Convert.FromBase64String(access.Secret);

                var validationParameters = new TokenValidationParameters()
                {
                    RequireExpirationTime = true,
                    ValidateIssuer        = false,
                    ValidateAudience      = false,
                    IssuerSigningKey      = new SymmetricSecurityKey(symmetricKey)
                };

                SecurityToken securityToken;
                var           principal = tokenHandler.ValidateToken(jwtToken.RawData, validationParameters, out securityToken);

                return(principal);
            } catch (Exception) {
                return(null);
            }
        }
コード例 #3
0
        public static string GenerateToken(ScribsDbContext db, User user, UserModel model)
        {
            var secretBase64 = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
            var secret       = Convert.FromBase64String(secretBase64);
            var tokenHandler = new JwtSecurityTokenHandler();

            var now             = DateTime.UtcNow;
            var tokenDescriptor = new SecurityTokenDescriptor {
                Subject = new ClaimsIdentity(new[] {
                    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                    new Claim(ClaimTypes.Name, user.Name.ToString()),
                    new Claim(ClaimTypes.Email, user.Mail.ToString())
                }),
                Expires            = now.AddMonths(1),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(secret), SecurityAlgorithms.HmacSha256Signature)
            };

            var stoken = tokenHandler.CreateToken(tokenDescriptor);
            var token  = tokenHandler.WriteToken(stoken);

            var access = new Access {
                Token  = token,
                Secret = secretBase64,
                User   = user,
                CTime  = DateTime.Now,
                MTime  = DateTime.Now
            };

            db.Accesses.Add(access);
            db.SaveChanges();

            return(token);
        }
コード例 #4
0
ファイル: Entity.cs プロジェクト: namafutatsu/scribsAPI
        public async Task <E> GetInstanceAsync(ScribsDbContext db, int id)
        {
            var set    = GetSet(db);
            var entity = await set.FindAsync(id);

            entity.db = db;
            return(entity);
        }
コード例 #5
0
ファイル: Entity.cs プロジェクト: namafutatsu/scribsAPI
        public E GetInstance(ScribsDbContext db, int id)
        {
            var set    = GetSet(db);
            var entity = set.Find(id);

            entity.db = db;
            return(entity);
        }
コード例 #6
0
ファイル: Entity.cs プロジェクト: namafutatsu/scribsAPI
        public E CreateInstance(ScribsDbContext db)
        {
            var entity = new E {
                db = db
            };

            GetSet(db).Add(entity);
            return(entity);
        }
コード例 #7
0
 public File(ScribsDbContext db, Project project, XElement xelement) : base(db, project, xelement)
 {
 }
コード例 #8
0
ファイル: Entity.cs プロジェクト: namafutatsu/scribsAPI
        public void Delete(ScribsDbContext db, E entity)
        {
            var set = GetSet(db);

            set.Remove(entity);
        }
コード例 #9
0
ファイル: Entity.cs プロジェクト: namafutatsu/scribsAPI
 DbSet <E> GetSet(ScribsDbContext db) => this.GetDbSet <E>(db);
コード例 #10
0
ファイル: Directory.cs プロジェクト: namafutatsu/scribsAPI
 public Directory(ScribsDbContext db, Project project, XElement xelement) : base(db, project, xelement)
 {
 }
コード例 #11
0
ファイル: Project.cs プロジェクト: namafutatsu/scribsAPI
 public Project(ScribsDbContext db, XElement xelement) : base(db, null, xelement) => throw new NotImplementedException();