Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
6190e649
Unverified
Commit
6190e649
authored
Jun 07, 2019
by
Krakinou
Committed by
GitHub
Jun 07, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1 from Krakinou/flaskldap
Flaskldap integration
parents
d48cdcc7
79286c93
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
241 additions
and
55 deletions
+241
-55
config_edit.html
cps/templates/config_edit.html
+47
-5
ub.py
cps/ub.py
+81
-14
web.py
cps/web.py
+111
-35
optional-requirements-ldap.txt
optional-requirements-ldap.txt
+2
-1
No files found.
cps/templates/config_edit.html
View file @
6190e649
...
...
@@ -164,16 +164,58 @@
{% endif %}
<div
class=
"form-group"
>
<input
type=
"checkbox"
id=
"config_use_ldap"
name=
"config_use_ldap"
data-control=
"ldap-settings"
{%
if
content
.
config_use_ldap
%}
checked
{%
endif
%}
>
<label
for=
"config_use_ldap"
>
{{_('Use
')}} LDAP Authentication
</label>
</div>
<label
for=
"config_use_ldap"
>
{{_('Use
LDAP Authentication')}}
</label>
</div>
<div
data-related=
"ldap-settings"
>
<div
class=
"form-group"
>
<label
for=
"config_ldap_provider_url"
>
{{_('LDAP Provider URL')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_provider_url"
name=
"config_ldap_provider_url"
value=
"{% if content.config_use_ldap != None %}{{ content.config_ldap_provider_url }}{% endif %}"
autocomplete=
"off"
>
<label
for=
"config_ldap_provider_url"
>
{{_('LDAP Server Host Name or IP Address')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_provider_url"
name=
"config_ldap_provider_url"
value=
"{% if content.config_ldap_provider_url != None %}{{ content.config_ldap_provider_url }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_port"
>
{{_('LDAP Server Port')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_port"
name=
"config_ldap_port"
value=
"{% if content.config_ldap_port != None %}{{ content.config_ldap_port }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_schema"
>
{{_('LDAP schema (ldap or ldaps)')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_schema"
name=
"config_ldap_schema"
value=
"{% if content.config_ldap_schema != None %}{{ content.config_ldap_schema }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_serv_username"
>
{{_('LDAP Admin username')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_serv_username"
name=
"config_ldap_serv_username"
value=
"{% if content.config_ldap_serv_username != None %}{{ content.config_ldap_serv_username }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_serv_password"
>
{{_('LDAP Admin password')}}
</label>
<input
type=
"password"
class=
"form-control"
id=
"config_ldap_serv_password"
name=
"config_ldap_serv_password"
value=
"{% if content.config_ldap_serv_password != None %}{{ content.config_ldap_serv_password }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<input
type=
"checkbox"
id=
"config_ldap_use_ssl"
name=
"config_ldap_use_ssl"
{%
if
content
.
config_ldap_use_ssl
%}
checked
{%
endif
%}
>
<label
for=
"config_ldap_ssl"
>
{{_('LDAP Server use SSL')}}
</label>
</div>
<div
class=
"form-group"
>
<input
type=
"checkbox"
id=
"config_ldap_use_tls"
name=
"config_ldap_use_tls"
{%
if
content
.
config_ldap_use_tls
%}
checked
{%
endif
%}
>
<label
for=
"config_ldap_ssl"
>
{{_('LDAP Server use TLS')}}
</label>
</div>
<div
class=
"form-group"
>
<input
type=
"checkbox"
id=
"config_ldap_require_cert"
name=
"config_ldap_require_cert"
data-control=
"ldap-cert-settings"
{%
if
content
.
config_ldap_require_cert
%}
checked
{%
endif
%}
>
<label
for=
"config_ldap_ssl"
>
{{_('LDAP Server Certificate')}}
</label>
</div>
<div
data-related=
"ldap-cert-settings"
>
<div
class=
"form-group"
>
<label
for=
"config_ldap_cert_path"
>
{{_('LDAP SSL Certificate Path')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_cert_path"
name=
"config_ldap_cert_path"
value=
"{% if content.config_ldap_cert_path != None and content.config_ldap_require_cert !=None %}{{ content.config_ldap_cert_path }}{% endif %}"
autocomplete=
"off"
>
</div>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_dn"
>
{{_('LDAP Distinguished Name (DN)')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_dn"
name=
"config_ldap_dn"
value=
"{% if content.config_use_ldap != None %}{{ content.config_ldap_dn }}{% endif %}"
autocomplete=
"off"
>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_dn"
name=
"config_ldap_dn"
value=
"{% if content.config_ldap_dn != None %}{{ content.config_ldap_dn }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"config_ldap_user_object"
>
{{_('LDAP User object filter')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_user_object"
name=
"config_ldap_user_object"
value=
"{% if content.config_ldap_user_object != None %}{{ content.config_ldap_user_object }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<input
type=
"checkbox"
id=
"config_ldap_openldap"
name=
"config_ldap_openldap"
{%
if
content
.
config_ldap_openldap
%}
checked
{%
endif
%}
>
<label
for=
"config_ldap_openldap"
>
{{_('LDAP Server is OpenLDAP?')}}
</label>
</div>
</div>
</div>
...
...
cps/ub.py
View file @
6190e649
...
...
@@ -148,14 +148,6 @@ class UserBase:
def
__repr__
(
self
):
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
# User Base (all access methods are declared there)
...
...
@@ -315,8 +307,18 @@ class Settings(Base):
config_goodreads_api_key
=
Column
(
String
)
config_goodreads_api_secret
=
Column
(
String
)
config_use_ldap
=
Column
(
Boolean
)
config_ldap_provider_url
=
Column
(
String
)
config_ldap_provider_url
=
Column
(
String
,
default
=
'localhost'
)
config_ldap_port
=
Column
(
SmallInteger
,
default
=
389
)
config_ldap_schema
=
Column
(
String
,
default
=
'ldap'
)
config_ldap_serv_username
=
Column
(
String
)
config_ldap_serv_password
=
Column
(
String
)
config_ldap_use_ssl
=
Column
(
Boolean
,
default
=
False
)
config_ldap_use_tls
=
Column
(
Boolean
,
default
=
False
)
config_ldap_require_cert
=
Column
(
Boolean
,
default
=
False
)
config_ldap_cert_path
=
Column
(
String
)
config_ldap_dn
=
Column
(
String
)
config_ldap_user_object
=
Column
(
String
)
config_ldap_openldap
=
Column
(
Boolean
)
config_mature_content_tags
=
Column
(
String
)
config_logfile
=
Column
(
String
)
config_ebookconverter
=
Column
(
Integer
,
default
=
0
)
...
...
@@ -392,7 +394,17 @@ class Config:
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_port
=
data
.
config_ldap_port
self
.
config_ldap_schema
=
data
.
config_ldap_schema
self
.
config_ldap_serv_username
=
data
.
config_ldap_serv_username
self
.
config_ldap_serv_password
=
data
.
config_ldap_serv_password
self
.
config_ldap_use_ssl
=
data
.
config_ldap_use_ssl
self
.
config_ldap_use_tls
=
data
.
config_ldap_use_ssl
self
.
config_ldap_require_cert
=
data
.
config_ldap_require_cert
self
.
config_ldap_cert_path
=
data
.
config_ldap_cert_path
self
.
config_ldap_dn
=
data
.
config_ldap_dn
self
.
config_ldap_user_object
=
data
.
config_ldap_user_object
self
.
config_ldap_openldap
=
data
.
config_ldap_openldap
if
data
.
config_mature_content_tags
:
self
.
config_mature_content_tags
=
data
.
config_mature_content_tags
else
:
...
...
@@ -680,9 +692,69 @@ def migrate_Database():
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_use_ldap` INTEGER DEFAULT 0"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_provider_url
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_provider_url` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_port
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_port` INTEGER DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_schema
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_schema ` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_serv_username
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_serv_username` String DEFAULT ''"
)
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_serv_password` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_use_ssl
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_use_ssl` INTEGER DEFAULT 0"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_use_tls
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `cconfig_ldap_use_tls` INTEGER DEFAULT 0"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_require_cert
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_require_cert` INTEGER DEFAULT 0"
)
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_cert_path` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_dn
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_dn` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_user_object
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_user_object` String DEFAULT ''"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_ldap_openldap
))
.
scalar
()
except
exc
.
OperationalError
:
conn
=
engine
.
connect
()
conn
.
execute
(
"ALTER TABLE Settings ADD column `config_ldap_openldap` INTEGER DEFAULT 0"
)
session
.
commit
()
try
:
session
.
query
(
exists
()
.
where
(
Settings
.
config_theme
))
.
scalar
()
except
exc
.
OperationalError
:
# Database is not compatible, some rows are missing
...
...
@@ -799,11 +871,6 @@ else:
migrate_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
config
=
Config
()
...
...
cps/web.py
View file @
6190e649
This diff is collapsed.
Click to expand it.
optional-requirements-ldap.txt
View file @
6190e649
python_ldap>=3.0.0
\ No newline at end of file
python_ldap>=3.0.0
flask-simpleldap
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment