mirror of
https://github.com/wassname/flask-security.git
synced 2026-07-25 13:10:33 +08:00
Bring back scripts
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
|
||||
try:
|
||||
import simplejson as json
|
||||
except ImportError:
|
||||
import json
|
||||
|
||||
import inspect
|
||||
import os
|
||||
import re
|
||||
|
||||
from flask import current_app
|
||||
from flask.ext.script import Command, Option, prompt_bool
|
||||
from werkzeug.local import LocalProxy
|
||||
|
||||
from flask_security import views
|
||||
|
||||
|
||||
_datastore = LocalProxy(lambda: current_app.security.datastore)
|
||||
|
||||
|
||||
def pprint(obj):
|
||||
print json.dumps(obj, sort_keys=True, indent=4)
|
||||
|
||||
|
||||
class CreateUserCommand(Command):
|
||||
"""Create a user"""
|
||||
|
||||
option_list = (
|
||||
Option('-e', '--email', dest='email', default=None),
|
||||
Option('-p', '--password', dest='password', default=None),
|
||||
Option('-a', '--active', dest='active', default=''),
|
||||
Option('-r', '--roles', dest='roles', default=''),
|
||||
)
|
||||
|
||||
def run(self, **kwargs):
|
||||
# sanitize active input
|
||||
ai = re.sub(r'\s', '', str(kwargs['active']))
|
||||
kwargs['active'] = ai.lower() in ['', 'y', 'yes', '1', 'active']
|
||||
|
||||
# sanitize role input a bit
|
||||
ri = re.sub(r'\s', '', kwargs['roles'])
|
||||
kwargs['roles'] = [] if ri == '' else ri.split(',')
|
||||
|
||||
_datastore.create_user(**kwargs)
|
||||
|
||||
print 'User created successfully.'
|
||||
kwargs['password'] = '****'
|
||||
pprint(kwargs)
|
||||
|
||||
|
||||
class CreateRoleCommand(Command):
|
||||
"""Create a role"""
|
||||
|
||||
option_list = (
|
||||
Option('-n', '--name', dest='name', default=None),
|
||||
Option('-d', '--desc', dest='description', default=None),
|
||||
)
|
||||
|
||||
def run(self, **kwargs):
|
||||
_datastore.create_role(**kwargs)
|
||||
print 'Role "%(name)s" created successfully.' % kwargs
|
||||
|
||||
|
||||
class _RoleCommand(Command):
|
||||
option_list = (
|
||||
Option('-u', '--user', dest='user_identifier'),
|
||||
Option('-r', '--role', dest='role_name'),
|
||||
)
|
||||
|
||||
|
||||
class AddRoleCommand(_RoleCommand):
|
||||
"""Add a role to a user"""
|
||||
|
||||
def run(self, user_identifier, role_name):
|
||||
_datastore.add_role_to_user(user_identifier, role_name)
|
||||
print "Role '%s' added to user '%s' successfully" % (role_name, user_identifier)
|
||||
|
||||
|
||||
class RemoveRoleCommand(_RoleCommand):
|
||||
"""Add a role to a user"""
|
||||
|
||||
def run(self, user_identifier, role_name):
|
||||
_datastore.remove_role_from_user(user_identifier, role_name)
|
||||
print "Role '%s' removed from user '%s' successfully" % (role_name, user_identifier)
|
||||
|
||||
|
||||
class _ToggleActiveCommand(Command):
|
||||
option_list = (
|
||||
Option('-u', '--user', dest='user_identifier'),
|
||||
)
|
||||
|
||||
|
||||
class DeactivateUserCommand(_ToggleActiveCommand):
|
||||
"""Deactive a user"""
|
||||
|
||||
def run(self, user_identifier):
|
||||
_datastore.deactivate_user(user_identifier)
|
||||
print "User '%s' has been deactivated" % user_identifier
|
||||
|
||||
|
||||
class ActivateUserCommand(_ToggleActiveCommand):
|
||||
"""Deactive a user"""
|
||||
|
||||
def run(self, user_identifier):
|
||||
_datastore.activate_user(user_identifier)
|
||||
print "User '%s' has been activated" % user_identifier
|
||||
|
||||
|
||||
class GenerateBlueprintCommand(Command):
|
||||
"""Generate a Flask-Security blueprint object"""
|
||||
|
||||
option_list = (
|
||||
Option('--output', '-o', dest='output', default=None),
|
||||
)
|
||||
|
||||
def run(self, output):
|
||||
output = os.path.join(os.getcwd(), output) if output else 'security.py'
|
||||
|
||||
if os.path.exists(output):
|
||||
msg = 'File %s exists. Do you want to overwrite it?' % output
|
||||
if not prompt_bool(msg):
|
||||
return
|
||||
|
||||
with open(output, 'w') as o:
|
||||
source = inspect.getfile(views).replace('.pyc', '.py')
|
||||
|
||||
with open(source, 'r') as s:
|
||||
to_remove = '"""' + views.__doc__ + '"""'
|
||||
to_replace = """
|
||||
\"""
|
||||
Flask-Security
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
This module was generated by Flask-Security to give developers greater
|
||||
control over the various security mechanisms. For more information about
|
||||
using this feature see:
|
||||
|
||||
TODO: Documentation URL
|
||||
\"""
|
||||
"""
|
||||
ctx = dict(module_name=inspect.getmodulename(output))
|
||||
to_replace = to_replace % ctx
|
||||
contents = s.read().replace(to_remove, to_replace)
|
||||
|
||||
o.write(contents)
|
||||
|
||||
print 'File generated successfully.'
|
||||
print output
|
||||
Reference in New Issue
Block a user