|
|
@ -169,6 +169,14 @@ class UserBase:
|
|
|
|
def __repr__(self):
|
|
|
|
def __repr__(self):
|
|
|
|
return '<User %r>' % self.nickname
|
|
|
|
return '<User %r>' % self.nickname
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Login via LDAP method
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
|
|
def try_login(username, password):
|
|
|
|
|
|
|
|
conn = get_ldap_connection()
|
|
|
|
|
|
|
|
conn.simple_bind_s(
|
|
|
|
|
|
|
|
config.config_ldap_dn.replace("%s", username),
|
|
|
|
|
|
|
|
password
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Baseclass for Users in Calibre-Web, settings which are depending on certain users are stored here. It is derived from
|
|
|
|
# Baseclass for Users in Calibre-Web, settings which are depending on certain users are stored here. It is derived from
|
|
|
|
# User Base (all access methods are declared there)
|
|
|
|
# User Base (all access methods are declared there)
|
|
|
@ -326,6 +334,9 @@ class Settings(Base):
|
|
|
|
config_use_goodreads = Column(Boolean)
|
|
|
|
config_use_goodreads = Column(Boolean)
|
|
|
|
config_goodreads_api_key = Column(String)
|
|
|
|
config_goodreads_api_key = Column(String)
|
|
|
|
config_goodreads_api_secret = Column(String)
|
|
|
|
config_goodreads_api_secret = Column(String)
|
|
|
|
|
|
|
|
config_use_ldap = Column(Boolean)
|
|
|
|
|
|
|
|
config_ldap_provider_url = Column(String)
|
|
|
|
|
|
|
|
config_ldap_dn = Column(String)
|
|
|
|
config_mature_content_tags = Column(String)
|
|
|
|
config_mature_content_tags = Column(String)
|
|
|
|
config_logfile = Column(String)
|
|
|
|
config_logfile = Column(String)
|
|
|
|
config_ebookconverter = Column(Integer, default=0)
|
|
|
|
config_ebookconverter = Column(Integer, default=0)
|
|
|
@ -400,6 +411,9 @@ class Config:
|
|
|
|
self.config_use_goodreads = data.config_use_goodreads
|
|
|
|
self.config_use_goodreads = data.config_use_goodreads
|
|
|
|
self.config_goodreads_api_key = data.config_goodreads_api_key
|
|
|
|
self.config_goodreads_api_key = data.config_goodreads_api_key
|
|
|
|
self.config_goodreads_api_secret = data.config_goodreads_api_secret
|
|
|
|
self.config_goodreads_api_secret = data.config_goodreads_api_secret
|
|
|
|
|
|
|
|
self.config_use_ldap = data.config_use_ldap
|
|
|
|
|
|
|
|
self.config_ldap_provider_url = data.config_ldap_provider_url
|
|
|
|
|
|
|
|
self.config_ldap_dn = data.config_ldap_dn
|
|
|
|
if data.config_mature_content_tags:
|
|
|
|
if data.config_mature_content_tags:
|
|
|
|
self.config_mature_content_tags = data.config_mature_content_tags
|
|
|
|
self.config_mature_content_tags = data.config_mature_content_tags
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -687,6 +701,14 @@ def migrate_Database():
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_converterpath` String DEFAULT ''")
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_converterpath` String DEFAULT ''")
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_calibre` String DEFAULT ''")
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_calibre` String DEFAULT ''")
|
|
|
|
session.commit()
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
session.query(exists().where(Settings.config_use_ldap)).scalar()
|
|
|
|
|
|
|
|
except exc.OperationalError:
|
|
|
|
|
|
|
|
conn = engine.connect()
|
|
|
|
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_use_ldap` INTEGER DEFAULT 0")
|
|
|
|
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_ldap_provider_url` String DEFAULT ''")
|
|
|
|
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_ldap_dn` String DEFAULT ''")
|
|
|
|
|
|
|
|
session.commit()
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
session.query(exists().where(Settings.config_theme)).scalar()
|
|
|
|
session.query(exists().where(Settings.config_theme)).scalar()
|
|
|
|
except exc.OperationalError: # Database is not compatible, some rows are missing
|
|
|
|
except exc.OperationalError: # Database is not compatible, some rows are missing
|
|
|
@ -700,7 +722,6 @@ def migrate_Database():
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_updatechannel` INTEGER DEFAULT 0")
|
|
|
|
conn.execute("ALTER TABLE Settings ADD column `config_updatechannel` INTEGER DEFAULT 0")
|
|
|
|
session.commit()
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Remove login capability of user Guest
|
|
|
|
# Remove login capability of user Guest
|
|
|
|
conn = engine.connect()
|
|
|
|
conn = engine.connect()
|
|
|
|
conn.execute("UPDATE user SET password='' where nickname = 'Guest' and password !=''")
|
|
|
|
conn.execute("UPDATE user SET password='' where nickname = 'Guest' and password !=''")
|
|
|
@ -810,6 +831,12 @@ else:
|
|
|
|
migrate_Database()
|
|
|
|
migrate_Database()
|
|
|
|
clean_database()
|
|
|
|
clean_database()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#get LDAP connection
|
|
|
|
|
|
|
|
def get_ldap_connection():
|
|
|
|
|
|
|
|
import ldap
|
|
|
|
|
|
|
|
conn = ldap.initialize('ldap://{}'.format(config.config_ldap_provider_url))
|
|
|
|
|
|
|
|
return conn
|
|
|
|
|
|
|
|
|
|
|
|
# Generate global Settings Object accessible from every file
|
|
|
|
# Generate global Settings Object accessible from every file
|
|
|
|
config = Config()
|
|
|
|
config = Config()
|
|
|
|
searched_ids = {}
|
|
|
|
searched_ids = {}
|
|
|
|