Exemple #1
0
class Blog(db.Model):
    __tablename__ = 'blogs'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(256), index=True)
    body = db.Column(db.Text())
    timestamp = db.Column(db.DateTime, default=datetime.utcnow(), index=True)
    body_html = db.Column(db.Text())
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    looks = db.Column(db.BigInteger, default=0)

    comments = db.relationship('Comment', backref='blog', lazy='dynamic')
    imgs = db.relationship('BlogImgs', backref='blog', lazy='dynamic')

    def __repr__(self):
        return '<blog %r>' % self.title

    # 博客发表
    def upload_blog(self):
        db.session.add(self)
        db.session.commit()

    # 每浏览一次,浏览量自动加一
    def ping(self):
        self.looks += 1
        db.session.add(self)

    def delete_blog_imgs(self):
        for i in self.imgs:
            cos_class.delete_file(i.img_url)
            db.session.delete(i)
        cos_class.delete_file('/users/%s/blog_img/%s/' %
                              (self.author.username, self.id))

    #删除博客
    def delete_blog(self):
        for c in self.comments:
            db.session.delete(c)
        self.delete_blog_imgs()
        db.session.delete(self)
        db.session.commit()

    # 将博客内容自动生成html格式
    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        # 允许的标签
        allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code',\
                        'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul',
                        'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'img', 'span']
        # 允许的标签属性
        allowed_columns = {
            '*':
            ['class', 'id', 'style', 'background', 'title', 'width', 'height'],
            'a': ['href', 'rel'],
            'img': ['src', 'alt'],
        }
        target.body_html = bleach.clean(value,
                                        tags=allowed_tags,
                                        attributes=allowed_columns,
                                        strip=True)
Exemple #2
0
class Visualisation(db.Model):
  __tablename__ = 'visualisation'
  id = db.Column(db.Integer(), primary_key=True)
  
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  name = db.Column(db.Text())
  identifier = db.Column(db.String(128), unique=True)
  descr = db.Column(db.Text())
  data = db.Column(db.Text())
Exemple #3
0
class Region(db.Model):
  __tablename__ = 'region'
  
  id = db.Column(db.Integer(), primary_key=True)
  name = db.Column(db.String(255))
  slug = db.Column(db.String(255), unique=True)
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  osm_id = db.Column(db.Integer())
  geo_json = db.Column(db.Text())
  rgs = db.Column(db.String(255))
  region_level = db.Column(db.Integer())
  postalcode = db.Column(db.String(255))
  fulltext = db.Column(db.String(255))
  
  lat = db.Column(db.Numeric(precision=10,scale=7))
  lon = db.Column(db.Numeric(precision=10,scale=7))
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<Hoster %r>' % self.name
Exemple #4
0
class Region(db.Model):
  __tablename__ = 'region'
  
  id = db.Column(db.Integer(), primary_key=True)
  name = db.Column(db.String(255))
  slug = db.Column(db.String(255), unique=True)
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  osm_id = db.Column(db.Integer())
  geo_json = db.Column(db.Text())
  rgs = db.Column(db.String(255))
  region_level = db.Column(db.Integer())
  postalcode = db.Column(db.String(255))
  
  lat = db.Column(db.Numeric(precision=10,scale=7))
  lon = db.Column(db.Numeric(precision=10,scale=7))
  
  region_parent_id = db.Column(db.Integer, db.ForeignKey('region.id'))
  region_parent = db.relationship("Region", backref="region_children", remote_side=[id])
  service_sites = db.relationship("ServiceSite", backref="region", lazy='dynamic')
  # hosts as defined in Host
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<Hoster %r>' % self.name
Exemple #5
0
class Suggestion(db.Model):
  __tablename__ = 'suggestion'
  id = db.Column(db.Integer(), primary_key=True)
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  type = db.Column(db.String(128))
  suggestion = db.Column(db.Text())
Exemple #6
0
class TrafficItem(db.Model):
  __tablename__ = 'traffic_item'
  id = db.Column(db.Integer(), primary_key=True)
  
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  name = db.Column(db.String(255))
  slug = db.Column(db.String(255))
  external_id = db.Column(db.String(255))
  
  item_type = db.Column(db.Integer()) # 1 Baustelle 2 Auto-Parkplatz 3 Fahrrad-Ständer 4 Verkehrszählung 5 Sperranhänger
  raw_status = db.Column(db.Integer()) # 1 komplett roh, 2 verarbeitet
  is_meta = db.Column(db.Integer())
  
  zoom_from = db.Column(db.Integer())
  zoom_till = db.Column(db.Integer())
  
  lat = db.Column(db.Numeric(precision=10,scale=7))
  lon = db.Column(db.Numeric(precision=10,scale=7))
  
  area = db.Column(db.Text())
  
  traffic_item_provider_id = db.Column(db.Integer, db.ForeignKey('traffic_item_provider.id'))
  traffic_item_meta = db.relationship("TrafficItemMeta", backref="TrafficItem", lazy='dynamic')
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<TrafficItem %r>' % self.name
Exemple #7
0
class Track(db.Model):
    __tablename__ = 'tracks'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    description = db.Column(db.String(250))
    raw_gpx = db.Column(db.Text())

    def __repr__(self):
        return '<Track {}>'.format(self.title)
Exemple #8
0
class Service(db.Model):
  __tablename__ = 'service'
  id = db.Column(db.Integer(), primary_key=True)
  
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  name = db.Column(db.Text())
  fa_icon = db.Column(db.String(64))
  descr_short = db.Column(db.Text())
  descr = db.Column(db.Text())
  make_ssl_test = db.Column(db.Integer())
  
  service_group_id = db.Column(db.Integer, db.ForeignKey('service_group.id'))
  service_sites = db.relationship("ServiceSite", backref="Service", lazy='dynamic')
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<Service %r>' % self.name
Exemple #9
0
class SslTest(db.Model):
  __tablename__ = 'ssl_test'
  
  id = db.Column(db.Integer(), primary_key=True)
  created = db.Column(db.DateTime())
  
  host = db.Column(db.Text())
  ip = db.Column(db.Text())
  
  port_443_available = db.Column(db.Integer())
  port_25_available = db.Column(db.Integer())
  ssl_ok = db.Column(db.Integer())
  cert_matches = db.Column(db.Integer())
  
  rc4_available = db.Column(db.Integer())
  md5_available = db.Column(db.Integer())
  anon_suite_available = db.Column(db.Integer())
  dhe_key = db.Column(db.Integer())
  ecdhe_key = db.Column(db.Integer())
  pfs_available = db.Column(db.Integer())
  fallback_scsv_available = db.Column(db.Integer())
  protocol_num = db.Column(db.Integer())
  protocol_best = db.Column(db.String(255))
  
  sslv2_available = db.Column(db.Integer())
  sslv3_available = db.Column(db.Integer())
  tlsv1_available = db.Column(db.Integer())
  tlsv1_1_available = db.Column(db.Integer())
  tlsv1_2_available = db.Column(db.Integer())
  
  sslv2_cipher_accepted = db.Column(db.Text())
  sslv3_cipher_accepted = db.Column(db.Text())
  tlsv1_cipher_accepted = db.Column(db.Text())
  tlsv1_1_cipher_accepted = db.Column(db.Text())
  tlsv1_2_cipher_accepted = db.Column(db.Text())
  
  sslv2_cipher_preferred = db.Column(db.String(255))
  sslv3_cipher_preferred = db.Column(db.String(255))
  tlsv1_cipher_preferred = db.Column(db.String(255))
  tlsv1_1_cipher_preferred = db.Column(db.String(255))
  tlsv1_2_cipher_preferred = db.Column(db.String(255))
  
  hsts_available = db.Column(db.Integer())
  session_renegotiation_secure = db.Column(db.Integer())
  session_renegotiation_client = db.Column(db.Integer())
  heartbleed = db.Column(db.Integer())
  ccs_injection = db.Column(db.Integer())
  sha1_cert = db.Column(db.Integer())
  ocsp_stapling = db.Column(db.Integer())
  ssl_forward = db.Column(db.Integer())
  compression = db.Column(db.Integer())
  
  host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
