def save_users(users, args, parser): properties = defaultdict(dict) if users: print('Users:') for username, data in six.iteritems(users): username = username.lower() try: backend.create_user(user=username) created = True except UserExists: created = False if not created and args.skip_existing_users: continue # handle password: if 'password' in data and (created or args.overwrite_passwords): pwd = data['password'] if isinstance(pwd, six.string_types): backend.set_password(user=username, password=pwd) print('* %s: Set password from input data.' % username) elif isinstance(pwd, dict): try: backend.set_password_hash(user=username, **pwd) print('* %s: Set hash from input data.' % username) except ValueError: print('* %s: Hash of type "%s" is not supported, skipping.' % (username, pwd['algorithm'])) else: raise TypeError("password is of type %s." % type(pwd).__name__) elif created and args.gen_passwords: raw_passwd = Service.objects.make_random_password(length=16) backend.set_password(user=username, password=raw_passwd) print('* %s: Generated password: %s' % (username, raw_passwd)) # handle all other preferences for key, value in six.iteritems(data.get('properties', {})): if key in TIMESTAMP_PROPS: if isinstance(value, (int, float)): value = datetime.fromtimestamp(value) else: # parse time, to ensure correct format value = datetime.strptime(value, TIMESTAMP_FORMAT) value = datetime.strftime(value, TIMESTAMP_FORMAT) properties[username][key] = value return properties
def put(self, request, largs, name): """Change a users password.""" if not request.user.has_perm('Users.user_change_password'): return HttpResponseForbidden() # If BadRequest: 400 Bad Request password = self._parse_put(request) if password: if len(password) < settings.MIN_PASSWORD_LENGTH: raise PasswordInvalid("Password too short") else: password = None # If UserNotFound: 404 Not Found backend.set_password(user=name, password=password) return HttpResponseNoContent()
def set_password(self, raw_password): if raw_password is None: self.set_unusable_password() else: backend.set_password(self.username, self.domain, raw_password)
def main(args=None): # parse arguments args = parser.parse_args(args=args) if args.action == 'add': password = args.get_password(args) if args.password_generated: print(args.pwd) backend.set_password(user=args.user, password=password) elif args.action in ['ls', 'list']: for username in sorted(backend.list_users()): if six.PY3: # pragma: py3 print(username) else: # pragma: py2 print(username.encode('utf-8')) elif args.action == 'verify': if not args.pwd: # pragma: no cover args.pwd = getpass.getpass('password: '******'Ok.') else: print('Failed.') sys.exit(1) elif args.action == 'set-password': password = args.get_password(args) if args.password_generated: print(args.pwd) backend.set_password(user=args.user, password=args.pwd) elif args.action == 'view': props = backend.get_properties(user=args.user) if 'date joined' in props: print('Joined: %s' % props['date joined']) if 'last login' in props: print('Last login: %s' % props['last login']) if args.service: groups = backend.list_groups(service=args.service, user=args.user) if groups: print('Groups: %s' % ', '.join(sorted(groups))) else: print('No groups.') else: if backend.SUPPORTS_GROUP_VISIBILITY: groups = {} none_groups = backend.list_groups(service=None, user=args.user) for service in Service.objects.all(): subgroups = backend.list_groups(service=service, user=args.user) if subgroups: groups[service.username] = subgroups if groups or none_groups: print('Groups:') if none_groups: print('* no service: %s' % ', '.join(sorted(none_groups))) for service, groups in sorted(groups.items(), key=lambda t: t[0]): print('* %s: %s' % (service, ', '.join(sorted(groups)))) else: print('No groups.') else: groups = backend.list_groups(service=None, user=args.user) if groups: print('Groups: %s' % ', '.join(sorted(groups))) else: print('No groups.') elif args.action == 'rename': try: backend.rename_user(user=args.user, name=args.name) except UserNotFound as e: parser.error("%s: %s" % (args.name, e)) except UserExists as e: parser.error("%s: %s" % (args.name, e)) elif args.action in ['delete', 'rm', 'remove']: # pragma: no branch backend.remove_user(user=args.user)
def handle_key(self, key, form): backend.set_password(username=key.user.username, domain=key.user.domain, password=form.cleaned_data['password']) key.user.confirmed = now() key.user.save()