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
e8aedeac
Commit
e8aedeac
authored
May 09, 2020
by
Ozzieisaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactored admin.py
parent
718d50a0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
286 additions
and
256 deletions
+286
-256
admin.py
cps/admin.py
+286
-256
No files found.
cps/admin.py
View file @
e8aedeac
...
...
@@ -429,7 +429,6 @@ def delete_restriction(res_type):
return
""
#@admi.route("/ajax/listrestriction/<int:type>/<int:user_id>", defaults={'user_id': '0'})
@
admi
.
route
(
"/ajax/listrestriction/<int:res_type>"
)
@
login_required
@
admin_required
...
...
@@ -475,6 +474,7 @@ def list_restriction(res_type):
response
.
headers
[
"Content-Type"
]
=
"application/json; charset=utf-8"
return
response
@
admi
.
route
(
"/config"
,
methods
=
[
"GET"
,
"POST"
])
@
unconfigured
def
basic_configuration
():
...
...
@@ -484,19 +484,23 @@ def basic_configuration():
return
_configuration_result
()
def
_configuration_update_helper
():
reboot_required
=
False
db_change
=
False
to_save
=
request
.
form
.
to_dict
()
def
_config_int
(
to_save
,
x
):
return
config
.
set_from_dictionary
(
to_save
,
x
,
int
)
_config_string
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
y
.
strip
()
if
y
else
y
)
_config_int
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
int
)
_config_checkbox
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
y
==
"on"
,
False
)
_config_checkbox_int
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
1
if
(
y
==
"on"
)
else
0
,
0
)
db_change
|=
_config_string
(
"config_calibre_dir"
)
def
_config_checkbox
(
to_save
,
x
):
return
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
y
==
"on"
,
False
)
# Google drive setup
def
_config_checkbox_int
(
to_save
,
x
):
return
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
1
if
(
y
==
"on"
)
else
0
,
0
)
def
_config_string
(
to_save
,
x
):
return
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
y
.
strip
()
if
y
else
y
)
def
_configuration_gdrive_helper
(
to_save
):
if
not
os
.
path
.
isfile
(
gdriveutils
.
SETTINGS_YAML
):
config
.
config_use_google_drive
=
False
...
...
@@ -515,138 +519,162 @@ def _configuration_update_helper():
# always show google drive settings, but in case of error deny support
config
.
config_use_google_drive
=
(
not
gdriveError
)
and
(
"config_use_google_drive"
in
to_save
)
if
_config_string
(
"config_google_drive_folder"
):
if
_config_string
(
to_save
,
"config_google_drive_folder"
):
gdriveutils
.
deleteDatabaseOnChange
()
return
gdriveError
def
_configuration_oauth_helper
(
to_save
):
active_oauths
=
0
for
element
in
oauthblueprints
:
if
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
!=
element
[
'oauth_client_id'
]
\
or
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]
!=
element
[
'oauth_client_secret'
]:
reboot_required
=
True
element
[
'oauth_client_id'
]
=
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
element
[
'oauth_client_secret'
]
=
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]
if
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
\
and
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]:
active_oauths
+=
1
element
[
"active"
]
=
1
else
:
element
[
"active"
]
=
0
ub
.
session
.
query
(
ub
.
OAuthProvider
)
.
filter
(
ub
.
OAuthProvider
.
id
==
element
[
'id'
])
.
update
(
{
"oauth_client_id"
:
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
],
"oauth_client_secret"
:
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
],
"active"
:
element
[
"active"
]})
def
_configuration_logfile_helper
(
gdriveError
,
to_save
):
reboot_required
=
False
reboot_required
|=
_config_int
(
to_save
,
"config_log_level"
)
reboot_required
|=
_config_string
(
to_save
,
"config_logfile"
)
if
not
logger
.
is_valid_logfile
(
config
.
config_logfile
):
return
_configuration_result
(
_
(
'Logfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
reboot_required
|=
_config_checkbox_int
(
to_save
,
"config_access_log"
)
reboot_required
|=
_config_string
(
to_save
,
"config_access_logfile"
)
if
not
logger
.
is_valid_logfile
(
config
.
config_access_logfile
):
return
_configuration_result
(
_
(
'Access Logfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
return
reboot_required
def
_configuration_ldap_helper
(
gdriveError
,
to_save
):
reboot_required
=
False
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_provider_url"
)
reboot_required
|=
_config_int
(
to_save
,
"config_ldap_port"
)
reboot_required
|=
_config_int
(
to_save
,
"config_ldap_authentication"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_dn"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_serv_username"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_user_object"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_group_object_filter"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_group_members_field"
)
reboot_required
|=
_config_checkbox
(
to_save
,
"config_ldap_openldap"
)
reboot_required
|=
_config_int
(
to_save
,
"config_ldap_encryption"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_cert_path"
)
_config_string
(
to_save
,
"config_ldap_group_name"
)
if
"config_ldap_serv_password"
in
to_save
and
to_save
[
"config_ldap_serv_password"
]
!=
""
:
reboot_required
|=
1
config
.
set_from_dictionary
(
to_save
,
"config_ldap_serv_password"
,
base64
.
b64encode
,
encode
=
'UTF-8'
)
config
.
save
()
if
not
config
.
config_ldap_provider_url
\
or
not
config
.
config_ldap_port
\
or
not
config
.
config_ldap_dn
\
or
not
config
.
config_ldap_user_object
:
return
_configuration_result
(
_
(
'Please Enter a LDAP Provider, '
'Port, DN and User Object Identifier'
),
gdriveError
)
if
config
.
config_ldap_authentication
>
constants
.
LDAP_AUTH_ANONYMOUS
:
if
config
.
config_ldap_authentication
>
constants
.
LDAP_AUTH_UNAUTHENTICATE
:
if
not
config
.
config_ldap_serv_username
or
not
bool
(
config
.
config_ldap_serv_password
):
return
_configuration_result
(
'Please Enter a LDAP Service Account and Password'
,
gdriveError
)
else
:
if
not
config
.
config_ldap_serv_username
:
return
_configuration_result
(
'Please Enter a LDAP Service Account'
,
gdriveError
)
if
config
.
config_ldap_group_object_filter
:
if
config
.
config_ldap_group_object_filter
.
count
(
"
%
s"
)
!=
1
:
return
_configuration_result
(
_
(
'LDAP Group Object Filter Needs to Have One "
%
s" Format Identifier'
),
gdriveError
)
if
config
.
config_ldap_group_object_filter
.
count
(
"("
)
!=
config
.
config_ldap_group_object_filter
.
count
(
")"
):
return
_configuration_result
(
_
(
'LDAP Group Object Filter Has Unmatched Parenthesis'
),
gdriveError
)
if
config
.
config_ldap_user_object
.
count
(
"
%
s"
)
!=
1
:
return
_configuration_result
(
_
(
'LDAP User Object Filter needs to Have One "
%
s" Format Identifier'
),
gdriveError
)
if
config
.
config_ldap_user_object
.
count
(
"("
)
!=
config
.
config_ldap_user_object
.
count
(
")"
):
return
_configuration_result
(
_
(
'LDAP User Object Filter Has Unmatched Parenthesis'
),
gdriveError
)
if
config
.
config_ldap_cert_path
and
not
os
.
path
.
isdir
(
config
.
config_ldap_cert_path
):
return
_configuration_result
(
_
(
'LDAP Certificate Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
return
reboot_required
def
_configuration_update_helper
():
reboot_required
=
False
db_change
=
False
to_save
=
request
.
form
.
to_dict
()
db_change
|=
_config_string
(
to_save
,
"config_calibre_dir"
)
# Google drive setup
gdriveError
=
_configuration_gdrive_helper
(
to_save
)
reboot_required
|=
_config_int
(
"config_port"
)
reboot_required
|=
_config_int
(
to_save
,
"config_port"
)
reboot_required
|=
_config_string
(
"config_keyfile"
)
reboot_required
|=
_config_string
(
to_save
,
"config_keyfile"
)
if
config
.
config_keyfile
and
not
os
.
path
.
isfile
(
config
.
config_keyfile
):
return
_configuration_result
(
_
(
'Keyfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
reboot_required
|=
_config_string
(
"config_certfile"
)
reboot_required
|=
_config_string
(
to_save
,
"config_certfile"
)
if
config
.
config_certfile
and
not
os
.
path
.
isfile
(
config
.
config_certfile
):
return
_configuration_result
(
_
(
'Certfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
_config_checkbox_int
(
"config_uploading"
)
_config_checkbox_int
(
"config_anonbrowse"
)
_config_checkbox_int
(
"config_public_reg"
)
reboot_required
|=
_config_checkbox_int
(
"config_kobo_sync"
)
_config_checkbox_int
(
"config_kobo_proxy"
)
_config_checkbox_int
(
to_save
,
"config_uploading"
)
_config_checkbox_int
(
to_save
,
"config_anonbrowse"
)
_config_checkbox_int
(
to_save
,
"config_public_reg"
)
reboot_required
|=
_config_checkbox_int
(
to_save
,
"config_kobo_sync"
)
_config_checkbox_int
(
to_save
,
"config_kobo_proxy"
)
_config_string
(
"config_calibre"
)
_config_string
(
"config_converterpath"
)
_config_string
(
"config_kepubifypath"
)
_config_string
(
to_save
,
"config_calibre"
)
_config_string
(
to_save
,
"config_converterpath"
)
_config_string
(
to_save
,
"config_kepubifypath"
)
reboot_required
|=
_config_int
(
"config_login_type"
)
reboot_required
|=
_config_int
(
to_save
,
"config_login_type"
)
#LDAP configurator,
if
config
.
config_login_type
==
constants
.
LOGIN_LDAP
:
reboot_required
|=
_config_string
(
"config_ldap_provider_url"
)
reboot_required
|=
_config_int
(
"config_ldap_port"
)
reboot_required
|=
_config_int
(
"config_ldap_authentication"
)
reboot_required
|=
_config_string
(
"config_ldap_dn"
)
reboot_required
|=
_config_string
(
"config_ldap_serv_username"
)
reboot_required
|=
_config_string
(
"config_ldap_user_object"
)
reboot_required
|=
_config_string
(
"config_ldap_group_object_filter"
)
reboot_required
|=
_config_string
(
"config_ldap_group_members_field"
)
reboot_required
|=
_config_checkbox
(
"config_ldap_openldap"
)
reboot_required
|=
_config_int
(
"config_ldap_encryption"
)
reboot_required
|=
_config_string
(
"config_ldap_cert_path"
)
_config_string
(
"config_ldap_group_name"
)
if
"config_ldap_serv_password"
in
to_save
and
to_save
[
"config_ldap_serv_password"
]
!=
""
:
reboot_required
|=
1
config
.
set_from_dictionary
(
to_save
,
"config_ldap_serv_password"
,
base64
.
b64encode
,
encode
=
'UTF-8'
)
config
.
save
()
if
not
config
.
config_ldap_provider_url
\
or
not
config
.
config_ldap_port
\
or
not
config
.
config_ldap_dn
\
or
not
config
.
config_ldap_user_object
:
return
_configuration_result
(
_
(
'Please Enter a LDAP Provider, '
'Port, DN and User Object Identifier'
),
gdriveError
)
if
config
.
config_ldap_authentication
>
constants
.
LDAP_AUTH_ANONYMOUS
:
if
config
.
config_ldap_authentication
>
constants
.
LDAP_AUTH_UNAUTHENTICATE
:
if
not
config
.
config_ldap_serv_username
or
not
bool
(
config
.
config_ldap_serv_password
):
return
_configuration_result
(
'Please Enter a LDAP Service Account and Password'
,
gdriveError
)
else
:
if
not
config
.
config_ldap_serv_username
:
return
_configuration_result
(
'Please Enter a LDAP Service Account'
,
gdriveError
)
if
config
.
config_ldap_group_object_filter
:
if
config
.
config_ldap_group_object_filter
.
count
(
"
%
s"
)
!=
1
:
return
_configuration_result
(
_
(
'LDAP Group Object Filter Needs to Have One "
%
s" Format Identifier'
),
gdriveError
)
if
config
.
config_ldap_group_object_filter
.
count
(
"("
)
!=
config
.
config_ldap_group_object_filter
.
count
(
")"
):
return
_configuration_result
(
_
(
'LDAP Group Object Filter Has Unmatched Parenthesis'
),
gdriveError
)
if
config
.
config_ldap_user_object
.
count
(
"
%
s"
)
!=
1
:
return
_configuration_result
(
_
(
'LDAP User Object Filter needs to Have One "
%
s" Format Identifier'
),
gdriveError
)
if
config
.
config_ldap_user_object
.
count
(
"("
)
!=
config
.
config_ldap_user_object
.
count
(
")"
):
return
_configuration_result
(
_
(
'LDAP User Object Filter Has Unmatched Parenthesis'
),
gdriveError
)
if
config
.
config_ldap_cert_path
and
not
os
.
path
.
isdir
(
config
.
config_ldap_cert_path
):
return
_configuration_result
(
_
(
'LDAP Certificate Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
reboot_required
|=
_configuration_ldap_helper
(
to_save
,
gdriveError
)
# Remote login configuration
_config_checkbox
(
"config_remote_login"
)
_config_checkbox
(
to_save
,
"config_remote_login"
)
if
not
config
.
config_remote_login
:
ub
.
session
.
query
(
ub
.
RemoteAuthToken
)
.
filter
(
ub
.
RemoteAuthToken
.
token_type
==
0
)
.
delete
()
# Goodreads configuration
_config_checkbox
(
"config_use_goodreads"
)
_config_string
(
"config_goodreads_api_key"
)
_config_string
(
"config_goodreads_api_secret"
)
_config_checkbox
(
to_save
,
"config_use_goodreads"
)
_config_string
(
to_save
,
"config_goodreads_api_key"
)
_config_string
(
to_save
,
"config_goodreads_api_secret"
)
if
services
.
goodreads_support
:
services
.
goodreads_support
.
connect
(
config
.
config_goodreads_api_key
,
config
.
config_goodreads_api_secret
,
config
.
config_use_goodreads
)
_config_int
(
"config_updatechannel"
)
_config_int
(
to_save
,
"config_updatechannel"
)
# Reverse proxy login configuration
_config_checkbox
(
"config_allow_reverse_proxy_header_login"
)
_config_string
(
"config_reverse_proxy_login_header_name"
)
_config_checkbox
(
to_save
,
"config_allow_reverse_proxy_header_login"
)
_config_string
(
to_save
,
"config_reverse_proxy_login_header_name"
)
#
GitHub
OAuth configuration
# OAuth configuration
if
config
.
config_login_type
==
constants
.
LOGIN_OAUTH
:
active_oauths
=
0
for
element
in
oauthblueprints
:
if
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
!=
element
[
'oauth_client_id'
]
\
or
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]
!=
element
[
'oauth_client_secret'
]:
reboot_required
=
True
element
[
'oauth_client_id'
]
=
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
element
[
'oauth_client_secret'
]
=
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]
if
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
]
\
and
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
]:
active_oauths
+=
1
element
[
"active"
]
=
1
else
:
element
[
"active"
]
=
0
ub
.
session
.
query
(
ub
.
OAuthProvider
)
.
filter
(
ub
.
OAuthProvider
.
id
==
element
[
'id'
])
.
update
(
{
"oauth_client_id"
:
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_id"
],
"oauth_client_secret"
:
to_save
[
"config_"
+
str
(
element
[
'id'
])
+
"_oauth_client_secret"
],
"active"
:
element
[
"active"
]})
reboot_required
|=
_config_int
(
"config_log_level"
)
reboot_required
|=
_config_string
(
"config_logfile"
)
if
not
logger
.
is_valid_logfile
(
config
.
config_logfile
):
return
_configuration_result
(
_
(
'Logfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
reboot_required
|=
_config_checkbox_int
(
"config_access_log"
)
reboot_required
|=
_config_string
(
"config_access_logfile"
)
if
not
logger
.
is_valid_logfile
(
config
.
config_access_logfile
):
return
_configuration_result
(
_
(
'Access Logfile Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
_configuration_oauth_helper
(
to_save
)
reboot_required
|=
_configuration_logfile_helper
(
to_save
,
gdriveError
)
# Rarfile Content configuration
_config_string
(
"config_rarfile_location"
)
_config_string
(
to_save
,
"config_rarfile_location"
)
unrar_status
=
helper
.
check_unrar
(
config
.
config_rarfile_location
)
if
unrar_status
:
return
_configuration_result
(
unrar_status
,
gdriveError
)
...
...
@@ -660,7 +688,6 @@ def _configuration_update_helper():
return
_configuration_result
(
'
%
s'
%
e
,
gdriveError
)
if
db_change
:
# reload(db)
if
not
db
.
setup_db
(
config
):
return
_configuration_result
(
_
(
'DB Location is not Valid, Please Enter Correct Path'
),
gdriveError
)
...
...
@@ -698,6 +725,144 @@ def _configuration_result(error_flash=None, gdriveError=None):
title
=
_
(
u"Basic Configuration"
),
page
=
"config"
)
def
_handle_new_user
(
to_save
,
content
,
languages
,
translations
,
kobo_support
):
content
.
default_language
=
to_save
[
"default_language"
]
# content.mature_content = "Show_mature_content" in to_save
content
.
locale
=
to_save
.
get
(
"locale"
,
content
.
locale
)
content
.
sidebar_view
=
sum
(
int
(
key
[
5
:])
for
key
in
to_save
if
key
.
startswith
(
'show_'
))
if
"show_detail_random"
in
to_save
:
content
.
sidebar_view
|=
constants
.
DETAIL_RANDOM
content
.
role
=
constants
.
selected_roles
(
to_save
)
if
not
to_save
[
"nickname"
]
or
not
to_save
[
"email"
]
or
not
to_save
[
"password"
]:
flash
(
_
(
u"Please fill out all fields!"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Add new user"
))
content
.
password
=
generate_password_hash
(
to_save
[
"password"
])
existing_user
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
func
.
lower
(
ub
.
User
.
nickname
)
==
to_save
[
"nickname"
]
.
lower
())
\
.
first
()
existing_email
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
email
==
to_save
[
"email"
]
.
lower
())
\
.
first
()
if
not
existing_user
and
not
existing_email
:
content
.
nickname
=
to_save
[
"nickname"
]
if
config
.
config_public_reg
and
not
check_valid_domain
(
to_save
[
"email"
]):
flash
(
_
(
u"E-mail is not from valid domain"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Add new user"
))
else
:
content
.
email
=
to_save
[
"email"
]
else
:
flash
(
_
(
u"Found an existing account for this e-mail address or nickname."
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
languages
=
languages
,
title
=
_
(
u"Add new user"
),
page
=
"newuser"
,
kobo_support
=
kobo_support
,
registered_oauth
=
oauth_check
)
try
:
content
.
allowed_tags
=
config
.
config_allowed_tags
content
.
denied_tags
=
config
.
config_denied_tags
content
.
allowed_column_value
=
config
.
config_allowed_column_value
content
.
denied_column_value
=
config
.
config_denied_column_value
ub
.
session
.
add
(
content
)
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(user)
s' created"
,
user
=
content
.
nickname
),
category
=
"success"
)
return
redirect
(
url_for
(
'admin.admin'
))
except
IntegrityError
:
ub
.
session
.
rollback
()
flash
(
_
(
u"Found an existing account for this e-mail address or nickname."
),
category
=
"error"
)
def
_handle_edit_user
(
to_save
,
content
,
languages
,
translations
,
kobo_support
,
downloads
):
if
"delete"
in
to_save
:
if
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
ub
.
User
.
id
!=
content
.
id
)
.
count
():
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
id
==
content
.
id
)
.
delete
()
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(nick)
s' deleted"
,
nick
=
content
.
nickname
),
category
=
"success"
)
return
redirect
(
url_for
(
'admin.admin'
))
else
:
flash
(
_
(
u"No admin user remaining, can't delete user"
,
nick
=
content
.
nickname
),
category
=
"error"
)
return
redirect
(
url_for
(
'admin.admin'
))
else
:
if
not
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
ub
.
User
.
id
!=
content
.
id
)
.
count
()
and
\
not
'admin_role'
in
to_save
:
flash
(
_
(
u"No admin user remaining, can't remove admin role"
,
nick
=
content
.
nickname
),
category
=
"error"
)
return
redirect
(
url_for
(
'admin.admin'
))
if
"password"
in
to_save
and
to_save
[
"password"
]:
content
.
password
=
generate_password_hash
(
to_save
[
"password"
])
anonymous
=
content
.
is_anonymous
content
.
role
=
constants
.
selected_roles
(
to_save
)
if
anonymous
:
content
.
role
|=
constants
.
ROLE_ANONYMOUS
else
:
content
.
role
&=
~
constants
.
ROLE_ANONYMOUS
val
=
[
int
(
k
[
5
:])
for
k
in
to_save
if
k
.
startswith
(
'show_'
)]
sidebar
=
ub
.
get_sidebar_config
()
for
element
in
sidebar
:
value
=
element
[
'visibility'
]
if
value
in
val
and
not
content
.
check_visibility
(
value
):
content
.
sidebar_view
|=
value
elif
not
value
in
val
and
content
.
check_visibility
(
value
):
content
.
sidebar_view
&=
~
value
if
"Show_detail_random"
in
to_save
:
content
.
sidebar_view
|=
constants
.
DETAIL_RANDOM
else
:
content
.
sidebar_view
&=
~
constants
.
DETAIL_RANDOM
if
"default_language"
in
to_save
:
content
.
default_language
=
to_save
[
"default_language"
]
if
"locale"
in
to_save
and
to_save
[
"locale"
]:
content
.
locale
=
to_save
[
"locale"
]
if
to_save
[
"email"
]
and
to_save
[
"email"
]
!=
content
.
email
:
existing_email
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
email
==
to_save
[
"email"
]
.
lower
())
\
.
first
()
if
not
existing_email
:
content
.
email
=
to_save
[
"email"
]
else
:
flash
(
_
(
u"Found an existing account for this e-mail address."
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
translations
=
translations
,
languages
=
languages
,
mail_configured
=
config
.
get_mail_server_configured
(),
kobo_support
=
kobo_support
,
new_user
=
0
,
content
=
content
,
downloads
=
downloads
,
registered_oauth
=
oauth_check
,
title
=
_
(
u"Edit User
%(nick)
s"
,
nick
=
content
.
nickname
),
page
=
"edituser"
)
if
"nickname"
in
to_save
and
to_save
[
"nickname"
]
!=
content
.
nickname
:
# Query User nickname, if not existing, change
if
not
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
nickname
==
to_save
[
"nickname"
])
.
scalar
():
content
.
nickname
=
to_save
[
"nickname"
]
else
:
flash
(
_
(
u"This username is already taken"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
translations
=
translations
,
languages
=
languages
,
mail_configured
=
config
.
get_mail_server_configured
(),
new_user
=
0
,
content
=
content
,
downloads
=
downloads
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Edit User
%(nick)
s"
,
nick
=
content
.
nickname
),
page
=
"edituser"
)
if
"kindle_mail"
in
to_save
and
to_save
[
"kindle_mail"
]
!=
content
.
kindle_mail
:
content
.
kindle_mail
=
to_save
[
"kindle_mail"
]
try
:
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(nick)
s' updated"
,
nick
=
content
.
nickname
),
category
=
"success"
)
except
IntegrityError
:
ub
.
session
.
rollback
()
flash
(
_
(
u"An unknown error occured."
),
category
=
"error"
)
@
admi
.
route
(
"/admin/user/new"
,
methods
=
[
"GET"
,
"POST"
])
@
login_required
@
admin_required
...
...
@@ -708,52 +873,7 @@ def new_user():
kobo_support
=
feature_support
[
'kobo'
]
and
config
.
config_kobo_sync
if
request
.
method
==
"POST"
:
to_save
=
request
.
form
.
to_dict
()
content
.
default_language
=
to_save
[
"default_language"
]
# content.mature_content = "Show_mature_content" in to_save
content
.
locale
=
to_save
.
get
(
"locale"
,
content
.
locale
)
content
.
sidebar_view
=
sum
(
int
(
key
[
5
:])
for
key
in
to_save
if
key
.
startswith
(
'show_'
))
if
"show_detail_random"
in
to_save
:
content
.
sidebar_view
|=
constants
.
DETAIL_RANDOM
content
.
role
=
constants
.
selected_roles
(
to_save
)
if
not
to_save
[
"nickname"
]
or
not
to_save
[
"email"
]
or
not
to_save
[
"password"
]:
flash
(
_
(
u"Please fill out all fields!"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Add new user"
))
content
.
password
=
generate_password_hash
(
to_save
[
"password"
])
existing_user
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
func
.
lower
(
ub
.
User
.
nickname
)
==
to_save
[
"nickname"
]
.
lower
())
\
.
first
()
existing_email
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
email
==
to_save
[
"email"
]
.
lower
())
\
.
first
()
if
not
existing_user
and
not
existing_email
:
content
.
nickname
=
to_save
[
"nickname"
]
if
config
.
config_public_reg
and
not
check_valid_domain
(
to_save
[
"email"
]):
flash
(
_
(
u"E-mail is not from valid domain"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Add new user"
))
else
:
content
.
email
=
to_save
[
"email"
]
else
:
flash
(
_
(
u"Found an existing account for this e-mail address or nickname."
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
new_user
=
1
,
content
=
content
,
translations
=
translations
,
languages
=
languages
,
title
=
_
(
u"Add new user"
),
page
=
"newuser"
,
kobo_support
=
kobo_support
,
registered_oauth
=
oauth_check
)
try
:
content
.
allowed_tags
=
config
.
config_allowed_tags
content
.
denied_tags
=
config
.
config_denied_tags
content
.
allowed_column_value
=
config
.
config_allowed_column_value
content
.
denied_column_value
=
config
.
config_denied_column_value
ub
.
session
.
add
(
content
)
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(user)
s' created"
,
user
=
content
.
nickname
),
category
=
"success"
)
return
redirect
(
url_for
(
'admin.admin'
))
except
IntegrityError
:
ub
.
session
.
rollback
()
flash
(
_
(
u"Found an existing account for this e-mail address or nickname."
),
category
=
"error"
)
_handle_new_user
(
to_save
,
content
,
languages
,
translations
,
kobo_support
)
else
:
content
.
role
=
config
.
config_default_role
content
.
sidebar_view
=
config
.
config_default_show
...
...
@@ -778,15 +898,12 @@ def update_mailsettings():
to_save
=
request
.
form
.
to_dict
()
log
.
debug
(
"update_mailsettings
%
r"
,
to_save
)
_config_string
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
lambda
y
:
y
.
strip
()
if
y
else
y
)
_config_int
=
lambda
x
:
config
.
set_from_dictionary
(
to_save
,
x
,
int
)
_config_string
(
"mail_server"
)
_config_int
(
"mail_port"
)
_config_int
(
"mail_use_ssl"
)
_config_string
(
"mail_login"
)
_config_string
(
"mail_password"
)
_config_string
(
"mail_from"
)
_config_string
(
to_save
,
"mail_server"
)
_config_int
(
to_save
,
"mail_port"
)
_config_int
(
to_save
,
"mail_use_ssl"
)
_config_string
(
to_save
,
"mail_login"
)
_config_string
(
to_save
,
"mail_password"
)
_config_string
(
to_save
,
"mail_from"
)
config
.
save
()
if
to_save
.
get
(
"test"
):
...
...
@@ -823,96 +940,9 @@ def edit_user(user_id):
downloads
.
append
(
downloadbook
)
else
:
ub
.
delete_download
(
book
.
book_id
)
# ub.session.query(ub.Downloads).filter(book.book_id == ub.Downloads.book_id).delete()
# ub.session.commit()
if
request
.
method
==
"POST"
:
to_save
=
request
.
form
.
to_dict
()
if
"delete"
in
to_save
:
if
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
ub
.
User
.
id
!=
content
.
id
)
.
count
():
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
id
==
content
.
id
)
.
delete
()
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(nick)
s' deleted"
,
nick
=
content
.
nickname
),
category
=
"success"
)
return
redirect
(
url_for
(
'admin.admin'
))
else
:
flash
(
_
(
u"No admin user remaining, can't delete user"
,
nick
=
content
.
nickname
),
category
=
"error"
)
return
redirect
(
url_for
(
'admin.admin'
))
else
:
if
not
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
ub
.
User
.
id
!=
content
.
id
)
.
count
()
and
\
not
'admin_role'
in
to_save
:
flash
(
_
(
u"No admin user remaining, can't remove admin role"
,
nick
=
content
.
nickname
),
category
=
"error"
)
return
redirect
(
url_for
(
'admin.admin'
))
if
"password"
in
to_save
and
to_save
[
"password"
]:
content
.
password
=
generate_password_hash
(
to_save
[
"password"
])
anonymous
=
content
.
is_anonymous
content
.
role
=
constants
.
selected_roles
(
to_save
)
if
anonymous
:
content
.
role
|=
constants
.
ROLE_ANONYMOUS
else
:
content
.
role
&=
~
constants
.
ROLE_ANONYMOUS
val
=
[
int
(
k
[
5
:])
for
k
in
to_save
if
k
.
startswith
(
'show_'
)]
sidebar
=
ub
.
get_sidebar_config
()
for
element
in
sidebar
:
value
=
element
[
'visibility'
]
if
value
in
val
and
not
content
.
check_visibility
(
value
):
content
.
sidebar_view
|=
value
elif
not
value
in
val
and
content
.
check_visibility
(
value
):
content
.
sidebar_view
&=
~
value
if
"Show_detail_random"
in
to_save
:
content
.
sidebar_view
|=
constants
.
DETAIL_RANDOM
else
:
content
.
sidebar_view
&=
~
constants
.
DETAIL_RANDOM
if
"default_language"
in
to_save
:
content
.
default_language
=
to_save
[
"default_language"
]
if
"locale"
in
to_save
and
to_save
[
"locale"
]:
content
.
locale
=
to_save
[
"locale"
]
if
to_save
[
"email"
]
and
to_save
[
"email"
]
!=
content
.
email
:
existing_email
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
email
==
to_save
[
"email"
]
.
lower
())
\
.
first
()
if
not
existing_email
:
content
.
email
=
to_save
[
"email"
]
else
:
flash
(
_
(
u"Found an existing account for this e-mail address."
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
translations
=
translations
,
languages
=
languages
,
mail_configured
=
config
.
get_mail_server_configured
(),
kobo_support
=
kobo_support
,
new_user
=
0
,
content
=
content
,
downloads
=
downloads
,
registered_oauth
=
oauth_check
,
title
=
_
(
u"Edit User
%(nick)
s"
,
nick
=
content
.
nickname
),
page
=
"edituser"
)
if
"nickname"
in
to_save
and
to_save
[
"nickname"
]
!=
content
.
nickname
:
# Query User nickname, if not existing, change
if
not
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
nickname
==
to_save
[
"nickname"
])
.
scalar
():
content
.
nickname
=
to_save
[
"nickname"
]
else
:
flash
(
_
(
u"This username is already taken"
),
category
=
"error"
)
return
render_title_template
(
"user_edit.html"
,
translations
=
translations
,
languages
=
languages
,
mail_configured
=
config
.
get_mail_server_configured
(),
new_user
=
0
,
content
=
content
,
downloads
=
downloads
,
registered_oauth
=
oauth_check
,
kobo_support
=
kobo_support
,
title
=
_
(
u"Edit User
%(nick)
s"
,
nick
=
content
.
nickname
),
page
=
"edituser"
)
if
"kindle_mail"
in
to_save
and
to_save
[
"kindle_mail"
]
!=
content
.
kindle_mail
:
content
.
kindle_mail
=
to_save
[
"kindle_mail"
]
try
:
ub
.
session
.
commit
()
flash
(
_
(
u"User '
%(nick)
s' updated"
,
nick
=
content
.
nickname
),
category
=
"success"
)
except
IntegrityError
:
ub
.
session
.
rollback
()
flash
(
_
(
u"An unknown error occured."
),
category
=
"error"
)
_handle_edit_user
(
to_save
,
content
,
languages
,
translations
,
kobo_support
,
downloads
)
return
render_title_template
(
"user_edit.html"
,
translations
=
translations
,
languages
=
languages
,
...
...
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