Exemple #10
0
class TrafficItemProvider(db.Model):
  __tablename__ = 'traffic_item_provider'
  id = db.Column(db.Integer(), primary_key=True)
  
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  name = db.Column(db.String(255))
  slug = db.Column(db.String(255))
  descr_short = db.Column(db.Text())
  descr = db.Column(db.Text())
  external_id = db.Column(db.String(255))
  
  email = db.Column(db.String(255))
  website = db.Column(db.String(255))
  licence = db.Column(db.Text())
  
  street = db.Column(db.String(255))
  postalcode = db.Column(db.String(5))
  city = db.Column(db.String(255))
  
  traffic_item = db.relationship("TrafficItem", backref="TrafficItemProvider", lazy='dynamic')
Exemple #11
0
class Host(db.Model):
  __tablename__ = 'host'
  
  id = db.Column(db.Integer(), primary_key=True)
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  host = db.Column(db.String(255))
  type = db.Column(db.String(255))
  ip = db.Column(db.Text())
  reverse_hostname = db.Column(db.Text())
  ssl_result = db.Column(db.Integer())
  
  service_sites = db.relationship("ServiceSite", backref="host", lazy='dynamic')
  ssl_tests = db.relationship("SslTest", backref="Host", lazy='dynamic')
  regions = db.relationship('Region', secondary=hosts_regions, backref=db.backref('hosts', lazy='dynamic'))
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<Host %r>' % self.host
class SharingProvider(db.Model):
    __tablename__ = 'sharing_provider'
    id = db.Column(db.Integer(), primary_key=True)

    created = db.Column(db.DateTime())
    updated = db.Column(db.DateTime())
    active = db.Column(db.Integer())

    name = db.Column(db.String(255))
    slug = db.Column(db.String(255))
    descr_short = db.Column(db.Text())
    descr = db.Column(db.Text())

    email = db.Column(db.String(255))
    website = db.Column(db.String(255))
    licence = db.Column(db.Text())

    street = db.Column(db.String(255))
    postalcode = db.Column(db.String(5))
    city = db.Column(db.String(255))

    sharing_station = db.relationship("SharingStation",
                                      backref="SharingProvider",
                                      lazy='dynamic')
Exemple #13
0
class ServiceGroup(db.Model):
  __tablename__ = 'service_group'
  id = db.Column(db.Integer(), primary_key=True)
  
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  name = db.Column(db.Text())
  
  services = db.relationship("Service", backref="ServiceGroup", lazy='dynamic')
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<ServiceGroup %r>' % self.name
Exemple #14
0
class ServiceSite(db.Model):
  __tablename__ = 'service_site'
  
  id = db.Column(db.Integer(), primary_key=True)
  created = db.Column(db.DateTime())
  updated = db.Column(db.DateTime())
  active = db.Column(db.Integer())
  
  url = db.Column(db.Text())
  quality = db.Column(db.String(255)) # 'offline', 'mail', 'online'
  quality_show = db.Column(db.Integer())
  
  host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
  region_id = db.Column(db.Integer, db.ForeignKey('region.id'))
  service_id = db.Column(db.Integer, db.ForeignKey('service.id'))
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<ServiceSite %r>' % self.name
Exemple #15
0
class Comment(db.Model):

    id = db.Column(db.Integer, autoincrement=True, primary_key=True)
    time_added = db.Column(db.DateTime,
                           nullable=False,
                           default=datetime.now(tz))
    time_updated = db.Column(db.DateTime,
                             default=datetime.now(tz),
                             onupdate=datetime.now(tz))

    comment = db.Column(db.Text())

    author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    task_id = db.Column(db.Integer, db.ForeignKey('task.id'), nullable=False)

    material = db.relationship('Material',
                               backref='upload',
                               lazy=True,
                               foreign_keys="Material.upload_id")

    def __repr__(self):
        return f"Comment('{self.time_added}', '{self.author}')"
