Comment 5 for bug 1064822

Revision history for this message
Svetlana Shturm (sshturm) wrote :

I had this problem in folsom branch. It happens because option creation in a select tag of the login form currently uses endpoint address as a value. In case if we have equal endpoints with different regions, we can't get a region by this value. In folsom branch authenticate using django-backend now. So, If you want fix this bug you must change this code:

/usr/local/lib/python2.7/dist-packages/openstack_auth/forms.py
@staticmethod
    def get_region_choices():
        default_region = (settings.OPENSTACK_KEYSTONE_URL, "Default Region")
  - return getattr(settings, 'AVAILABLE_REGIONS', [default_region])
  + regions = getattr(settings, 'AVAILABLE_REGIONS', [default_region])
  + options = []
  + return [('_'.join([region[0], region[1]]), region[1]) for region in regions]

@sensitive_variables()
    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
 - region = self.cleaned_data.get('region')
 + region = self.cleaned_data.get('region').split('_')[0]

/usr/local/lib/python2.7/dist-packages/openstack_auth/views.py
@never_cache
def login(request):
    """ Logs a user in using the :class:`~openstack_auth.forms.Login` form. """
    # Get our initial region for the form.
    initial = {}
    current_region = request.session.get('region_endpoint', None)
- requested_region = request.GET.get('region', None)
+ requested_region = requested_region_name = None
+ requested_option = request.POST.get('region', None)
+ if requested_option is not None:
+ requested_region, requested_region_name = requested_option.split('_')

    if request.user.is_authenticated():
        set_session_from_user(request, request.user)
        region = request.user.endpoint
        region_name = dict(Login.get_region_choices()).get(region)
        request.session['region_endpoint'] = region
- request.session['region_name'] = region_name
+ request.session['region_name'] = requested_region_name