168 lines
5 KiB
Python
168 lines
5 KiB
Python
|
#!/bin/env
|
||
|
"""Help new users configure the database for use with social networks.
|
||
|
"""
|
||
|
import os
|
||
|
from datetime import datetime
|
||
|
|
||
|
# Fix Python 2.x.
|
||
|
try: input = raw_input
|
||
|
except NameError: pass
|
||
|
|
||
|
import django
|
||
|
from django.conf import settings
|
||
|
|
||
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||
|
|
||
|
settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
|
||
|
TEMPLATE_DIRS=(os.path.join(BASE_DIR, 'allauthdemo'),)
|
||
|
)
|
||
|
|
||
|
try:
|
||
|
django.setup() # for Django >= 1.7
|
||
|
except AttributeError:
|
||
|
pass # must be < Django 1.7
|
||
|
|
||
|
|
||
|
from django.template import Template, Context
|
||
|
from django.template.loader import get_template
|
||
|
#from django.conf.settings import configure as django_configure
|
||
|
|
||
|
sql_template = Template("""
|
||
|
UPDATE django_site SET DOMAIN = '127.0.0.1:8000', name = 'allauthdemo' WHERE id=1;
|
||
|
|
||
|
{% if admin %}
|
||
|
DELETE from auth_user; -- or just the first user?
|
||
|
INSERT INTO auth_user(id, password, last_login, is_superuser, first_name, last_name, email, is_staff, is_active, date_joined)
|
||
|
VALUES (1, '{{admin.password}}', '{{now}}', 1, '{{admin.first_name}}', '{{admin.last_name}}', '{{admin.email}}', 1, 1, '{{now}}');
|
||
|
{% endif %}
|
||
|
|
||
|
{% if facebook or google %}
|
||
|
--
|
||
|
-- Prep for socialapp_sites
|
||
|
--
|
||
|
DELETE FROM socialaccount_socialapp_sites;
|
||
|
{% endif %}
|
||
|
|
||
|
{% if facebook %}
|
||
|
--
|
||
|
-- Facebook
|
||
|
--
|
||
|
DELETE FROM socialaccount_socialapp WHERE provider='facebook';
|
||
|
INSERT INTO socialaccount_socialapp (provider, name, secret, client_id, `key`)
|
||
|
VALUES ("facebook", "Facebook", "{{facebook.secret}}", "{{facebook.client_id}}", '');
|
||
|
|
||
|
INSERT INTO socialaccount_socialapp_sites (socialapp_id, site_id) VALUES (
|
||
|
(SELECT id FROM socialaccount_socialapp WHERE provider='facebook'),1);
|
||
|
{% endif %}
|
||
|
|
||
|
{% if google %}
|
||
|
--
|
||
|
-- Google
|
||
|
--
|
||
|
DELETE FROM socialaccount_socialapp WHERE provider='google';
|
||
|
INSERT INTO socialaccount_socialapp (provider, name, secret, client_id, `key`)
|
||
|
VALUES ("google", "Google", "{{ google.secret }}", "{{ google.client_id}}", '');
|
||
|
|
||
|
INSERT INTO socialaccount_socialapp_sites (socialapp_id, site_id) VALUES (
|
||
|
(SELECT id FROM socialaccount_socialapp WHERE provider='google'),1);
|
||
|
{% endif %}
|
||
|
""")
|
||
|
|
||
|
#settings_template = Template(open("allauthdemo/settings.template.py").read())
|
||
|
settings_template = get_template("settings.template.py")
|
||
|
|
||
|
default_superuser_first_name='The'
|
||
|
default_superuser_last_name='Admin'
|
||
|
default_superuser_email='me@admin.test'
|
||
|
|
||
|
|
||
|
def heading(text):
|
||
|
text = text.strip()
|
||
|
line = '-' * len(text)
|
||
|
print("\n%s\n%s\n%s\n" % (line, text, line))
|
||
|
|
||
|
|
||
|
def ask_yes_no(msg):
|
||
|
msg = "\n" + msg.strip()+'\n\nPlease enter "yes" or "no": '
|
||
|
confirm = input(msg)
|
||
|
while True:
|
||
|
confirm = confirm.strip().lower()
|
||
|
if confirm not in ('yes', 'y', 'no', 'n'):
|
||
|
confirm = input('Please enter either "yes" or "no": ')
|
||
|
continue
|
||
|
return confirm in ('yes', 'y')
|
||
|
|
||
|
|
||
|
def ask_text(need, default=None):
|
||
|
need = need.strip()
|
||
|
if default:
|
||
|
msg = "\n%s? Default: [%s] > " % (need, default)
|
||
|
else:
|
||
|
msg = "\n%s? > " % need
|
||
|
|
||
|
while True:
|
||
|
response = input(msg)
|
||
|
if response:
|
||
|
return response
|
||
|
elif default is not None:
|
||
|
return default
|
||
|
else:
|
||
|
pass # raw_input('Please enter a value.')
|
||
|
|
||
|
|
||
|
def ask_superuser():
|
||
|
from django.contrib.auth.hashers import make_password
|
||
|
first_name = ask_text("Admin first name", default_superuser_first_name)
|
||
|
last_name = ask_text("Admin last name", default_superuser_last_name)
|
||
|
email = ask_text("Admin email", default_superuser_email)
|
||
|
password = ask_text("Admin password")
|
||
|
password = make_password(password)
|
||
|
|
||
|
return dict(first_name=first_name, last_name=last_name, email=email, password=password)
|
||
|
|
||
|
|
||
|
def ask_facebook():
|
||
|
secret = ask_text("Facebook secret")
|
||
|
client_id = ask_text("Facebook client id")
|
||
|
return dict(secret=secret, client_id=client_id)
|
||
|
|
||
|
|
||
|
def ask_google():
|
||
|
secret = ask_text("Google secret")
|
||
|
client_id = ask_text("Google client id")
|
||
|
return dict(secret=secret, client_id=client_id)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
|
||
|
context = Context({
|
||
|
'now': str(datetime.now())
|
||
|
})
|
||
|
|
||
|
heading("Admin User")
|
||
|
if ask_yes_no("Do you want to set up a superuser?\n\n"
|
||
|
"Doing it now means you don't have to re-enter it every time\n"
|
||
|
"you rebuild the database in development."):
|
||
|
context['admin'] = ask_superuser()
|
||
|
|
||
|
heading("Facebook")
|
||
|
if ask_yes_no("Do you want to configure auth via Facebook?\n"
|
||
|
"You'll need the app secret and client."):
|
||
|
context['facebook'] = ask_facebook()
|
||
|
|
||
|
heading("Google")
|
||
|
if ask_yes_no("Do you want to configure auth via Google?\n"
|
||
|
"You'll need the app secret and client."):
|
||
|
context['google'] = ask_google()
|
||
|
|
||
|
with open('seed.sql', 'w') as out:
|
||
|
out.write(sql_template.render(context))
|
||
|
|
||
|
with open('allauthdemo/settings_generated.py', 'w') as out:
|
||
|
out.write(settings_template.render(context))
|
||
|
|
||
|
print("\nAll done!\n")
|
||
|
print("Have a look in seed.sql\n\n")
|
||
|
print("Next:\n make rebuild\n make run (or ``python manage.py runserver``)")
|
||
|
|