##// END OF EJS Templates
Added basic automatic user creation for container auth
Liad Shani -
r1621:cbc2b191 beta
parent child Browse files
Show More
@@ -223,9 +223,31 b' def authenticate(username, password):'
223 pass
223 pass
224 return False
224 return False
225
225
226 def login_container_auth(username):
227 user = User.get_by_username(username)
228 if user is None:
229 user_model = UserModel()
230 user_attrs = {
231 'name': username,
232 'lastname': None,
233 'email': None,
234 }
235 if not user_model.create_for_container_auth(username, user_attrs):
236 return None
237 user = User.get_by_username(username)
238 log.info('User %s was created by container authentication', username)
239
240 if not user.active:
241 return None
242
243 user.update_lastlogin()
244 log.debug('User %s is now logged in by container authentication', user.username)
245 return user
246
226 def get_container_username(environ, cfg=config):
247 def get_container_username(environ, cfg=config):
227 from paste.httpheaders import REMOTE_USER
248 from paste.httpheaders import REMOTE_USER
228 from paste.deploy.converters import asbool
249 from paste.deploy.converters import asbool
250
229 username = REMOTE_USER(environ)
251 username = REMOTE_USER(environ)
230
252
231 if not username and asbool(cfg.get('proxypass_auth_enabled', False)):
253 if not username and asbool(cfg.get('proxypass_auth_enabled', False)):
@@ -278,14 +300,12 b' class AuthUser(object):'
278 is_user_loaded = user_model.fill_data(self, user_id=self.user_id)
300 is_user_loaded = user_model.fill_data(self, user_id=self.user_id)
279 elif self.username:
301 elif self.username:
280 log.debug('Auth User lookup by USER NAME %s', self.username)
302 log.debug('Auth User lookup by USER NAME %s', self.username)
281 dbuser = User.get_by_username(self.username)
303 dbuser = login_container_auth(self.username)
282 if dbuser is not None and dbuser.active:
304 if dbuser is not None:
283 for k, v in dbuser.get_dict().items():
305 for k, v in dbuser.get_dict().items():
284 setattr(self, k, v)
306 setattr(self, k, v)
285 self.set_authenticated()
307 self.set_authenticated()
286 is_user_loaded = True
308 is_user_loaded = True
287 log.debug('User %s is now logged in', self.username)
288 dbuser.update_lastlogin()
289
309
290 if not is_user_loaded:
310 if not is_user_loaded:
291 if self.anonymous_user.active is True:
311 if self.anonymous_user.active is True:
@@ -455,7 +455,8 b' HasRepoPermissionAny, HasRepoPermissionA'
455
455
456 def gravatar_url(email_address, size=30):
456 def gravatar_url(email_address, size=30):
457 if not str2bool(config['app_conf'].get('use_gravatar')) or \
457 if not str2bool(config['app_conf'].get('use_gravatar')) or \
458 email_address == 'anonymous@rhodecode.org':
458 not email_address or \
459 email_address == 'anonymous@rhodecode.org':
459 return url("/images/user%s.png" % size)
460 return url("/images/user%s.png" % size)
460
461
461 ssl_enabled = 'https' == request.environ.get('wsgi.url_scheme')
462 ssl_enabled = 'https' == request.environ.get('wsgi.url_scheme')
@@ -92,6 +92,35 b' class UserModel(BaseModel):'
92 self.sa.rollback()
92 self.sa.rollback()
93 raise
93 raise
94
94
95 def create_for_container_auth(self, username, attrs):
96 """
97 Creates the given user if it's not already in the database
98
99 :param username:
100 :param attrs:
101 """
102 if self.get_by_username(username, case_insensitive=True) is None:
103 try:
104 new_user = User()
105 new_user.username = username
106 new_user.password = None
107 new_user.api_key = generate_api_key(username)
108 new_user.email = attrs['email']
109 new_user.active = True
110 new_user.name = attrs['name']
111 new_user.lastname = attrs['lastname']
112
113 self.sa.add(new_user)
114 self.sa.commit()
115 return True
116 except (DatabaseError,):
117 log.error(traceback.format_exc())
118 self.sa.rollback()
119 raise
120 log.debug('User %s already exists. Skipping creation of account for container auth.',
121 username)
122 return False
123
95 def create_ldap(self, username, password, user_dn, attrs):
124 def create_ldap(self, username, password, user_dn, attrs):
96 """
125 """
97 Checks if user is in database, if not creates this user marked
126 Checks if user is in database, if not creates this user marked
General Comments 0
You need to be logged in to leave comments. Login now