class User(db.Document): query_class = UserQuery AUTH, ADMIN = 100, 200 name = db.StringField() email = db.StringField() password = db.StringField() photo = db.StringField(default='') following_count = db.IntField(default=0) follower_count = db.IntField(default=0) post_count = db.IntField(default=0) active = db.BoolField(default=True) role = db.EnumField(db.IntField(), AUTH, ADMIN, default=AUTH) @db.computed_field(db.DateTimeField()) def updated(self): return now @property def created_time(self): if self.has_id(): return self.mongo_id.generation_time def check_password(self, password): if self.password is None: return False return self.password == hash_str(password) class Permissions(object): def __init__(self, obj): self.obj = obj @cached_property def edit(self): return Permission(UserNeed(self.obj.pk)) & admin @cached_property def delete(self): return Permission(UserNeed(self.obj.pk)) & admin @cached_property def pk(self): return str(self.mongo_id) @cached_property def permissions(self): return self.Permissions(self) @cached_property def provides(self): needs = [RoleNeed('auth'), UserNeed(self.pk)] if self.is_admin: needs.append(RoleNeed('admin')) return needs @property def is_admin(self): return self.role >= self.ADMIN
class Event_Auto_Id(db.Document): ''' ID自增参照对象,每次调用`auto_id`后,得到`sequence_value`的值。然后更新`sequence_value`的值+1。 ''' meta = {'collection': 'event_id'} _id = db.StringField(required=False, primary_key=True, default='auto_id') sequence_value = db.IntField(default=0)
class Rule(db.Document): ''' 规则数据库:包含规则、类型、等级、描述、建议、添加时间、命中次数 ''' meta = {'collection': 'rules'} # _id =db.StringField(primary_key=True) # id = db.StringField(required=False,primary_key=False) rule = db.StringField(required=False) type = db.StringField(required=False) leave = db.StringField(required=False) des = db.StringField(required=False) suggestion = db.StringField(required=False) create_time = db.DateTimeField(required=False, default=datetime.now) hit_count = db.IntField(default=0)
class All_Result(db.Document): ''' 一次域名扫描后的结果:扫描时间、响应code、域名、任务id、事件列表 ''' meta = {'collection': 'all_result'} time = db.DateTimeField(default=datetime.now) code = db.IntField() domain = db.StringField() jobid = db.StringField() keyword_data = db.ListField() jump_url = db.ListField() events_list = db.ListField() websousec = db.StringField() img = db.StringField() message = db.StringField()
class Event_Spider(db.Document): ''' 爬虫匹配到的事件数据库:自增长ID、自定义ID、域名、任务ID、命中的规则、来源、首次发现时间、最新发现事件、 审核详情、审核状态、快照 ''' meta = {'collection': 'sec_event'} _id = db.IntField(required=False, primary_key=True) id = db.StringField(required=False) domain = db.StringField(required=False) jobid = db.StringField(required=False) event = db.ReferenceField(Rule) _from = db.StringField(required=False) first_time = db.DateTimeField(default=datetime.now) last_time = db.ListField(required=False) audit = db.ListField(required=False) status = db.StringField(required=False) img = db.StringField(required=False)
class Event_Search_Engine(db.Document): ''' 搜索引擎事件数据库:自增长ID、自定义ID、域名、任务ID、命中的规则、来源、首次发现时间、最新发现事件、 审核详情、审核状态、快照 ''' meta = {'collection': 'sec_event_test'} _id = db.IntField(required=False, default='num') id = db.StringField(required=False) domain = db.StringField(required=False) jobid = db.StringField(required=False) event = db.StringField(required=False) keyword = db.StringField(required=False) _from = db.StringField(required=False) first_time = db.DateTimeField(default=datetime.now) last_time = db.ListField(required=False) audit = db.ListField(required=False) status = db.StringField(required=False) suggestion = db.StringField(required=False) img = db.StringField(required=False)