| 28 | | |
|---|
| 29 | | def _get_permission_codename(action, opts): |
|---|
| 30 | | return '%s_%s' % (action, opts.object_name.lower()) |
|---|
| 31 | | |
|---|
| 32 | | def _get_all_permissions(opts): |
|---|
| 33 | | "Returns (codename, name) for all permissions in the given opts." |
|---|
| 34 | | perms = [] |
|---|
| 35 | | if opts.admin: |
|---|
| 36 | | for action in ('add', 'change', 'delete'): |
|---|
| 37 | | perms.append((_get_permission_codename(action, opts), 'Can %s %s' % (action, opts.verbose_name))) |
|---|
| 38 | | return perms + list(opts.permissions) |
|---|
| 39 | | |
|---|
| 40 | | def _get_permission_insert(name, codename, opts): |
|---|
| 41 | | from django.db import backend |
|---|
| 42 | | return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \ |
|---|
| 43 | | (backend.quote_name('auth_permission'), backend.quote_name('name'), backend.quote_name('package'), |
|---|
| 44 | | backend.quote_name('codename'), name.replace("'", "''"), opts.app_label, codename) |
|---|
| 446 | | if install_permissions: |
|---|
| 447 | | try: |
|---|
| 448 | | installperms(app) |
|---|
| 449 | | except Exception, e: |
|---|
| 450 | | # stop trying to install permissions |
|---|
| 451 | | install_permissions = False |
|---|
| 452 | | sys.stderr.write("Permissions will not be installed because it "\ |
|---|
| 453 | | "appears that you are not using Django's auth framework. "\ |
|---|
| 454 | | "If you want to install them in the future, re-run syncdb."\ |
|---|
| 455 | | "\n(The full error was: %s)\n" % e) |
|---|
| 456 | | transaction.rollback_unless_managed() |
|---|
| 457 | | else: |
|---|
| 458 | | transaction.commit_unless_managed() |
|---|
| | 440 | dispatcher.send(signal=signals.post_syncdb, sender=app, |
|---|
| | 441 | app=app, created_models=created_models) |
|---|
| 476 | | |
|---|
| 477 | | # Create an initial "example.com" site (if we need to) |
|---|
| 478 | | from django.contrib.sites.models import Site |
|---|
| 479 | | if Site in created_models: |
|---|
| 480 | | print "Creating example site object" |
|---|
| 481 | | ex = Site(domain="example.com", name="example.com") |
|---|
| 482 | | ex.save() |
|---|
| 483 | | |
|---|
| 484 | | # If we just installed the User model, ask about creating a superuser |
|---|
| 485 | | from django.contrib.auth.models import User |
|---|
| 486 | | if User in created_models: |
|---|
| 487 | | msg = "\nYou just installed Django's auth system, which means you don't have " \ |
|---|
| 488 | | "any superusers defined.\nWould you like to create one now? (yes/no): " |
|---|
| 489 | | confirm = raw_input(msg) |
|---|
| 490 | | while 1: |
|---|
| 491 | | if confirm not in ('yes', 'no'): |
|---|
| 492 | | confirm = raw_input('Please enter either "yes" or "no": ') |
|---|
| 493 | | continue |
|---|
| 494 | | if confirm == 'yes': |
|---|
| 495 | | createsuperuser() |
|---|
| 496 | | break |
|---|
| 587 | | |
|---|
| 588 | | def installperms(app): |
|---|
| 589 | | "Installs any permissions for the given app, if needed." |
|---|
| 590 | | from django.contrib.contenttypes.models import ContentType |
|---|
| 591 | | from django.contrib.auth.models import Permission |
|---|
| 592 | | from django.db.models import get_models |
|---|
| 593 | | app_models = get_models(app) |
|---|
| 594 | | if not app_models: |
|---|
| 595 | | return |
|---|
| 596 | | app_label = app_models[0]._meta.app_label |
|---|
| 597 | | num_added = 0 |
|---|
| 598 | | for klass in app_models: |
|---|
| 599 | | opts = klass._meta |
|---|
| 600 | | ctype = ContentType.objects.get_for_model(klass) |
|---|
| 601 | | for codename, name in _get_all_permissions(opts): |
|---|
| 602 | | try: |
|---|
| 603 | | Permission.objects.get(name=name, codename=codename, content_type__pk=ctype.id) |
|---|
| 604 | | except Permission.DoesNotExist: |
|---|
| 605 | | p = Permission(name=name, codename=codename, content_type=ctype) |
|---|
| 606 | | p.save() |
|---|
| 607 | | print "Adding permission '%r'." % p |
|---|
| 608 | | num_added += 1 |
|---|
| 609 | | installperms.help_doc = "Installs any permissions for the given model module name(s), if needed." |
|---|
| 610 | | installperms.args = APP_ARGS |
|---|
| 667 | | |
|---|
| 668 | | def createsuperuser(username=None, email=None, password=None): |
|---|
| 669 | | "Creates a superuser account." |
|---|
| 670 | | from django.core import validators |
|---|
| 671 | | from django.contrib.auth.models import User |
|---|
| 672 | | import getpass |
|---|
| 673 | | |
|---|
| 674 | | try: |
|---|
| 675 | | import pwd |
|---|
| 676 | | except ImportError: |
|---|
| 677 | | default_username = '' |
|---|
| 678 | | else: |
|---|
| 679 | | # Determine the current system user's username, to use as a default. |
|---|
| 680 | | default_username = pwd.getpwuid(os.getuid())[0].replace(' ', '').lower() |
|---|
| 681 | | |
|---|
| 682 | | # Determine whether the default username is taken, so we don't display |
|---|
| 683 | | # it as an option. |
|---|
| 684 | | if default_username: |
|---|
| 685 | | try: |
|---|
| 686 | | User.objects.get(username=default_username) |
|---|
| 687 | | except User.DoesNotExist: |
|---|
| 688 | | pass |
|---|
| 689 | | else: |
|---|
| 690 | | default_username = '' |
|---|
| 691 | | |
|---|
| 692 | | try: |
|---|
| 693 | | while 1: |
|---|
| 694 | | if not username: |
|---|
| 695 | | input_msg = 'Username' |
|---|
| 696 | | if default_username: |
|---|
| 697 | | input_msg += ' (Leave blank to use %r)' % default_username |
|---|
| 698 | | username = raw_input(input_msg + ': ') |
|---|
| 699 | | if default_username and username == '': |
|---|
| 700 | | username = default_username |
|---|
| 701 | | if not username.isalnum(): |
|---|
| 702 | | sys.stderr.write("Error: That username is invalid. Use only letters, digits and underscores.\n") |
|---|
| 703 | | username = None |
|---|
| 704 | | try: |
|---|
| 705 | | User.objects.get(username=username) |
|---|
| 706 | | except User.DoesNotExist: |
|---|
| 707 | | break |
|---|
| 708 | | else: |
|---|
| 709 | | sys.stderr.write("Error: That username is already taken.\n") |
|---|
| 710 | | username = None |
|---|
| 711 | | while 1: |
|---|
| 712 | | if not email: |
|---|
| 713 | | email = raw_input('E-mail address: ') |
|---|
| 714 | | try: |
|---|
| 715 | | validators.isValidEmail(email, None) |
|---|
| 716 | | except validators.ValidationError: |
|---|
| 717 | | sys.stderr.write("Error: That e-mail address is invalid.\n") |
|---|
| 718 | | email = None |
|---|
| 719 | | else: |
|---|
| 720 | | break |
|---|
| 721 | | while 1: |
|---|
| 722 | | if not password: |
|---|
| 723 | | password = getpass.getpass() |
|---|
| 724 | | password2 = getpass.getpass('Password (again): ') |
|---|
| 725 | | if password != password2: |
|---|
| 726 | | sys.stderr.write("Error: Your passwords didn't match.\n") |
|---|
| 727 | | password = None |
|---|
| 728 | | continue |
|---|
| 729 | | if password.strip() == '': |
|---|
| 730 | | sys.stderr.write("Error: Blank passwords aren't allowed.\n") |
|---|
| 731 | | password = None |
|---|
| 732 | | continue |
|---|
| 733 | | break |
|---|
| 734 | | except KeyboardInterrupt: |
|---|
| 735 | | sys.stderr.write("\nOperation cancelled.\n") |
|---|
| 736 | | sys.exit(1) |
|---|
| 737 | | u = User.objects.create_user(username, email, password) |
|---|
| 738 | | u.is_staff = True |
|---|
| 739 | | u.is_active = True |
|---|
| 740 | | u.is_superuser = True |
|---|
| 741 | | u.save() |
|---|
| 742 | | print "User created successfully." |
|---|
| 743 | | createsuperuser.args = '[username] [email] [password] (Either all or none)' |
|---|