Exemple #16
0
class Tree(db.Model):
  __tablename__ = 'tree'
  
  id = db.Column(db.Integer(), primary_key=True)
  
  type = db.Column(db.Integer())
  public = db.Column(db.Integer())
  author = db.Column(db.String(255))
  email = db.Column(db.String(255))
  
  ip = db.Column(db.String(15))
  hostname = db.Column(db.String(255))
  
  address = db.Column(db.String(255))
  postalcode = db.Column(db.String(255))
  city = db.Column(db.String(255))
  
  picture = db.Column(db.Integer())
  descr = db.Column(db.Text())
  
  lat = db.Column(db.Numeric(precision=10,scale=7))
  lng = db.Column(db.Numeric(precision=10,scale=7))
  
  external_id = db.Column(db.String(255))
  created_at = db.Column(db.DateTime())
  updated_at = db.Column(db.DateTime())
  
  tree_type_old = db.Column(db.String(255))
  tree_type_new = db.Column(db.String(255))
  chop_reason = db.Column(db.String(255))
  source = db.Column(db.String(255))
  
  tree_suggest = db.relationship('TreeSuggest', backref='tree', lazy='dynamic')
  
  def __init__(self):
    pass

  def __repr__(self):
    return '<Tree %r>' % self.id
Exemple #17
0
class ConstructionSite(db.Model):
    __tablename__ = 'construction_site'

    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(255))

    descr = db.Column(db.Text())  # Allg. Beschreibung
    reason = db.Column(db.Text())  # Begründung für Baustelle
    type = db.Column(db.Text())  # Art der Verkehrseinschränkung
    constructor = db.Column(db.Text())  # Bauherr
    execution = db.Column(db.Text())  # Ausführendes Bauunternehmen
    location_descr = db.Column(db.Text())  # Ort
    restriction = db.Column(db.Text())  # Einschränkungen

    area = db.Column(db.Text())  # GeoJSON

    lat = db.Column(db.Numeric(precision=10, scale=7))
    lon = db.Column(db.Numeric(precision=10, scale=7))

    external_id = db.Column(
        db.String(255))  # Externe ID (innerhalb der Source einzigartig)
    external_url = db.Column(db.Text())  # Externe URL

    begin = db.Column(db.DateTime())  # Start der Baumaßnahme
    end = db.Column(db.DateTime())  # Ende der Baumaßnahme

    created_at = db.Column(db.DateTime())
    updated_at = db.Column(db.DateTime())

    source_id = db.Column(db.Integer())  # Quelle

    licence_name = db.Column(db.Text())
    licence_url = db.Column(db.Text())
    licence_owner = db.Column(db.Text())

    def __init__(self):
        pass

    def __repr__(self):
        return '<ConstructionSite %r>' % self.id
