This repository has been archived on 2022-08-01. You can view files and clone it, but cannot push or open issues or pull requests.
DEMOS2/configure.py

168 lines
5 KiB
Python
Raw Normal View History

#!/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``)")