Add lengths to all Unicode() ones

- Otherwise does not work with MySQL
- Change JSONDict to be TEXT (Unbounded) rather than VARCHAR.
  This makes most sense, since you can't index these anyway.
- The 'ip' field in Server is set to 255, since that is the
  max allowed length of DNS entries.
- Most of the rest of the Unicodes have approximately high
  values that most people should not mostly run into
  (famous last words).
This commit is contained in:
YuviPanda
2016-03-01 12:57:00 -08:00
parent 62e30c1d79
commit bf9dea5522

View File

@@ -12,7 +12,7 @@ from tornado import gen
from tornado.log import app_log from tornado.log import app_log
from tornado.httpclient import HTTPRequest, AsyncHTTPClient from tornado.httpclient import HTTPRequest, AsyncHTTPClient
from sqlalchemy.types import TypeDecorator, VARCHAR from sqlalchemy.types import TypeDecorator, TEXT
from sqlalchemy import ( from sqlalchemy import (
inspect, inspect,
Column, Integer, ForeignKey, Unicode, Boolean, Column, Integer, ForeignKey, Unicode, Boolean,
@@ -39,7 +39,7 @@ class JSONDict(TypeDecorator):
""" """
impl = VARCHAR impl = TEXT
def process_bind_param(self, value, dialect): def process_bind_param(self, value, dialect):
if value is not None: if value is not None:
@@ -64,11 +64,11 @@ class Server(Base):
""" """
__tablename__ = 'servers' __tablename__ = 'servers'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
proto = Column(Unicode, default='http') proto = Column(Unicode(15), default='http')
ip = Column(Unicode, default='') ip = Column(Unicode(255), default='') # could also be a DNS name
port = Column(Integer, default=random_port) port = Column(Integer, default=random_port)
base_url = Column(Unicode, default='/') base_url = Column(Unicode(255), default='/')
cookie_name = Column(Unicode, default='cookie') cookie_name = Column(Unicode(255), default='cookie')
def __repr__(self): def __repr__(self):
return "<Server(%s:%s)>" % (self.ip, self.port) return "<Server(%s:%s)>" % (self.ip, self.port)
@@ -178,6 +178,7 @@ class Proxy(Base):
self.log.info("Adding user %s to proxy %s => %s", self.log.info("Adding user %s to proxy %s => %s",
user.name, user.proxy_path, user.server.host, user.name, user.proxy_path, user.server.host,
) )
if user.spawn_pending: if user.spawn_pending:
raise RuntimeError( raise RuntimeError(
"User %s's spawn is pending, shouldn't be added to the proxy yet!", user.name) "User %s's spawn is pending, shouldn't be added to the proxy yet!", user.name)
@@ -295,7 +296,7 @@ class User(Base):
""" """
__tablename__ = 'users' __tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Unicode) name = Column(Unicode(1023))
# should we allow multiple servers per user? # should we allow multiple servers per user?
_server_id = Column(Integer, ForeignKey('servers.id')) _server_id = Column(Integer, ForeignKey('servers.id'))
server = relationship(Server, primaryjoin=_server_id == Server.id) server = relationship(Server, primaryjoin=_server_id == Server.id)
@@ -303,7 +304,7 @@ class User(Base):
last_activity = Column(DateTime, default=datetime.utcnow) last_activity = Column(DateTime, default=datetime.utcnow)
api_tokens = relationship("APIToken", backref="user") api_tokens = relationship("APIToken", backref="user")
cookie_id = Column(Unicode, default=new_token) cookie_id = Column(Unicode(1023), default=new_token)
state = Column(JSONDict) state = Column(JSONDict)
other_user_cookies = set([]) other_user_cookies = set([])
@@ -350,8 +351,8 @@ class APIToken(Base):
return Column(Integer, ForeignKey('users.id')) return Column(Integer, ForeignKey('users.id'))
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
hashed = Column(Unicode) hashed = Column(Unicode(1023))
prefix = Column(Unicode) prefix = Column(Unicode(1023))
prefix_length = 4 prefix_length = 4
algorithm = "sha512" algorithm = "sha512"
rounds = 16384 rounds = 16384