Exemple #18
0
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    name = db.Column(db.String(64))
    sex = db.Column(db.String(4))
    location = db.Column(db.String(64))
    about_me = db.Column(db.Text())
    member_since = db.Column(db.DateTime(), default=datetime.utcnow())
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow())
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    confirmed = db.Column(db.Boolean, default=False)
    avatar_hash = db.Column(db.String(128))

    blogs = db.relationship('Blog', backref='author', lazy='dynamic')
    comments = db.relationship('Comment', backref='author', lazy='dynamic')
    categorys = db.relationship('Category', backref='author', lazy='dynamic')

    followed = db.relationship('Follow',
                               foreign_keys=[Follow.follower_id],
                               backref=db.backref('follower', lazy='joined'),
                               lazy='dynamic',
                               cascade='all, delete-orphan')
    followers = db.relationship('Follow',
                                foreign_keys=[Follow.followed_id],
                                backref=db.backref('followed', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')

    def __repr__(self):
        return '<User %r>' % self.username

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        if self.role is None:
            if self.email == current_app.config['FLASKY_ADMIN']:
                self.role = Role.query.filter_by(permissions=0xff).first()
            else:
                self.role = Role.query.filter_by(default=True).first()
        if self.avatar_hash is None:
            # 设置头像默认地址
            if self.sex == '男':
                self.avatar_hash = url_for('static', filename='default_avatar_m.png', _external=True)
            elif self.sex == '女':
                self.avatar_hash = url_for('static', filename='default_avatar_w.png', _external=True)

    # 将password属性设置为不可获取
    @property
    def password(self):
        raise AttributeError('该属性不被显示')

    # 当改变password时自动触发,改变对应的password_hash属性,生成password的hash值
    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    # 验证密码是否匹配对应的hash值
    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    # 生成密令
    def generate_confirmation_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'confirm': self.id})

    # 解密密令
    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True

    # 每次登录刷新一次登录项
    def ping(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)

    # 查看用户是否有权限
    def can(self, permission):
        return self.role is not None and\
               (self.role.permissions & permission) == permission

    # 验证用户是否管理员
    def is_administrator(self):
        return self.can(Permission.ADMINISTER)

    # 生成更改邮箱密令
    def change_email_token(self, email, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({
            'newEmail': email,
            'id': self.id
        })

    # 验证更改邮箱密令
    def change_email_confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('id') != self.id:
            return False
        self.email = data.get('newEmail')
        db.session.add(self)
        return True

    # 生成“忘记密码”token
    def forget_passwd_token(self, newpasswd, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({
            'id': self.id,
            'newpasswd': newpasswd
        })

    # “忘记密码”token验证
    def forget_passwd_confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('id') != self.id:
            return False
        self.password = data.get('newpasswd')
        db.session.add(self)
        return True

    # 修改密码
    def change_password(self, old_password, new_password):
        if not self.verify_password(old_password):
            return False
        self.password = new_password
        db.session.add(self)
        return True

    # 是否关注了某用户
    def is_following(self, user):
        return self.followed.filter_by(followed_id=user.id).first() is not None

    # 是否被关注
    def is_followed_by(self, user):
        return self.followers.filter_by(follower_id=user.id).first() is not None

    # 关注用户
    def following(self, user):
        if not self.is_following(user):
            db.session.add(Follow(followed_id=user.id, follower_id=self.id))
        return True

    # 取消关注
    def cancel_follow(self, user):
        if self.is_following(user):
            db.session.delete(Follow.query.filter_by(followed_id=user.id).first())
        return True

    # 为所有用户添加默认权限
    @staticmethod
    def add_default_permission():
        for u in User.query.all():
            if u.email != os.environ.get('FLASKY_ADMIN'):
                u.role = Role.query.filter_by(default=True).first()
                db.session.add(u)
        db.session.commit()

    # 删除用户
    def delete_user(self):
        for fer in self.followers:
            db.session.delete(fer)
        for fed in self.followed:
            db.session.delete(fed)
        for blog in self.blogs:
            blog.delete_blog()
        for category in self.categorys:
            db.session.delete(category)
        db.session.delete(self)
        db.session.commit()

    # 添加用户(用于注册)
    def add_self(self):
        db.session.add(self)
        db.session.commit()
class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), nullable=False, unique=True)
    f_name = db.Column(db.String(255), nullable=False)
    l_name = db.Column(db.String(255))
    password = db.Column(db.String(255))
    about = db.Column(db.Text())
    account_type = db.Column(db.String(25), nullable=False, default="local")
    email_confirm = db.Column(db.Boolean(), nullable=False, default=False)
    email_confirm_on = db.Column(db.DateTime())
    subscription = db.Column(db.Boolean(), nullable=False, default=False)
    blocked = db.Column(db.Boolean(), nullable=False, default=False)
    posts = db.relationship("Post", backref="users", lazy="dynamic")
    roles = db.relationship("Role", secondary=roles, backref=db.backref("users", lazy="dynamic"))

    def __init__(self, email, f_name):
        default_role = Role.query.filter_by(name="user").one()
        self.roles.append(default_role)
        self.email = email
        self.f_name = f_name

    # Check user's role
    @cache.memoize(timeout=60)
    def has_role(self, role_name):
        for role in self.roles:
            if role.name == role_name:
                return True
        return False

    # Block standard methods of Flask Login module
    @property
    def is_authenticated(self):
        if isinstance(self, AnonymousUserMixin):
            return False
        else:
            return True

    @property
    def is_active(self):
        if self.blocked:
            return False
        return True

    @property
    def is_anonymous(self):
        if isinstance(self, AnonymousUserMixin):
            return True
        else:
            return False

    def get_id(self):
        return str(self.id)

    # Encrypt user password
    def set_password(self, password):
        self.password = bcrypt.generate_password_hash(password).decode("utf-8")

    # Check hash from db and from login form
    def check_password(self, password):
        return bcrypt.check_password_hash(self.password, password)

    def __repr__(self):
        return f"<User '{self.email}'>"