summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkihiro Motoki <amotoki@gmail.com>2017-11-30 01:45:01 +0900
committerAkihiro Motoki <amotoki@gmail.com>2017-12-23 03:22:21 +0900
commit2baea728dd561fc5b989c75fe8b4f4b583d470eb (patch)
tree860a826c152633fed691d2f8a6ae1c8e7f26d045
parent1fa9ae26cc6006f8ee94fabddb7fea171adee55d (diff)
Retire project
In Queens development cycle, openstack_auth code was merged into the horizon repository. blueprint merge-openstack-auth Change-Id: I74b10a90fe79fc768cfb8de6f68d3cd2f4938e51
Notes
Notes (review): Code-Review+2: Ying Zuo <yinzuo@cisco.com> Workflow+1: Ying Zuo <yinzuo@cisco.com> Verified+2: Zuul Submitted-by: Zuul Submitted-at: Tue, 09 Jan 2018 04:56:53 +0000 Reviewed-on: https://review.openstack.org/523928 Project: openstack/django_openstack_auth Branch: refs/heads/master
-rw-r--r--.gitignore14
-rw-r--r--.gitreview4
-rw-r--r--.mailmap5
-rw-r--r--CONTRIBUTING.rst17
-rw-r--r--LICENSE176
-rw-r--r--MANIFEST.in6
-rw-r--r--README.rst33
-rw-r--r--babel-django.cfg1
-rw-r--r--doc/source/conf.py170
-rw-r--r--doc/source/configuration/index.rst442
-rw-r--r--doc/source/index.rst21
-rw-r--r--doc/source/install/index.rst63
-rw-r--r--doc/source/reference/backend.rst6
-rw-r--r--doc/source/reference/forms.rst6
-rw-r--r--doc/source/reference/index.rst13
-rw-r--r--doc/source/reference/user.rst6
-rw-r--r--doc/source/reference/utils.rst6
-rw-r--r--doc/source/reference/views.rst6
-rw-r--r--openstack_auth/__init__.py17
-rw-r--r--openstack_auth/backend.py282
-rw-r--r--openstack_auth/exceptions.py17
-rw-r--r--openstack_auth/forms.py155
-rw-r--r--openstack_auth/locale/cs/LC_MESSAGES/django.po74
-rw-r--r--openstack_auth/locale/de/LC_MESSAGES/django.po103
-rw-r--r--openstack_auth/locale/en_AU/LC_MESSAGES/django.po75
-rw-r--r--openstack_auth/locale/en_GB/LC_MESSAGES/django.po97
-rw-r--r--openstack_auth/locale/es/LC_MESSAGES/django.po97
-rw-r--r--openstack_auth/locale/es_MX/LC_MESSAGES/django.po74
-rw-r--r--openstack_auth/locale/fr/LC_MESSAGES/django.po105
-rw-r--r--openstack_auth/locale/id/LC_MESSAGES/django.po98
-rw-r--r--openstack_auth/locale/it/LC_MESSAGES/django.po76
-rw-r--r--openstack_auth/locale/ja/LC_MESSAGES/django.po101
-rw-r--r--openstack_auth/locale/ko_KR/LC_MESSAGES/django.po98
-rw-r--r--openstack_auth/locale/nl_NL/LC_MESSAGES/django.po52
-rw-r--r--openstack_auth/locale/pa_IN/LC_MESSAGES/django.po71
-rw-r--r--openstack_auth/locale/pl_PL/LC_MESSAGES/django.po75
-rw-r--r--openstack_auth/locale/pt_BR/LC_MESSAGES/django.po100
-rw-r--r--openstack_auth/locale/ru/LC_MESSAGES/django.po87
-rw-r--r--openstack_auth/locale/tr_TR/LC_MESSAGES/django.po99
-rw-r--r--openstack_auth/locale/uk/LC_MESSAGES/django.po50
-rw-r--r--openstack_auth/locale/zh_CN/LC_MESSAGES/django.po99
-rw-r--r--openstack_auth/locale/zh_TW/LC_MESSAGES/django.po90
-rw-r--r--openstack_auth/models.py18
-rw-r--r--openstack_auth/plugin/__init__.py22
-rw-r--r--openstack_auth/plugin/base.py241
-rw-r--r--openstack_auth/plugin/k2k.py107
-rw-r--r--openstack_auth/plugin/password.py51
-rw-r--r--openstack_auth/plugin/token.py41
-rw-r--r--openstack_auth/policy.py231
-rw-r--r--openstack_auth/tests/__init__.py0
-rw-r--r--openstack_auth/tests/conf/keystone_policy.json146
-rw-r--r--openstack_auth/tests/conf/nova_policy.json274
-rw-r--r--openstack_auth/tests/conf/policy.v3cloudsample.json195
-rw-r--r--openstack_auth/tests/data_v2.py143
-rw-r--r--openstack_auth/tests/data_v3.py361
-rw-r--r--openstack_auth/tests/models.py0
-rw-r--r--openstack_auth/tests/run_tests.py42
-rw-r--r--openstack_auth/tests/settings.py76
-rw-r--r--openstack_auth/tests/templates/auth/blank.html0
-rw-r--r--openstack_auth/tests/templates/auth/login.html11
-rw-r--r--openstack_auth/tests/tests.py1522
-rw-r--r--openstack_auth/tests/urls.py29
-rw-r--r--openstack_auth/urls.py36
-rw-r--r--openstack_auth/user.py454
-rw-r--r--openstack_auth/utils.py562
-rw-r--r--openstack_auth/views.py327
-rw-r--r--requirements.txt10
-rw-r--r--setup.cfg53
-rw-r--r--setup.py29
-rw-r--r--test-requirements.txt11
-rwxr-xr-xtools/tox_install.sh30
-rw-r--r--tox.ini64
72 files changed, 8 insertions, 8265 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 4b707c4..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
1*.pyc
2*.egg
3*.egg-info
4*.mo
5.DS_STORE
6doc/build
7build
8dist
9.tox
10AUTHORS
11ChangeLog
12.coverage
13reports
14coverage.xml
diff --git a/.gitreview b/.gitreview
deleted file mode 100644
index 118f700..0000000
--- a/.gitreview
+++ /dev/null
@@ -1,4 +0,0 @@
1[gerrit]
2host=review.openstack.org
3port=29418
4project=openstack/django_openstack_auth.git
diff --git a/.mailmap b/.mailmap
deleted file mode 100644
index 44af5cb..0000000
--- a/.mailmap
+++ /dev/null
@@ -1,5 +0,0 @@
1<david.lyle@hp.com> <david-lyle@davidlyle-VirtualBox.(none)>
2<lin-hua.cheng@hp.com> <lin_hua_cheng@yahoo.com>
3Eric Peterson <ericpeterson@hp.com> ericpeterson-l <ericpeterson@hp.com>
4Eric Peterson <ericpeterson@hp.com> erpet <ericpeterson@hp.com>
5Lin Hua Cheng <lin-hua.cheng@hp.com> linhuacheng <lin-hua.cheng@hp.com>
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
deleted file mode 100644
index 1afee20..0000000
--- a/CONTRIBUTING.rst
+++ /dev/null
@@ -1,17 +0,0 @@
1If you would like to contribute to the development of OpenStack,
2you must follow the steps documented at:
3
4 http://docs.openstack.org/infra/manual/developers.html
5
6If you already have a good understanding of how the system works and
7your OpenStack accounts are set up, you can skip to the development
8workflow section of this documentation to learn how changes to
9OpenStack should be submitted for review via the Gerrit tool:
10
11 http://docs.openstack.org/infra/manual/developers.html#development-workflow
12
13Pull requests submitted through GitHub will be ignored.
14
15Bugs should be filed on Launchpad, not GitHub:
16
17 https://bugs.launchpad.net/django-openstack-auth
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 68c771a..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,176 +0,0 @@
1
2 Apache License
3 Version 2.0, January 2004
4 http://www.apache.org/licenses/
5
6 TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
8 1. Definitions.
9
10 "License" shall mean the terms and conditions for use, reproduction,
11 and distribution as defined by Sections 1 through 9 of this document.
12
13 "Licensor" shall mean the copyright owner or entity authorized by
14 the copyright owner that is granting the License.
15
16 "Legal Entity" shall mean the union of the acting entity and all
17 other entities that control, are controlled by, or are under common
18 control with that entity. For the purposes of this definition,
19 "control" means (i) the power, direct or indirect, to cause the
20 direction or management of such entity, whether by contract or
21 otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 outstanding shares, or (iii) beneficial ownership of such entity.
23
24 "You" (or "Your") shall mean an individual or Legal Entity
25 exercising permissions granted by this License.
26
27 "Source" form shall mean the preferred form for making modifications,
28 including but not limited to software source code, documentation
29 source, and configuration files.
30
31 "Object" form shall mean any form resulting from mechanical
32 transformation or translation of a Source form, including but
33 not limited to compiled object code, generated documentation,
34 and conversions to other media types.
35
36 "Work" shall mean the work of authorship, whether in Source or
37 Object form, made available under the License, as indicated by a
38 copyright notice that is included in or attached to the work
39 (an example is provided in the Appendix below).
40
41 "Derivative Works" shall mean any work, whether in Source or Object
42 form, that is based on (or derived from) the Work and for which the
43 editorial revisions, annotations, elaborations, or other modifications
44 represent, as a whole, an original work of authorship. For the purposes
45 of this License, Derivative Works shall not include works that remain
46 separable from, or merely link (or bind by name) to the interfaces of,
47 the Work and Derivative Works thereof.
48
49 "Contribution" shall mean any work of authorship, including
50 the original version of the Work and any modifications or additions
51 to that Work or Derivative Works thereof, that is intentionally
52 submitted to Licensor for inclusion in the Work by the copyright owner
53 or by an individual or Legal Entity authorized to submit on behalf of
54 the copyright owner. For the purposes of this definition, "submitted"
55 means any form of electronic, verbal, or written communication sent
56 to the Licensor or its representatives, including but not limited to
57 communication on electronic mailing lists, source code control systems,
58 and issue tracking systems that are managed by, or on behalf of, the
59 Licensor for the purpose of discussing and improving the Work, but
60 excluding communication that is conspicuously marked or otherwise
61 designated in writing by the copyright owner as "Not a Contribution."
62
63 "Contributor" shall mean Licensor and any individual or Legal Entity
64 on behalf of whom a Contribution has been received by Licensor and
65 subsequently incorporated within the Work.
66
67 2. Grant of Copyright License. Subject to the terms and conditions of
68 this License, each Contributor hereby grants to You a perpetual,
69 worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 copyright license to reproduce, prepare Derivative Works of,
71 publicly display, publicly perform, sublicense, and distribute the
72 Work and such Derivative Works in Source or Object form.
73
74 3. Grant of Patent License. Subject to the terms and conditions of
75 this License, each Contributor hereby grants to You a perpetual,
76 worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 (except as stated in this section) patent license to make, have made,
78 use, offer to sell, sell, import, and otherwise transfer the Work,
79 where such license applies only to those patent claims licensable
80 by such Contributor that are necessarily infringed by their
81 Contribution(s) alone or by combination of their Contribution(s)
82 with the Work to which such Contribution(s) was submitted. If You
83 institute patent litigation against any entity (including a
84 cross-claim or counterclaim in a lawsuit) alleging that the Work
85 or a Contribution incorporated within the Work constitutes direct
86 or contributory patent infringement, then any patent licenses
87 granted to You under this License for that Work shall terminate
88 as of the date such litigation is filed.
89
90 4. Redistribution. You may reproduce and distribute copies of the
91 Work or Derivative Works thereof in any medium, with or without
92 modifications, and in Source or Object form, provided that You
93 meet the following conditions:
94
95 (a) You must give any other recipients of the Work or
96 Derivative Works a copy of this License; and
97
98 (b) You must cause any modified files to carry prominent notices
99 stating that You changed the files; and
100
101 (c) You must retain, in the Source form of any Derivative Works
102 that You distribute, all copyright, patent, trademark, and
103 attribution notices from the Source form of the Work,
104 excluding those notices that do not pertain to any part of
105 the Derivative Works; and
106
107 (d) If the Work includes a "NOTICE" text file as part of its
108 distribution, then any Derivative Works that You distribute must
109 include a readable copy of the attribution notices contained
110 within such NOTICE file, excluding those notices that do not
111 pertain to any part of the Derivative Works, in at least one
112 of the following places: within a NOTICE text file distributed
113 as part of the Derivative Works; within the Source form or
114 documentation, if provided along with the Derivative Works; or,
115 within a display generated by the Derivative Works, if and
116 wherever such third-party notices normally appear. The contents
117 of the NOTICE file are for informational purposes only and
118 do not modify the License. You may add Your own attribution
119 notices within Derivative Works that You distribute, alongside
120 or as an addendum to the NOTICE text from the Work, provided
121 that such additional attribution notices cannot be construed
122 as modifying the License.
123
124 You may add Your own copyright statement to Your modifications and
125 may provide additional or different license terms and conditions
126 for use, reproduction, or distribution of Your modifications, or
127 for any such Derivative Works as a whole, provided Your use,
128 reproduction, and distribution of the Work otherwise complies with
129 the conditions stated in this License.
130
131 5. Submission of Contributions. Unless You explicitly state otherwise,
132 any Contribution intentionally submitted for inclusion in the Work
133 by You to the Licensor shall be under the terms and conditions of
134 this License, without any additional terms or conditions.
135 Notwithstanding the above, nothing herein shall supersede or modify
136 the terms of any separate license agreement you may have executed
137 with Licensor regarding such Contributions.
138
139 6. Trademarks. This License does not grant permission to use the trade
140 names, trademarks, service marks, or product names of the Licensor,
141 except as required for reasonable and customary use in describing the
142 origin of the Work and reproducing the content of the NOTICE file.
143
144 7. Disclaimer of Warranty. Unless required by applicable law or
145 agreed to in writing, Licensor provides the Work (and each
146 Contributor provides its Contributions) on an "AS IS" BASIS,
147 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 implied, including, without limitation, any warranties or conditions
149 of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 PARTICULAR PURPOSE. You are solely responsible for determining the
151 appropriateness of using or redistributing the Work and assume any
152 risks associated with Your exercise of permissions under this License.
153
154 8. Limitation of Liability. In no event and under no legal theory,
155 whether in tort (including negligence), contract, or otherwise,
156 unless required by applicable law (such as deliberate and grossly
157 negligent acts) or agreed to in writing, shall any Contributor be
158 liable to You for damages, including any direct, indirect, special,
159 incidental, or consequential damages of any character arising as a
160 result of this License or out of the use or inability to use the
161 Work (including but not limited to damages for loss of goodwill,
162 work stoppage, computer failure or malfunction, or any and all
163 other commercial damages or losses), even if such Contributor
164 has been advised of the possibility of such damages.
165
166 9. Accepting Warranty or Additional Liability. While redistributing
167 the Work or Derivative Works thereof, You may choose to offer,
168 and charge a fee for, acceptance of support, warranty, indemnity,
169 or other liability obligations and/or rights consistent with this
170 License. However, in accepting such obligations, You may act only
171 on Your own behalf and on Your sole responsibility, not on behalf
172 of any other Contributor, and only if You agree to indemnify,
173 defend, and hold each Contributor harmless for any liability
174 incurred by, or claims asserted against, such Contributor by reason
175 of your accepting any such warranty or additional liability.
176
diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index c978a52..0000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,6 +0,0 @@
1include AUTHORS
2include ChangeLog
3exclude .gitignore
4exclude .gitreview
5
6global-exclude *.pyc
diff --git a/README.rst b/README.rst
index 73f28e5..2902c38 100644
--- a/README.rst
+++ b/README.rst
@@ -1,27 +1,10 @@
1======================== 1The code has been merged into openstack/horizon.
2Team and repository tags
3========================
4 2
5.. image:: http://governance.openstack.org/badges/django_openstack_auth.svg 3The contents of this repository are still available in the Git
6 :target: http://governance.openstack.org/reference/tags/index.html 4source code management system. To see the contents of this
5repository before it was merged into the horizon repo,
6please check out the previous commit with "git checkout HEAD^1".
7 7
8.. Change things from this point on 8For any further questions, please email
9 9openstack-dev@lists.openstack.org or
10===================== 10join #openstack-horizon on Freenode.
11Django OpenStack Auth
12=====================
13
14Django OpenStack Auth is a pluggable Django authentication backend that
15works with Django's ``contrib.auth`` framework to authenticate a user against
16OpenStack's Keystone Identity API.
17
18The current version is designed to work with the Keystone v2.0 and v3 API.
19
20You can `view the installation instructions`_ on Read The Docs.
21
22.. _view the installation instructions: http://docs.openstack.org/developer/django_openstack_auth/
23
24* License: Apache License, Version 2.0
25* Documentation: http://django-openstack-auth.readthedocs.org/en/latest/
26* Source: http://git.openstack.org/cgit/openstack/django_openstack_auth/
27* Bugs: https://bugs.launchpad.net/django-openstack-auth
diff --git a/babel-django.cfg b/babel-django.cfg
deleted file mode 100644
index efceab8..0000000
--- a/babel-django.cfg
+++ /dev/null
@@ -1 +0,0 @@
1[python: **.py]
diff --git a/doc/source/conf.py b/doc/source/conf.py
deleted file mode 100644
index 9faa27e..0000000
--- a/doc/source/conf.py
+++ /dev/null
@@ -1,170 +0,0 @@
1# -*- coding: utf-8 -*-
2#
3# Django OpenStack Auth documentation build configuration file, created by
4# sphinx-quickstart on Sun Jul 8 15:13:36 2012.
5#
6# This file is execfile()d with the current directory set to its containing dir.
7#
8# Note that not all possible configuration values are present in this
9# autogenerated file.
10#
11# All configuration values have a default; values that are commented out
12# serve to show the default.
13
14import os
15
16import django
17
18os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'openstack_auth.tests.settings')
19
20django.setup()
21
22# If extensions (or modules to document with autodoc) are in another directory,
23# add these directories to sys.path here. If the directory is relative to the
24# documentation root, use os.path.abspath to make it absolute, like shown here.
25#sys.path.insert(0, os.path.abspath('.'))
26
27# -- General configuration -----------------------------------------------------
28
29# If your documentation needs a minimal Sphinx version, state it here.
30#needs_sphinx = '1.0'
31
32# Add any Sphinx extension module names here, as strings. They can be extensions
33# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
34extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'openstackdocstheme']
35
36# openstackdocstheme options
37repository_name = 'openstack/django_openstack_auth'
38bug_project = 'django-openstack-auth'
39bug_tag = ''
40html_last_updated_fmt = '%Y-%m-%d %H:%M'
41
42# Add any paths that contain templates here, relative to this directory.
43templates_path = ['_templates']
44
45# The suffix of source filenames.
46source_suffix = '.rst'
47
48# The encoding of source files.
49#source_encoding = 'utf-8-sig'
50
51# The master toctree document.
52master_doc = 'index'
53
54# General information about the project.
55project = u'Django OpenStack Auth'
56copyright = u'2012, Gabriel Hurley'
57
58# The language for content autogenerated by Sphinx. Refer to documentation
59# for a list of supported languages.
60#language = None
61
62# There are two options for replacing |today|: either, you set today to some
63# non-false value, then it is used:
64#today = ''
65# Else, today_fmt is used as the format for a strftime call.
66#today_fmt = '%B %d, %Y'
67
68# List of patterns, relative to source directory, that match files and
69# directories to ignore when looking for source files.
70exclude_patterns = ['_build']
71
72# The reST default role (used for this markup: `text`) to use for all documents.
73#default_role = None
74
75# If true, '()' will be appended to :func: etc. cross-reference text.
76#add_function_parentheses = True
77
78# If true, the current module name will be prepended to all description
79# unit titles (such as .. function::).
80#add_module_names = True
81
82# If true, sectionauthor and moduleauthor directives will be shown in the
83# output. They are ignored by default.
84#show_authors = False
85
86# The name of the Pygments (syntax highlighting) style to use.
87pygments_style = 'sphinx'
88
89# A list of ignored prefixes for module index sorting.
90modindex_common_prefix = ['openstack_auth.']
91
92
93# -- Options for HTML output ---------------------------------------------------
94
95# The theme to use for HTML and HTML Help pages. See the documentation for
96# a list of builtin themes.
97html_theme = 'openstackdocs'
98
99# Theme options are theme-specific and customize the look and feel of a theme
100# further. For a list of options available for each theme, see the
101# documentation.
102#html_theme_options = {}
103
104# Add any paths that contain custom themes here, relative to this directory.
105#html_theme_path = []
106
107# The name for this set of Sphinx documents. If None, it defaults to
108# "<project> v<release> documentation".
109#html_title = None
110
111# A shorter title for the navigation bar. Default is the same as html_title.
112#html_short_title = None
113
114# The name of an image file (relative to this directory) to place at the top
115# of the sidebar.
116#html_logo = None
117
118# The name of an image file (within the static path) to use as favicon of the
119# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
120# pixels large.
121#html_favicon = None
122
123# Add any paths that contain custom static files (such as style sheets) here,
124# relative to this directory. They are copied after the builtin static files,
125# so a file named "default.css" will overwrite the builtin "default.css".
126#html_static_path = []
127
128# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
129# using the given strftime format.
130#html_last_updated_fmt = '%b %d, %Y'
131
132# If true, SmartyPants will be used to convert quotes and dashes to
133# typographically correct entities.
134#html_use_smartypants = True
135
136# Custom sidebar templates, maps document names to template names.
137#html_sidebars = {}
138
139# Additional templates that should be rendered to pages, maps page names to
140# template names.
141#html_additional_pages = {}
142
143# If false, no module index is generated.
144#html_domain_indices = True
145
146# If false, no index is generated.
147#html_use_index = True
148
149# If true, the index is split into individual pages for each letter.
150#html_split_index = False
151
152# If true, links to the reST sources are added to the pages.
153#html_show_sourcelink = True
154
155# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
156#html_show_sphinx = True
157
158# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
159#html_show_copyright = True
160
161# If true, an OpenSearch description file will be output, and all pages will
162# contain a <link> tag referring to it. The value of this option must be the
163# base URL from which the finished HTML is served.
164#html_use_opensearch = ''
165
166# This is the file name suffix for HTML files (e.g. ".xhtml").
167#html_file_suffix = None
168
169# Output file base name for HTML help builder.
170htmlhelp_basename = 'DjangoOpenStackAuthdoc'
diff --git a/doc/source/configuration/index.rst b/doc/source/configuration/index.rst
deleted file mode 100644
index 06c300b..0000000
--- a/doc/source/configuration/index.rst
+++ /dev/null
@@ -1,442 +0,0 @@
1=============
2Configuration
3=============
4
5Django OpenStack Auth is configured through Django ``settings.py`` file.
6In most cases it is used combined with the OpenStack Dashboard,
7so the settings file will be ``local/local_settings.py`` file
8in your OpenStack Dashboard deployment.
9
10This page covers the configuration options referred by Django OpenStack Auth.
11
12:ref:`Some settings <settings-shared-with-horizon>` are also referred to
13by Horizon. Configure them carefully.
14
15General settings
16================
17
18``AUTHENTICATION_PLUGINS``
19--------------------------
20
21Default: ``['openstack_auth.plugin.password.PasswordPlugin', 'openstack_auth.plugin.token.TokenPlugin']``
22
23A list of authentication plugins to be used.
24In most cases, there is no need to configure this.
25
26``AVAILABLE_REGIONS``
27---------------------
28
29Default: ``None``
30
31A list of tuples which define multiple regions. The tuple format is
32``('http://{{ keystone_host }}:5000/v2.0', '{{ region_name }}')``. If any regions
33are specified the login form will have a dropdown selector for authenticating
34to the appropriate region, and there will be a region switcher dropdown in
35the site header when logged in.
36
37You should also define ``OPENSTACK_KEYSTONE_URL`` to indicate which of
38the regions is the default one.
39
40
41``DEFAULT_SERVICE_REGIONS``
42---------------------------
43
44Default: ``{}``
45
46The default service region is set on a per-endpoint basis, meaning that once
47the user logs into some Keystone endpoint, if a default service region is
48defined for it in this setting and exists within Keystone catalog, it will be
49set as the initial service region in this endpoint. By default it is an empty
50dictionary because upstream can neither predict service region names in a
51specific deployment, nor tell whether this behavior is desired. The key of the
52dictionary is a full url of a Keystone endpoint with version suffix, the value
53is a region name.
54
55Example::
56
57 DEFAULT_SERVICE_REGIONS = {
58 OPENSTACK_KEYSTONE_URL: 'RegionOne'
59 }
60
61
62``OPENSTACK_API_VERSIONS``
63--------------------------
64
65Default::
66
67 {
68 "identity": 2.0,
69 ...,
70 }
71
72Overrides for OpenStack API versions. Use this setting to force the
73OpenStack dashboard to use a specific API version for a given service API.
74Django OpenStack Auth refers to only the ``"identity"`` entry.
75The current valid values are "2.0" or "3".
76
77.. note::
78
79 See `Horizon settings
80 <https://docs.openstack.org/developer/horizon/install/settings.html#openstack-api-versions>`__
81 for the full description of this setting.
82
83``OPENSTACK_ENDPOINT_TYPE``
84---------------------------
85
86Default: ``"publicURL"``
87
88A string which specifies the endpoint type to use for the endpoints in the
89Keystone service catalog. The default value for all services except for
90identity is ``"publicURL"``. The default value for the identity service is
91``"internalURL"``.
92
93``OPENSTACK_KEYSTONE_ADMIN_ROLES``
94----------------------------------
95
96Default: ``["admin"]``
97
98The list of roles that have administrator privileges in this OpenStack
99installation. This check is very basic and essentially only works with
100keystone v2.0 and v3 with the default policy file. The setting assumes there
101is a common ``admin`` like role(s) across services. Example uses of this
102setting are:
103
104* to rename the ``admin`` role to ``cloud-admin``
105* allowing multiple roles to have administrative privileges, like
106 ``["admin", "cloud-admin", "net-op"]``
107
108``OPENSTACK_KEYSTONE_DEFAULT_DOMAIN``
109-------------------------------------
110
111Default: ``"Default"``
112
113Overrides the default domain used when running on single-domain model
114with Keystone V3. All entities will be created in the default domain.
115
116.. note::
117
118 This value must be the name of the default domain, NOT the ID.
119 Also, you will most likely have a value in the keystone policy file like
120 ``"cloud_admin": "rule:admin_required and domain_id:<your domain id>"``.
121 This value must be the name of the domain whose ID is specified there.
122
123``OPENSTACK_KEYSTONE_DOMAIN_CHOICES``
124-------------------------------------
125
126.. versionadded:: 12.0.0(Pike)
127
128Default::
129
130 (
131 ('Default', 'Default'),
132 )
133
134If OPENSTACK_KEYSTONE_DOMAIN_DROPDOWN is enabled, this option can be used to
135set the available domains to choose from. This is a list of pairs whose first
136value is the domain name and the second is the display name.
137
138``OPENSTACK_KEYSTONE_DOMAIN_DROPDOWN``
139--------------------------------------
140
141.. versionadded:: 12.0.0(Pike)
142
143Default: ``False``
144Set this to True if you want available domains displayed as a dropdown menu on
145the login screen. It is strongly advised NOT to enable this for public clouds,
146as advertising enabled domains to unauthenticated customers irresponsibly
147exposes private information. This should only be used for private clouds where
148the dashboard sits behind a corporate firewall.
149
150``OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT``
151------------------------------------------
152
153Default: ``False``
154
155Set this to True if running on multi-domain model. When this is enabled, it
156will require user to enter the Domain name in addition to username for login.
157
158``OPENSTACK_KEYSTONE_URL``
159--------------------------
160
161Default: ``"http://%s:5000/v2.0" % OPENSTACK_HOST``
162
163The full URL for the Keystone endpoint used for authentication. Unless you
164are using HTTPS, running your Keystone server on a nonstandard port, or using
165a nonstandard URL scheme you shouldn't need to touch this setting.
166
167``OPENSTACK_SSL_CACERT``
168------------------------
169
170Default: ``None``
171
172When unset or set to ``None`` the default CA certificate on the system is used
173for SSL verification.
174
175When set with the path to a custom CA certificate file, this overrides use of
176the default system CA certificate. This custom certificate is used to verify all
177connections to openstack services when making API calls.
178
179``OPENSTACK_SSL_NO_VERIFY``
180---------------------------
181
182Default: ``False``
183
184Disable SSL certificate checks in the OpenStack clients (useful for self-signed
185certificates).
186
187``OPENSTACK_TOKEN_HASH_ALGORITHM``
188----------------------------------
189
190Default: ``"md5"``
191
192The hash algorithm to use for authentication tokens. This must match the hash
193algorithm that the identity (Keystone) server and the auth_token middleware
194are using. Allowed values are the algorithms supported by Python's hashlib
195library.
196
197``OPENSTACK_TOKEN_HASH_ENABLED``
198--------------------------------
199
200(Deprecated)
201
202Default: ``True``
203
204Hashing tokens from Keystone keeps the Horizon session data smaller, but it
205doesn't work in some cases when using PKI tokens. Uncomment this value and
206set it to False if using PKI tokens and there are 401 errors due to token
207hashing.
208
209This option is now marked as "deprecated" and will be removed in Ocata or a
210later release. PKI tokens currently work with hashing, and Keystone will soon
211deprecate usage of PKI tokens.
212
213``PASSWORD_EXPIRES_WARNING_THRESHOLD_DAYS``
214-------------------------------------------
215
216Default: ``-1``
217
218Password will have an expiration date when using keystone v3 and enabling the
219feature. This setting allows you to set the number of days that the user will
220be alerted prior to the password expiration. Once the password expires keystone
221will deny the access and users must contact an admin to change their password.
222Setting this value to ``N`` days means the user will be alerted when the
223password expires in less than ``N+1`` days. ``-1`` disables the feature.
224
225``POLICY_DIRS``
226----------------
227
228Default: ``{}``
229
230Specifies a list of policy directories per service types. The directories
231are relative to ``POLICY_FILES_PATH``. Services whose additional policies
232are defined here must be defined in ``POLICY_FILES`` too. Otherwise,
233additional policies specified in ``POLICY_DIRS`` are not loaded.
234
235Example::
236
237 POLICY_DIRS = {
238 'identity': 'keystone_policy.d',
239 'compute': 'nova_policy.d'
240 }
241
242``POLICY_FILES``
243----------------
244
245Default: ``{'identity': 'keystone_policy.json', 'compute': 'nova_policy.json'}``
246
247This should essentially be the mapping of the contents of ``POLICY_FILES_PATH``
248to service types. When policy.json files are added to ``POLICY_FILES_PATH``,
249they should be included here too.
250
251``POLICY_FILES_PATH``
252---------------------
253
254Default: ``os.path.join(ROOT_PATH, "conf")``
255
256Specifies where service based policy files are located. These are used to
257define the policy rules actions are verified against.
258
259``SECURE_PROXY_ADDR_HEADER``
260----------------------------
261
262Default: ``False``
263
264If horizon is behind a proxy server and the proxy is configured, the IP address
265from request is passed using header variables inside the request. The header
266name depends on a proxy or a load-balancer. This setting specifies the name of
267the header with remote IP address. The main use is for authentication log
268(success or fail) displaing the IP address of the user.
269The commom value for this setting is ``HTTP_X_REAL_IP`` or
270``HTTP_X_FORWARDED_FOR``.
271If not present, then ``REMOTE_ADDR`` header is used. (``REMOTE_ADDR`` is the
272field of Django HttpRequest object which contains IP address of the client.)
273
274``SESSION_TIMEOUT``
275-------------------
276
277Default: ``"3600"``
278
279This ``SESSION_TIMEOUT`` is a method to supercede the token timeout with a
280shorter horizon session timeout (in seconds). So if your token expires in
28160 minutes, a value of 1800 will log users out after 30 minutes.
282
283``TOKEN_DELETION_DISABLED``
284---------------------------
285
286Default: ``False``
287
288This setting allows deployers to control whether a token is deleted on log out.
289This can be helpful when there are often long running processes being run
290in the Horizon environment.
291
292``TOKEN_TIMEOUT_MARGIN``
293------------------------
294
295Default: ``0``
296
297A time margin in seconds to subtract from the real token's validity.
298An example usage is that the token can be valid once the middleware
299passed, and invalid (timed-out) during a view rendering and this
300generates authorization errors during the view rendering.
301By setting this value to some smaller seconds, you can avoid token
302expiration during a view rendering.
303
304``WEBROOT``
305-----------
306
307Default: ``"/"``
308
309Specifies the location where the access to the dashboard is configured in
310the web server.
311
312For example, if you're accessing the Dashboard via
313https://<your server>/dashboard, you would set this to ``"/dashboard/"``.
314
315.. note::
316
317 Additional settings may be required in the config files of your webserver
318 of choice. For example to make ``"/dashboard/"`` the web root in Apache,
319 the ``"sites-available/horizon.conf"`` requires a couple of additional
320 aliases set::
321
322 Alias /dashboard/static %HORIZON_DIR%/static
323
324 Alias /dashboard/media %HORIZON_DIR%/openstack_dashboard/static
325
326 Apache also requires changing your WSGIScriptAlias to reflect the desired
327 path. For example, you'd replace ``/`` with ``/dashboard`` for the
328 alias.
329
330Web SSO (Single Sign On) settings
331=================================
332
333``WEBSSO_ENABLED``
334------------------
335
336Default: ``False``
337
338Enables keystone web single-sign-on if set to True. For this feature to work,
339make sure that you are using Keystone V3 and Django OpenStack Auth V1.2.0 or
340later.
341
342``WEBSSO_INITIAL_CHOICE``
343-------------------------
344
345Default: ``"credentials"``
346
347Determines the default authentication mechanism. When user lands on the login
348page, this is the first choice they will see.
349
350``WEBSSO_CHOICES``
351------------------
352
353Default::
354
355 (
356 ("credentials", _("Keystone Credentials")),
357 ("oidc", _("OpenID Connect")),
358 ("saml2", _("Security Assertion Markup Language"))
359 )
360
361This is the list of authentication mechanisms available to the user. It
362includes Keystone federation protocols such as OpenID Connect and SAML, and
363also keys that map to specific identity provider and federation protocol
364combinations (as defined in ``WEBSSO_IDP_MAPPING``). The list of choices is
365completely configurable, so as long as the id remains intact. Do not remove
366the credentials mechanism unless you are sure. Once removed, even admins will
367have no way to log into the system via the dashboard.
368
369``WEBSSO_IDP_MAPPING``
370----------------------
371
372Default: ``{}``
373
374A dictionary of specific identity provider and federation protocol combinations.
375From the selected authentication mechanism, the value will be looked up as keys
376in the dictionary. If a match is found, it will redirect the user to a identity
377provider and federation protocol specific WebSSO endpoint in keystone, otherwise
378it will use the value as the protocol_id when redirecting to the WebSSO by
379protocol endpoint.
380
381Example::
382
383 WEBSSO_CHOICES = (
384 ("credentials", _("Keystone Credentials")),
385 ("oidc", _("OpenID Connect")),
386 ("saml2", _("Security Assertion Markup Language")),
387 ("acme_oidc", "ACME - OpenID Connect"),
388 ("acme_saml2", "ACME - SAML2")
389 )
390
391 WEBSSO_IDP_MAPPING = {
392 "acme_oidc": ("acme", "oidc"),
393 "acme_saml2": ("acme", "saml2")
394 }
395
396.. note::
397 The value is expected to be a tuple formatted as: (<idp_id>, <protocol_id>).
398
399K2K (Keystone to Keystone) Federation settings
400==============================================
401
402``KEYSTONE_PROVIDER_IDP_NAME``
403------------------------------
404
405Default: ``Local Keystone``
406
407The Keystone Provider drop down uses Keystone to Keystone federation
408to switch between Keystone service providers.
409This sets display name for Identity Provider (dropdown display name).
410
411``KEYSTONE_PROVIDER_IDP_ID``
412----------------------------
413
414Default:: ``localkeystone``
415
416This ID is used for only for comparison with the service provider IDs.
417This ID should not match any service provider IDs.
418
419.. _settings-shared-with-horizon:
420
421Settings shared with Horizon
422============================
423
424The following settings in Django OpenStack Auth are also used by Horizon.
425
426* ``AVAILABLE_REGIONS``
427* ``OPENSTACK_API_VERSIONS``
428* ``OPENSTACK_KEYSTONE_URL``
429* ``OPENSTACK_ENDPOINT_TYPE``
430* ``OPENSTACK_SSL_CACERT``
431* ``OPENSTACK_SSL_NO_VERIFY``
432* ``WEBROOT``
433
434Django OpenStack Auth also refers to the following Django settings.
435For more detail, see `Django settings documentation
436<https://docs.djangoproject.com/en/1.11/ref/settings/#auth>`__.
437They are usually configured as part of Horizon settings.
438
439* ``LOGIN_REDIRECT_URL``
440* ``LOGIN_URL``
441* ``SESSION_ENGINE``
442* ``USE_TZ``
diff --git a/doc/source/index.rst b/doc/source/index.rst
deleted file mode 100644
index d9ba571..0000000
--- a/doc/source/index.rst
+++ /dev/null
@@ -1,21 +0,0 @@
1=====================
2Django OpenStack Auth
3=====================
4
5Django OpenStack Auth is a pluggable Django authentication backend that
6works with Django's ``contrib.auth`` framework to authenticate a user against
7OpenStack's Keystone Identity API.
8
9The current version is designed to work with the Keystone V2 or V3 API.
10
11.. toctree::
12 :maxdepth: 2
13
14 install/index
15 configuration/index
16 reference/index
17
18* :ref:`genindex`
19* :ref:`modindex`
20* :ref:`search`
21
diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst
deleted file mode 100644
index 866152f..0000000
--- a/doc/source/install/index.rst
+++ /dev/null
@@ -1,63 +0,0 @@
1===============
2Getting Started
3===============
4
5Installation
6============
7
8Installing is quick and easy:
9
10#. Run ``pip install django_openstack_auth``.
11
12#. Add ``openstack_auth`` to ``settings.INSTALLED_APPS``.
13
14#. Add ``'openstack_auth.backend.KeystoneBackend'`` to your
15 ``settings.AUTHENTICATION_BACKENDS``, e.g.::
16
17 AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',)
18
19#. Configure your API endpoint(s) in ``settings.py``::
20
21 OPENSTACK_KEYSTONE_URL = "http://example.com:5000/v3"
22
23#. Include ``'openstack_auth.urls'`` somewhere in your ``urls.py`` file.
24
25#. Use it as you would any other Django auth backend.
26
27Running Tests
28=============
29
30Before running tests, you should have ``tox`` installed and available in your
31environment:
32
33.. code-block:: bash
34
35 $ pip install tox
36
37.. NOTE::
38
39 You may need to perform both the above operation and the next inside a
40 python virtualenv, or prefix the above command with ``sudo``, depending on
41 your preference.
42
43To execute the full suite of tests maintained within the project, simply run:
44
45.. code-block:: bash
46
47 $ tox
48
49.. NOTE::
50
51 The first time you run ``tox``, it will take additional time to build
52 virtualenvs. You can later use the ``-r`` option with ``tox`` to rebuild
53 your virtualenv in a similar manner.
54
55To run tests for one or more specific test environments (for example, the most
56common configuration of Python 2.7 and PEP-8), list the environments with the
57``-e`` option, separated by spaces:
58
59.. code-block:: bash
60
61 $ tox -e py27,pep8
62
63See ``tox.ini`` for the full list of available test environments.
diff --git a/doc/source/reference/backend.rst b/doc/source/reference/backend.rst
deleted file mode 100644
index 181536f..0000000
--- a/doc/source/reference/backend.rst
+++ /dev/null
@@ -1,6 +0,0 @@
1==================
2The Backend Module
3==================
4
5.. automodule:: openstack_auth.backend
6 :members:
diff --git a/doc/source/reference/forms.rst b/doc/source/reference/forms.rst
deleted file mode 100644
index 120c213..0000000
--- a/doc/source/reference/forms.rst
+++ /dev/null
@@ -1,6 +0,0 @@
1================
2The Forms Module
3================
4
5.. automodule:: openstack_auth.forms
6 :members:
diff --git a/doc/source/reference/index.rst b/doc/source/reference/index.rst
deleted file mode 100644
index 77a8e11..0000000
--- a/doc/source/reference/index.rst
+++ /dev/null
@@ -1,13 +0,0 @@
1=====================================
2 Django OpenStack Auth API Reference
3=====================================
4
5.. toctree::
6 :maxdepth: 2
7
8 user
9 views
10 forms
11 backend
12 utils
13
diff --git a/doc/source/reference/user.rst b/doc/source/reference/user.rst
deleted file mode 100644
index f54587c..0000000
--- a/doc/source/reference/user.rst
+++ /dev/null
@@ -1,6 +0,0 @@
1==============
2The User Class
3==============
4
5.. automodule:: openstack_auth.user
6 :members:
diff --git a/doc/source/reference/utils.rst b/doc/source/reference/utils.rst
deleted file mode 100644
index a89e0a2..0000000
--- a/doc/source/reference/utils.rst
+++ /dev/null
@@ -1,6 +0,0 @@
1================
2The Utils Module
3================
4
5.. automodule:: openstack_auth.utils
6 :members:
diff --git a/doc/source/reference/views.rst b/doc/source/reference/views.rst
deleted file mode 100644
index e71719e..0000000
--- a/doc/source/reference/views.rst
+++ /dev/null
@@ -1,6 +0,0 @@
1================
2The Views Module
3================
4
5.. automodule:: openstack_auth.views
6 :members:
diff --git a/openstack_auth/__init__.py b/openstack_auth/__init__.py
deleted file mode 100644
index 67e4860..0000000
--- a/openstack_auth/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import pbr.version
15
16
17__version__ = pbr.version.VersionInfo('django_openstack_auth').version_string()
diff --git a/openstack_auth/backend.py b/openstack_auth/backend.py
deleted file mode 100644
index dae603a..0000000
--- a/openstack_auth/backend.py
+++ /dev/null
@@ -1,282 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14""" Module defining the Django auth backend class for the Keystone API. """
15
16import datetime
17import logging
18import pytz
19
20from django.conf import settings
21from django.utils.module_loading import import_string
22from django.utils.translation import ugettext_lazy as _
23
24from openstack_auth import exceptions
25from openstack_auth import user as auth_user
26from openstack_auth import utils
27
28
29LOG = logging.getLogger(__name__)
30
31
32KEYSTONE_CLIENT_ATTR = "_keystoneclient"
33
34
35class KeystoneBackend(object):
36 """Django authentication backend for use with ``django.contrib.auth``."""
37
38 def __init__(self):
39 self._auth_plugins = None
40
41 @property
42 def auth_plugins(self):
43 if self._auth_plugins is None:
44 plugins = getattr(
45 settings,
46 'AUTHENTICATION_PLUGINS',
47 ['openstack_auth.plugin.password.PasswordPlugin',
48 'openstack_auth.plugin.token.TokenPlugin'])
49
50 self._auth_plugins = [import_string(p)() for p in plugins]
51
52 return self._auth_plugins
53
54 def check_auth_expiry(self, auth_ref, margin=None):
55 if not utils.is_token_valid(auth_ref, margin):
56 msg = _("The authentication token issued by the Identity service "
57 "has expired.")
58 LOG.warning("The authentication token issued by the Identity "
59 "service appears to have expired before it was "
60 "issued. This may indicate a problem with either your "
61 "server or client configuration.")
62 raise exceptions.KeystoneAuthException(msg)
63 return True
64
65 def get_user(self, user_id):
66 """Returns the current user from the session data.
67
68 If authenticated, this return the user object based on the user ID
69 and session data.
70
71 .. note::
72
73 This required monkey-patching the ``contrib.auth`` middleware
74 to make the ``request`` object available to the auth backend class.
75
76 """
77 if (hasattr(self, 'request') and
78 user_id == self.request.session["user_id"]):
79 token = self.request.session['token']
80 endpoint = self.request.session['region_endpoint']
81 services_region = self.request.session['services_region']
82 user = auth_user.create_user_from_token(self.request, token,
83 endpoint, services_region)
84 return user
85 else:
86 return None
87
88 def authenticate(self, auth_url=None, **kwargs):
89 """Authenticates a user via the Keystone Identity API."""
90 LOG.debug('Beginning user authentication')
91
92 if not auth_url:
93 auth_url = settings.OPENSTACK_KEYSTONE_URL
94
95 auth_url, url_fixed = utils.fix_auth_url_version_prefix(auth_url)
96 if url_fixed:
97 LOG.warning("The OPENSTACK_KEYSTONE_URL setting points to a v2.0 "
98 "Keystone endpoint, but v3 is specified as the API "
99 "version to use by Horizon. Using v3 endpoint for "
100 "authentication.")
101
102 for plugin in self.auth_plugins:
103 unscoped_auth = plugin.get_plugin(auth_url=auth_url, **kwargs)
104
105 if unscoped_auth:
106 break
107 else:
108 msg = _('No authentication backend could be determined to '
109 'handle the provided credentials.')
110 LOG.warning('No authentication backend could be determined to '
111 'handle the provided credentials. This is likely a '
112 'configuration error that should be addressed.')
113 raise exceptions.KeystoneAuthException(msg)
114
115 # the recent project id a user might have set in a cookie
116 recent_project = None
117 request = kwargs.get('request')
118 if request:
119 # Grab recent_project found in the cookie, try to scope
120 # to the last project used.
121 recent_project = request.COOKIES.get('recent_project')
122 unscoped_auth_ref = plugin.get_access_info(unscoped_auth)
123
124 # Check expiry for our unscoped auth ref.
125 self.check_auth_expiry(unscoped_auth_ref)
126
127 domain_name = kwargs.get('user_domain_name', None)
128 domain_auth, domain_auth_ref = plugin.get_domain_scoped_auth(
129 unscoped_auth, unscoped_auth_ref, domain_name)
130 scoped_auth, scoped_auth_ref = plugin.get_project_scoped_auth(
131 unscoped_auth, unscoped_auth_ref, recent_project=recent_project)
132
133 # Abort if there are no projects for this user and a valid domain
134 # token has not been obtained
135 #
136 # The valid use cases for a user login are:
137 # Keystone v2: user must have a role on a project and be able
138 # to obtain a project scoped token
139 # Keystone v3: 1) user can obtain a domain scoped token (user
140 # has a role on the domain they authenticated to),
141 # only, no roles on a project
142 # 2) user can obtain a domain scoped token and has
143 # a role on a project in the domain they
144 # authenticated to (and can obtain a project scoped
145 # token)
146 # 3) user cannot obtain a domain scoped token, but can
147 # obtain a project scoped token
148 if not scoped_auth_ref and domain_auth_ref:
149 # if the user can't obtain a project scoped token, set the scoped
150 # token to be the domain token, if valid
151 scoped_auth = domain_auth
152 scoped_auth_ref = domain_auth_ref
153 elif not scoped_auth_ref and not domain_auth_ref:
154 msg = _('You are not authorized for any projects.')
155 if utils.get_keystone_version() >= 3:
156 msg = _('You are not authorized for any projects or domains.')
157 raise exceptions.KeystoneAuthException(msg)
158
159 # Check expiry for our new scoped token.
160 self.check_auth_expiry(scoped_auth_ref)
161
162 # We want to try to use the same region we just logged into
163 # which may or may not be the default depending upon the order
164 # keystone uses
165 region_name = None
166 id_endpoints = scoped_auth_ref.service_catalog.\
167 get_endpoints(service_type='identity')
168 for id_endpoint in [cat for cat in id_endpoints['identity']]:
169 if auth_url in id_endpoint.values():
170 region_name = id_endpoint['region']
171 break
172
173 interface = getattr(settings, 'OPENSTACK_ENDPOINT_TYPE', 'public')
174
175 endpoint, url_fixed = utils.fix_auth_url_version_prefix(
176 scoped_auth_ref.service_catalog.url_for(
177 service_type='identity',
178 interface=interface,
179 region_name=region_name))
180 if url_fixed:
181 LOG.warning("The Keystone URL in service catalog points to a v2.0 "
182 "Keystone endpoint, but v3 is specified as the API "
183 "version to use by Horizon. Using v3 endpoint for "
184 "authentication.")
185
186 # If we made it here we succeeded. Create our User!
187 unscoped_token = unscoped_auth_ref.auth_token
188
189 user = auth_user.create_user_from_token(
190 request,
191 auth_user.Token(scoped_auth_ref, unscoped_token=unscoped_token),
192 endpoint,
193 services_region=region_name)
194
195 if request is not None:
196 # if no k2k providers exist then the function returns quickly
197 utils.store_initial_k2k_session(auth_url, request, scoped_auth_ref,
198 unscoped_auth_ref)
199 request.session['unscoped_token'] = unscoped_token
200 if domain_auth_ref:
201 # check django session engine, if using cookies, this will not
202 # work, as it will overflow the cookie so don't add domain
203 # scoped token to the session and put error in the log
204 if utils.using_cookie_backed_sessions():
205 LOG.error('Using signed cookies as SESSION_ENGINE with '
206 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT is '
207 'enabled. This disables the ability to '
208 'perform identity operations due to cookie size '
209 'constraints.')
210 else:
211 request.session['domain_token'] = domain_auth_ref
212
213 request.user = user
214 timeout = getattr(settings, "SESSION_TIMEOUT", 3600)
215 token_life = user.token.expires - datetime.datetime.now(pytz.utc)
216 session_time = min(timeout, int(token_life.total_seconds()))
217 request.session.set_expiry(session_time)
218
219 keystone_client_class = utils.get_keystone_client().Client
220 session = utils.get_session()
221 scoped_client = keystone_client_class(session=session,
222 auth=scoped_auth)
223
224 # Support client caching to save on auth calls.
225 setattr(request, KEYSTONE_CLIENT_ATTR, scoped_client)
226
227 LOG.debug('Authentication completed.')
228 return user
229
230 def get_group_permissions(self, user, obj=None):
231 """Returns an empty set since Keystone doesn't support "groups"."""
232 # Keystone V3 added "groups". The Auth token response includes the
233 # roles from the user's Group assignment. It should be fine just
234 # returning an empty set here.
235 return set()
236
237 def get_all_permissions(self, user, obj=None):
238 """Returns a set of permission strings that the user has.
239
240 This permission available to the user is derived from the user's
241 Keystone "roles".
242
243 The permissions are returned as ``"openstack.{{ role.name }}"``.
244 """
245 if user.is_anonymous() or obj is not None:
246 return set()
247 # TODO(gabrielhurley): Integrate policy-driven RBAC
248 # when supported by Keystone.
249 role_perms = {utils.get_role_permission(role['name'])
250 for role in user.roles}
251
252 services = []
253 for service in user.service_catalog:
254 try:
255 service_type = service['type']
256 except KeyError:
257 continue
258 service_regions = [utils.get_endpoint_region(endpoint) for endpoint
259 in service.get('endpoints', [])]
260 if user.services_region in service_regions:
261 services.append(service_type.lower())
262 service_perms = {"openstack.services.%s" % service
263 for service in services}
264 return role_perms | service_perms
265
266 def has_perm(self, user, perm, obj=None):
267 """Returns True if the given user has the specified permission."""
268 if not user.is_active:
269 return False
270 return perm in self.get_all_permissions(user, obj)
271
272 def has_module_perms(self, user, app_label):
273 """Returns True if user has any permissions in the given app_label.
274
275 Currently this matches for the app_label ``"openstack"``.
276 """
277 if not user.is_active:
278 return False
279 for perm in self.get_all_permissions(user):
280 if perm[:perm.index('.')] == app_label:
281 return True
282 return False
diff --git a/openstack_auth/exceptions.py b/openstack_auth/exceptions.py
deleted file mode 100644
index 37bbaf5..0000000
--- a/openstack_auth/exceptions.py
+++ /dev/null
@@ -1,17 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14
15class KeystoneAuthException(Exception):
16 """Generic error class to identify and catch our own errors."""
17 pass
diff --git a/openstack_auth/forms.py b/openstack_auth/forms.py
deleted file mode 100644
index 107fb19..0000000
--- a/openstack_auth/forms.py
+++ /dev/null
@@ -1,155 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import collections
15import logging
16
17from django.conf import settings
18from django.contrib.auth import authenticate
19from django.contrib.auth import forms as django_auth_forms
20from django import forms
21from django.utils.translation import ugettext_lazy as _
22from django.views.decorators.debug import sensitive_variables
23
24from openstack_auth import exceptions
25from openstack_auth import utils
26
27
28LOG = logging.getLogger(__name__)
29
30
31class Login(django_auth_forms.AuthenticationForm):
32 """Form used for logging in a user.
33
34 Handles authentication with Keystone by providing the domain name, username
35 and password. A scoped token is fetched after successful authentication.
36
37 A domain name is required if authenticating with Keystone V3 running
38 multi-domain configuration.
39
40 If the user authenticated has a default project set, the token will be
41 automatically scoped to their default project.
42
43 If the user authenticated has no default project set, the authentication
44 backend will try to scope to the projects returned from the user's assigned
45 projects. The first successful project scoped will be returned.
46
47 Inherits from the base ``django.contrib.auth.forms.AuthenticationForm``
48 class for added security features.
49 """
50 use_required_attribute = False
51 region = forms.ChoiceField(label=_("Region"), required=False)
52 username = forms.CharField(
53 label=_("User Name"),
54 widget=forms.TextInput(attrs={"autofocus": "autofocus"}))
55 password = forms.CharField(label=_("Password"),
56 widget=forms.PasswordInput(render_value=False))
57
58 def __init__(self, *args, **kwargs):
59 super(Login, self).__init__(*args, **kwargs)
60 fields_ordering = ['username', 'password', 'region']
61 if getattr(settings,
62 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT',
63 False):
64 last_domain = self.request.COOKIES.get('login_domain', None)
65 if getattr(settings,
66 'OPENSTACK_KEYSTONE_DOMAIN_DROPDOWN',
67 False):
68 self.fields['domain'] = forms.ChoiceField(
69 label=_("Domain"),
70 initial=last_domain,
71 required=True,
72 choices=getattr(settings,
73 'OPENSTACK_KEYSTONE_DOMAIN_CHOICES',
74 ()))
75 else:
76 self.fields['domain'] = forms.CharField(
77 initial=last_domain,
78 label=_("Domain"),
79 required=True,
80 widget=forms.TextInput(attrs={"autofocus": "autofocus"}))
81 self.fields['username'].widget = forms.widgets.TextInput()
82 fields_ordering = ['domain', 'username', 'password', 'region']
83 self.fields['region'].choices = self.get_region_choices()
84 if len(self.fields['region'].choices) == 1:
85 self.fields['region'].initial = self.fields['region'].choices[0][0]
86 self.fields['region'].widget = forms.widgets.HiddenInput()
87 elif len(self.fields['region'].choices) > 1:
88 self.fields['region'].initial = self.request.COOKIES.get(
89 'login_region')
90
91 # if websso is enabled and keystone version supported
92 # prepend the websso_choices select input to the form
93 if utils.is_websso_enabled():
94 initial = getattr(settings, 'WEBSSO_INITIAL_CHOICE', 'credentials')
95 self.fields['auth_type'] = forms.ChoiceField(
96 label=_("Authenticate using"),
97 choices=getattr(settings, 'WEBSSO_CHOICES', ()),
98 required=False,
99 initial=initial)
100 # add auth_type to the top of the list
101 fields_ordering.insert(0, 'auth_type')
102
103 # websso is enabled, but keystone version is not supported
104 elif getattr(settings, 'WEBSSO_ENABLED', False):
105 msg = ("Websso is enabled but horizon is not configured to work " +
106 "with keystone version 3 or above.")
107 LOG.warning(msg)
108 self.fields = collections.OrderedDict(
109 (key, self.fields[key]) for key in fields_ordering)
110
111 @staticmethod
112 def get_region_choices():
113 default_region = (settings.OPENSTACK_KEYSTONE_URL, "Default Region")
114 regions = getattr(settings, 'AVAILABLE_REGIONS', [])
115 if not regions:
116 regions = [default_region]
117 return regions
118
119 @sensitive_variables()
120 def clean(self):
121 default_domain = getattr(settings,
122 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN',
123 'Default')
124 username = self.cleaned_data.get('username')
125 password = self.cleaned_data.get('password')
126 region = self.cleaned_data.get('region')
127 domain = self.cleaned_data.get('domain', default_domain)
128
129 if not (username and password):
130 # Don't authenticate, just let the other validators handle it.
131 return self.cleaned_data
132
133 try:
134 self.user_cache = authenticate(request=self.request,
135 username=username,
136 password=password,
137 user_domain_name=domain,
138 auth_url=region)
139 msg = 'Login successful for user "%(username)s", remote address '\
140 '%(remote_ip)s.' % {
141 'username': username,
142 'remote_ip': utils.get_client_ip(self.request)
143 }
144 LOG.info(msg)
145 except exceptions.KeystoneAuthException as exc:
146 msg = 'Login failed for user "%(username)s", remote address '\
147 '%(remote_ip)s.' % {
148 'username': username,
149 'remote_ip': utils.get_client_ip(self.request)
150 }
151 LOG.warning(msg)
152 raise forms.ValidationError(exc)
153 if hasattr(self, 'check_for_test_cookie'): # Dropped in django 1.7
154 self.check_for_test_cookie()
155 return self.cleaned_data
diff --git a/openstack_auth/locale/cs/LC_MESSAGES/django.po b/openstack_auth/locale/cs/LC_MESSAGES/django.po
deleted file mode 100644
index 3f53e01..0000000
--- a/openstack_auth/locale/cs/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,74 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2014-2015
8# Stanislav Ulrych <stanislav.ulrych@ultimum.io>, 2016. #zanata
9msgid ""
10msgstr ""
11"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
12"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
13"POT-Creation-Date: 2017-01-25 19:41+0000\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"PO-Revision-Date: 2016-06-09 07:46+0000\n"
18"Last-Translator: Lenka Husáková <lenka.husakova@ultimum.io>\n"
19"Language: cs\n"
20"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
21"Generated-By: Babel 2.0\n"
22"X-Generator: Zanata 3.7.3\n"
23"Language-Team: Czech\n"
24
25msgid "An error occurred authenticating. Please try again later."
26msgstr "Při ověřování se vyskytla chyba. Zkuste to prosím znovu později."
27
28msgid "Authenticate using"
29msgstr "Přihlásit se pomocí"
30
31msgid "Domain"
32msgstr "Doména"
33
34msgid "Invalid credentials."
35msgstr "Neplatné přihlašovací údaje."
36
37msgid ""
38"No authentication backend could be determined to handle the provided "
39"credentials."
40msgstr ""
41"Nebyl rozpoznán žádný vhodný autentizační backend pro ověření zadaných "
42"přihlašovacích údajů."
43
44msgid "Password"
45msgstr "Heslo"
46
47#, python-format
48msgid "Project switch failed for user \"%(username)s\"."
49msgstr "Změna projektu selhala u uživatele \"%(username)s\"."
50
51msgid "Region"
52msgstr "Region"
53
54#, python-format
55msgid "Switch to project \"%(project_name)s\" successful."
56msgstr "Změna projektu \"%(project_name)s\" byla úspěšná."
57
58msgid "The authentication token issued by the Identity service has expired."
59msgstr "Autentizační token poskytnutý službou identit vypršel."
60
61msgid "Unable to establish connection to keystone endpoint."
62msgstr "Nelze se připojit ke keystone endpointu."
63
64msgid "Unable to retrieve authorized projects."
65msgstr "Nelze získat oprávněné projekty."
66
67msgid "User Name"
68msgstr "Uživatelské jméno"
69
70msgid "You are not authorized for any projects or domains."
71msgstr "Nemáte oprávnění k žádným projektům či doménám."
72
73msgid "You are not authorized for any projects."
74msgstr "Nemáte oprávnění k žádným projektům."
diff --git a/openstack_auth/locale/de/LC_MESSAGES/django.po b/openstack_auth/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 2ce3bee..0000000
--- a/openstack_auth/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,103 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Andreas Jaeger <jaegerandi@gmail.com>, 2014
8# Robert Simai, 2015
9# Robert Simai, 2015
10# Frank Kloeker <eumel@arcor.de>, 2016. #zanata
11# Andreas Jaeger <jaegerandi@gmail.com>, 2017. #zanata
12# Robert Simai <robert.simai@suse.com>, 2017. #zanata
13msgid ""
14msgstr ""
15"Project-Id-Version: django_openstack_auth 3.1.2.dev14\n"
16"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
17"POT-Creation-Date: 2017-04-07 13:52+0000\n"
18"MIME-Version: 1.0\n"
19"Content-Type: text/plain; charset=UTF-8\n"
20"Content-Transfer-Encoding: 8bit\n"
21"PO-Revision-Date: 2017-03-28 08:35+0000\n"
22"Last-Translator: Robert Simai <robert.simai@suse.com>\n"
23"Language: de\n"
24"Plural-Forms: nplurals=2; plural=(n != 1);\n"
25"Generated-By: Babel 2.0\n"
26"X-Generator: Zanata 3.9.6\n"
27"Language-Team: German\n"
28
29msgid "An error occurred authenticating. Please try again later."
30msgstr ""
31"Während der Authentifizierung ist ein Fehler aufgetreten. Bitte versuchen "
32"Sie es später noch einmal."
33
34msgid "Authenticate using"
35msgstr "Authentifizieren mit"
36
37msgid "Could not find service provider ID on Keystone."
38msgstr "Dienstanbieter ID in Keystone nicht gefunden."
39
40msgid "Domain"
41msgstr "Domäne"
42
43msgid "Invalid credentials."
44msgstr "Unzureichende Berechtigung."
45
46msgid "K2K Federation not setup for this session"
47msgstr "K2K Verbund ist für diese Sitzung nicht eingerichtet"
48
49msgid ""
50"No authentication backend could be determined to handle the provided "
51"credentials."
52msgstr ""
53"Es konnte kein Authentifizierungsbackend für die angegebene Legitimierung "
54"gefunden werden."
55
56msgid "Password"
57msgstr "Passwort"
58
59#, python-format
60msgid "Please consider changing your password, it will expire in %s minutes"
61msgstr "Bitte ändern Sie Ihr Passwort. Es läuft in %s Minuten ab."
62
63#, python-format
64msgid "Project switch failed for user \"%(username)s\"."
65msgstr "Projektumschaltung für Benutzer \"%(username)s\" fehlgeschlagen."
66
67msgid "Region"
68msgstr "Region"
69
70#, python-format
71msgid "Service provider authentication failed. %s"
72msgstr "Dienstanbieter Authentifizierung fehlgeschlagen. %s"
73
74#, python-format
75msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
76msgstr ""
77"Umschalten zum Keystone Anbieter \"%(keystone_provider)s\" erfolgreich."
78
79#, python-format
80msgid "Switch to project \"%(project_name)s\" successful."
81msgstr "Umschalten zum Projekt \"%(project_name)s\" erfolgreich."
82
83msgid "The authentication token issued by the Identity service has expired."
84msgstr ""
85"Das vom Identitätsdienst ausgegebene Authentifizierungs-Token ist abgelaufen."
86
87msgid "Unable to establish connection to keystone endpoint."
88msgstr "Es kann keine Verbindung zum Keystone Endpunkt aufgebaut werden."
89
90msgid "Unable to retrieve authorized domains."
91msgstr "Die authorisierten Domänen können nicht abgerufen werden."
92
93msgid "Unable to retrieve authorized projects."
94msgstr "Authorisierte Projekte können nicht abgerufen werden."
95
96msgid "User Name"
97msgstr "Benutzername"
98
99msgid "You are not authorized for any projects or domains."
100msgstr "Sie sind nicht autorisiert für irgendein Projekt oder eine Domäne."
101
102msgid "You are not authorized for any projects."
103msgstr "Sie sind für kein Projekt berechtigt."
diff --git a/openstack_auth/locale/en_AU/LC_MESSAGES/django.po b/openstack_auth/locale/en_AU/LC_MESSAGES/django.po
deleted file mode 100644
index 888a3e3..0000000
--- a/openstack_auth/locale/en_AU/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,75 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Tom Fifield <tom@openstack.org>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9# Tom Fifield <tom@openstack.org>, 2016. #zanata
10msgid ""
11msgstr ""
12"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
13"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
14"POT-Creation-Date: 2017-01-25 19:41+0000\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
18"PO-Revision-Date: 2016-09-19 04:53+0000\n"
19"Last-Translator: Tom Fifield <tom@openstack.org>\n"
20"Language: en-AU\n"
21"Plural-Forms: nplurals=2; plural=(n != 1);\n"
22"Generated-By: Babel 2.0\n"
23"X-Generator: Zanata 3.7.3\n"
24"Language-Team: English (Australia)\n"
25
26msgid "An error occurred authenticating. Please try again later."
27msgstr "An error occurred authenticating. Please try again later."
28
29msgid "Authenticate using"
30msgstr "Authenticate using"
31
32msgid "Domain"
33msgstr "Domain"
34
35msgid "Invalid credentials."
36msgstr "Invalid credentials."
37
38msgid ""
39"No authentication backend could be determined to handle the provided "
40"credentials."
41msgstr ""
42"No authentication backend could be determined to handle the provided "
43"credentials."
44
45msgid "Password"
46msgstr "Password"
47
48#, python-format
49msgid "Project switch failed for user \"%(username)s\"."
50msgstr "Project switch failed for user \"%(username)s\"."
51
52msgid "Region"
53msgstr "Region"
54
55#, python-format
56msgid "Switch to project \"%(project_name)s\" successful."
57msgstr "Switch to project \"%(project_name)s\" successful."
58
59msgid "The authentication token issued by the Identity service has expired."
60msgstr "The authentication token issued by the Identity service has expired."
61
62msgid "Unable to establish connection to keystone endpoint."
63msgstr "Unable to establish connection to keystone endpoint."
64
65msgid "Unable to retrieve authorized projects."
66msgstr "Unable to retrieve authorized projects."
67
68msgid "User Name"
69msgstr "User Name"
70
71msgid "You are not authorized for any projects or domains."
72msgstr "You are not authorised for any projects or domains."
73
74msgid "You are not authorized for any projects."
75msgstr "You are not authorized for any projects."
diff --git a/openstack_auth/locale/en_GB/LC_MESSAGES/django.po b/openstack_auth/locale/en_GB/LC_MESSAGES/django.po
deleted file mode 100644
index 7482afc..0000000
--- a/openstack_auth/locale/en_GB/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,97 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Rob Cresswell <robert.cresswell@outlook.com>, 2015
8# Andi Chandler <andi@gowling.com>, 2016. #zanata
9# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
10# Andi Chandler <andi@gowling.com>, 2017. #zanata
11msgid ""
12msgstr ""
13"Project-Id-Version: django_openstack_auth 3.5.1.dev13\n"
14"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
15"POT-Creation-Date: 2017-09-21 00:53+0000\n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
19"PO-Revision-Date: 2017-10-05 03:49+0000\n"
20"Last-Translator: Andi Chandler <andi@gowling.com>\n"
21"Language: en-GB\n"
22"Plural-Forms: nplurals=2; plural=(n != 1);\n"
23"Generated-By: Babel 2.0\n"
24"X-Generator: Zanata 3.9.6\n"
25"Language-Team: English (United Kingdom)\n"
26
27msgid "An error occurred authenticating. Please try again later."
28msgstr "An error occurred authenticating. Please try again later."
29
30msgid "Authenticate using"
31msgstr "Authenticate using"
32
33msgid "Could not find service provider ID on Keystone."
34msgstr "Could not find service provider ID on Keystone."
35
36msgid "Domain"
37msgstr "Domain"
38
39msgid "Invalid credentials."
40msgstr "Invalid credentials."
41
42msgid "K2K Federation not setup for this session"
43msgstr "K2K Federation not setup for this session"
44
45msgid ""
46"No authentication backend could be determined to handle the provided "
47"credentials."
48msgstr ""
49"No authentication backend could be determined to handle the provided "
50"credentials."
51
52msgid "Password"
53msgstr "Password"
54
55#, python-format
56msgid "Please consider changing your password, it will expire in %s minutes"
57msgstr "Please consider changing your password, it will expire in %s minutes"
58
59#, python-format
60msgid "Project switch failed for user \"%(username)s\"."
61msgstr "Project switch failed for user \"%(username)s\"."
62
63msgid "Region"
64msgstr "Region"
65
66#, python-format
67msgid "Service provider authentication failed. %s"
68msgstr "Service provider authentication failed. %s"
69
70#, python-format
71msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
72msgstr "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
73
74#, python-format
75msgid "Switch to project \"%(project_name)s\" successful."
76msgstr "Switch to project \"%(project_name)s\" successful."
77
78msgid "The authentication token issued by the Identity service has expired."
79msgstr "The authentication token issued by the Identity service has expired."
80
81msgid "Unable to establish connection to keystone endpoint."
82msgstr "Unable to establish connection to keystone endpoint."
83
84msgid "Unable to retrieve authorized domains."
85msgstr "Unable to retrieve authorised domains."
86
87msgid "Unable to retrieve authorized projects."
88msgstr "Unable to retrieve authorised projects."
89
90msgid "User Name"
91msgstr "User Name"
92
93msgid "You are not authorized for any projects or domains."
94msgstr "You are not authorised for any projects or domains."
95
96msgid "You are not authorized for any projects."
97msgstr "You are not authorised for any projects."
diff --git a/openstack_auth/locale/es/LC_MESSAGES/django.po b/openstack_auth/locale/es/LC_MESSAGES/django.po
deleted file mode 100644
index 87191bf..0000000
--- a/openstack_auth/locale/es/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,97 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Adriana Chisco Landazábal <achisco94@gmail.com>, 2015
8# Alberto Molina Coballes <alb.molina@gmail.com>, 2014
9# dario hereñu <magallania@gmail.com>, 2015
10# luis gil, 2015
11# Marian Tort <marian.tort@gmail.com>, 2014
12# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
13# Zeus Arias Lucero <zeusariaslucero@gmail.com>, 2017. #zanata
14msgid ""
15msgstr ""
16"Project-Id-Version: django_openstack_auth 3.5.1.dev10\n"
17"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
18"POT-Creation-Date: 2017-09-12 23:53+0000\n"
19"MIME-Version: 1.0\n"
20"Content-Type: text/plain; charset=UTF-8\n"
21"Content-Transfer-Encoding: 8bit\n"
22"PO-Revision-Date: 2017-08-24 09:49+0000\n"
23"Last-Translator: Zeus Arias Lucero <zeusariaslucero@gmail.com>\n"
24"Language: es\n"
25"Plural-Forms: nplurals=2; plural=(n != 1);\n"
26"Generated-By: Babel 2.0\n"
27"X-Generator: Zanata 3.9.6\n"
28"Language-Team: Spanish\n"
29
30msgid "An error occurred authenticating. Please try again later."
31msgstr "Se produjo un error de autenticación. Inténtelo de nuevo más tarde."
32
33msgid "Authenticate using"
34msgstr "Autenticación con"
35
36msgid "Could not find service provider ID on Keystone."
37msgstr "No se ha podido encontrar el ID del proveedor de servicios de Keystone"
38
39msgid "Domain"
40msgstr "Dominio"
41
42msgid "Invalid credentials."
43msgstr "Credenciales no válidas"
44
45msgid "K2K Federation not setup for this session"
46msgstr "K2K Federation no esta configurada para esta sesión"
47
48msgid ""
49"No authentication backend could be determined to handle the provided "
50"credentials."
51msgstr ""
52"No se ha podido determinar un backend de autenticación para gestionar las "
53"credenciales proporcionadas."
54
55msgid "Password"
56msgstr "Contraseña"
57
58#, python-format
59msgid "Please consider changing your password, it will expire in %s minutes"
60msgstr "Por favor considera cambiar su contraseña, va a expirar en %s minutos"
61
62#, python-format
63msgid "Project switch failed for user \"%(username)s\"."
64msgstr "Intercambio de projecto fracasó para el usuario \"%(username)s\"."
65
66msgid "Region"
67msgstr "Región"
68
69#, python-format
70msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
71msgstr ""
72"Cambio al proveedor de Keystone \"%(keystone_provider)s\" de manera exitosa."
73
74#, python-format
75msgid "Switch to project \"%(project_name)s\" successful."
76msgstr "Cambio al proyecto \"%(project_name)s\" de manera exitosa."
77
78msgid "The authentication token issued by the Identity service has expired."
79msgstr "El token de autenticación emitido por Identity Service ha expirado."
80
81msgid "Unable to establish connection to keystone endpoint."
82msgstr "No ha sido posible establecer conexión con el endpoint de keystone."
83
84msgid "Unable to retrieve authorized domains."
85msgstr "No ha sido posible recuperar los dominios autorizados."
86
87msgid "Unable to retrieve authorized projects."
88msgstr "No ha sido posible obtener los proyectos autorizados."
89
90msgid "User Name"
91msgstr "Usuario"
92
93msgid "You are not authorized for any projects or domains."
94msgstr "No tiene autorización para ningún proyecto ni dominio."
95
96msgid "You are not authorized for any projects."
97msgstr "No está autorizado en ningún proyecto."
diff --git a/openstack_auth/locale/es_MX/LC_MESSAGES/django.po b/openstack_auth/locale/es_MX/LC_MESSAGES/django.po
deleted file mode 100644
index 5566baf..0000000
--- a/openstack_auth/locale/es_MX/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,74 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Heleno Jimenez de la Cruz <heleno.jimenez@gmail.com>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9msgid ""
10msgstr ""
11"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
12"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
13"POT-Creation-Date: 2017-01-25 19:41+0000\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"PO-Revision-Date: 2015-09-18 03:50+0000\n"
18"Last-Translator: Heleno Jimenez de la Cruz <heleno.jimenez@gmail.com>\n"
19"Language: es-MX\n"
20"Plural-Forms: nplurals=2; plural=(n != 1);\n"
21"Generated-By: Babel 2.0\n"
22"X-Generator: Zanata 3.7.3\n"
23"Language-Team: Spanish (Mexico)\n"
24
25msgid "An error occurred authenticating. Please try again later."
26msgstr ""
27"Se ha producido un error de autenticación. Por favor inténtelo de nuevo más "
28"tarde."
29
30msgid "Authenticate using"
31msgstr "Autentificar usando"
32
33msgid "Domain"
34msgstr "Dominio"
35
36msgid "Invalid credentials."
37msgstr "Credenciales inválidas."
38
39msgid ""
40"No authentication backend could be determined to handle the provided "
41"credentials."
42msgstr ""
43"Autentificación de soporte no puede ser determinada para manejar las "
44"credenciales proveidas."
45
46msgid "Password"
47msgstr "Contraseña"
48
49#, python-format
50msgid "Project switch failed for user \"%(username)s\"."
51msgstr "Cambio de proyecto fallido para el usuario \"%(username)s\"."
52
53msgid "Region"
54msgstr "Región."
55
56#, python-format
57msgid "Switch to project \"%(project_name)s\" successful."
58msgstr "Cambio al proyecto \"%(project_name)s\" satisfactorio."
59
60msgid "The authentication token issued by the Identity service has expired."
61msgstr ""
62"El token de autenticación otorgado por el servicio de identidad ha expirado."
63
64msgid "Unable to establish connection to keystone endpoint."
65msgstr "No es posible establecer conexión a punto final de la clave base."
66
67msgid "Unable to retrieve authorized projects."
68msgstr "No se pueden recuperar los proyectos autorizados."
69
70msgid "User Name"
71msgstr "Nombre de Usuario"
72
73msgid "You are not authorized for any projects."
74msgstr "No estás autorizado para algunos proyectos."
diff --git a/openstack_auth/locale/fr/LC_MESSAGES/django.po b/openstack_auth/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 9327723..0000000
--- a/openstack_auth/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,105 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Cédric Savignan <liced@liced.fr>, 2015
8# Corinne Verheyde <cverheyd@hotmail.com>, 2015
9# François Bureau, 2015
10# Maxime COQUEREL <max.coquerel@gmail.com>, 2015
11# Patte D <pattedeph@gmail.com>, 2015
12# Xavier Gauvrit <xavier.gauvrit@cloudwatt.com>, 2014
13# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
14# Gérald LONLAS <g.lonlas@gmail.com>, 2016. #zanata
15# JF Taltavull <jftalta@gmail.com>, 2017. #zanata
16# Loic Nicolle <loic.nicolle@orange.com>, 2017. #zanata
17msgid ""
18msgstr ""
19"Project-Id-Version: django_openstack_auth 3.4.1.dev1\n"
20"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
21"POT-Creation-Date: 2017-07-19 17:16+0000\n"
22"MIME-Version: 1.0\n"
23"Content-Type: text/plain; charset=UTF-8\n"
24"Content-Transfer-Encoding: 8bit\n"
25"PO-Revision-Date: 2017-07-19 09:06+0000\n"
26"Last-Translator: Loic Nicolle <loic.nicolle@orange.com>\n"
27"Language: fr\n"
28"Plural-Forms: nplurals=2; plural=(n > 1);\n"
29"Generated-By: Babel 2.0\n"
30"X-Generator: Zanata 3.9.6\n"
31"Language-Team: French\n"
32
33msgid "An error occurred authenticating. Please try again later."
34msgstr ""
35"Une erreur s'est produite pendant l'authentification. Veuillez réessayer "
36"ultérieurement."
37
38msgid "Authenticate using"
39msgstr "Mode d'authentification"
40
41msgid "Could not find service provider ID on Keystone."
42msgstr "Impossible de trouver l'ID du fournisseur de services sur Keystone."
43
44msgid "Domain"
45msgstr "Domaine"
46
47msgid "Invalid credentials."
48msgstr "Informations d'authentification non valides."
49
50msgid "K2K Federation not setup for this session"
51msgstr "La fédération K2K n'a pas été configurée pour cette session"
52
53msgid ""
54"No authentication backend could be determined to handle the provided "
55"credentials."
56msgstr "Aucun backend d'authentification pour gérer les informations fournies."
57
58msgid "Password"
59msgstr "Mot de passe"
60
61#, python-format
62msgid "Please consider changing your password, it will expire in %s minutes"
63msgstr "Merci de changer votre mot de passe, il va expirer dans %s minutes"
64
65#, python-format
66msgid "Project switch failed for user \"%(username)s\"."
67msgstr "La bascule de projet a échoué pour l'utilisateur \"%(username)s\"."
68
69msgid "Region"
70msgstr "Région"
71
72#, python-format
73msgid "Service provider authentication failed. %s"
74msgstr "L'authentification du fournisseur de services a échoué. %s"
75
76#, python-format
77msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
78msgstr ""
79"Bascule vers le fournisseur Keystone \"%(keystone_provider)s\" réussie."
80
81#, python-format
82msgid "Switch to project \"%(project_name)s\" successful."
83msgstr "Bascule vers le projet \"%(project_name)s\" réussie. "
84
85msgid "The authentication token issued by the Identity service has expired."
86msgstr ""
87"Le jeton d'authentification délivré par le service d'Identité a expiré."
88
89msgid "Unable to establish connection to keystone endpoint."
90msgstr "Impossible d'établir la connexion avec le endpoint keystone."
91
92msgid "Unable to retrieve authorized domains."
93msgstr "Impossible de récupérer les domaines autorisés."
94
95msgid "Unable to retrieve authorized projects."
96msgstr "Impossible de récupérer les projets autorisés."
97
98msgid "User Name"
99msgstr "Nom d'utilisateur"
100
101msgid "You are not authorized for any projects or domains."
102msgstr "Vous n'êtes autorisé sur aucun projet ou domaine."
103
104msgid "You are not authorized for any projects."
105msgstr "Vous n'êtes autorisé sur aucun projet."
diff --git a/openstack_auth/locale/id/LC_MESSAGES/django.po b/openstack_auth/locale/id/LC_MESSAGES/django.po
deleted file mode 100644
index e0f133f..0000000
--- a/openstack_auth/locale/id/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,98 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
8# suhartono <cloudsuhartono@gmail.com>, 2016. #zanata
9# suhartono <cloudsuhartono@gmail.com>, 2017. #zanata
10msgid ""
11msgstr ""
12"Project-Id-Version: django_openstack_auth 3.1.2.dev15\n"
13"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
14"POT-Creation-Date: 2017-04-10 01:40+0000\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
18"PO-Revision-Date: 2017-04-11 03:47+0000\n"
19"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
20"Language: id\n"
21"Plural-Forms: nplurals=1; plural=0;\n"
22"Generated-By: Babel 2.0\n"
23"X-Generator: Zanata 3.9.6\n"
24"Language-Team: Indonesian\n"
25
26msgid "An error occurred authenticating. Please try again later."
27msgstr "Terjadi kesalahan otentikasi. Silakan coba lagi nanti."
28
29msgid "Authenticate using"
30msgstr "Otentikasi penggunaan"
31
32msgid "Could not find service provider ID on Keystone."
33msgstr "Tidak dapat menemukan provider layanan ID di Keystone."
34
35msgid "Domain"
36msgstr "Domain"
37
38msgid "Invalid credentials."
39msgstr "Kredensial tidak valid."
40
41msgid "K2K Federation not setup for this session"
42msgstr "K2K Federation tidak menyiapkan untuk sesi ini"
43
44msgid ""
45"No authentication backend could be determined to handle the provided "
46"credentials."
47msgstr ""
48"Tidak ada otentikasi backend dapat ditentukan untuk menangani kredensial "
49"yang disediakan."
50
51msgid "Password"
52msgstr "Password"
53
54#, python-format
55msgid "Please consider changing your password, it will expire in %s minutes"
56msgstr ""
57"Silakan mempertimbangkan mengubah sandi Anda, inu akan berakhir pada %s menit"
58
59#, python-format
60msgid "Project switch failed for user \"%(username)s\"."
61msgstr "Switch proyek gagal untuk pengguna \"%(username)s\"."
62
63msgid "Region"
64msgstr "Region"
65
66#, python-format
67msgid "Service provider authentication failed. %s"
68msgstr "Ootentikasi provider layanan gagal. %s"
69
70#, python-format
71msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
72msgstr "Switch ke Keystone Provider \"%(keystone_provider)s\" berhasil."
73
74#, python-format
75msgid "Switch to project \"%(project_name)s\" successful."
76msgstr "Switch proyek \"%(project_name)s\" sukses."
77
78msgid "The authentication token issued by the Identity service has expired."
79msgstr ""
80"Token otentikasi yang dikeluarkan oleh layanan Identity telah berakhir."
81
82msgid "Unable to establish connection to keystone endpoint."
83msgstr "Tidak dapat melakukan koneksi ke endpoint keystone."
84
85msgid "Unable to retrieve authorized domains."
86msgstr "Tidak dapat mengambil domain yang berwenang."
87
88msgid "Unable to retrieve authorized projects."
89msgstr "Tidak dapat mengambil proyek yang berwenang (authorized)"
90
91msgid "User Name"
92msgstr "nama pengguna"
93
94msgid "You are not authorized for any projects or domains."
95msgstr "Anda tidak berwenang untuk setiap proyek atau domain."
96
97msgid "You are not authorized for any projects."
98msgstr "Anda tidak berwenang untuk setiap proyek."
diff --git a/openstack_auth/locale/it/LC_MESSAGES/django.po b/openstack_auth/locale/it/LC_MESSAGES/django.po
deleted file mode 100644
index 0356e8d..0000000
--- a/openstack_auth/locale/it/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,76 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Salvatore Davide Rapisarda <sdrapisarda@gmail.com>, 2014
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9msgid ""
10msgstr ""
11"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
12"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
13"POT-Creation-Date: 2017-01-25 19:41+0000\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"PO-Revision-Date: 2016-03-26 09:13+0000\n"
18"Last-Translator: Remo Mattei <remo@rm.ht>\n"
19"Language: it\n"
20"Plural-Forms: nplurals=2; plural=(n != 1);\n"
21"Generated-By: Babel 2.0\n"
22"X-Generator: Zanata 3.7.3\n"
23"Language-Team: Italian\n"
24
25msgid "An error occurred authenticating. Please try again later."
26msgstr "Si è verificato un errore. Riprova più tardi."
27
28msgid "Authenticate using"
29msgstr "Usando l'autenticazione "
30
31msgid "Domain"
32msgstr "Dominio"
33
34msgid "Invalid credentials."
35msgstr "Le credenziali non sono valide "
36
37msgid ""
38"No authentication backend could be determined to handle the provided "
39"credentials."
40msgstr ""
41"Non è possibile comunicare con nessuno dei back-end di autenticazione per "
42"verificare le credenziali. "
43
44msgid "Password"
45msgstr "Password"
46
47#, python-format
48msgid "Project switch failed for user \"%(username)s\"."
49msgstr ""
50"Il passaggio al progetto non è riuscito per l'utente \"%(username)s\". "
51
52msgid "Region"
53msgstr "Regione"
54
55#, python-format
56msgid "Switch to project \"%(project_name)s\" successful."
57msgstr ""
58"Il passaggio al progetto \"%(project_name)s\" è riuscito con successo. "
59
60msgid "The authentication token issued by the Identity service has expired."
61msgstr "Il token di autenticazione che stai usando è scaduto."
62
63msgid "Unable to establish connection to keystone endpoint."
64msgstr "Impossibile stabilire una connessione con gli endpoint di keystone. "
65
66msgid "Unable to retrieve authorized projects."
67msgstr "Impossibile ottenere l'accesso ai progetti."
68
69msgid "User Name"
70msgstr "Nome Utente"
71
72msgid "You are not authorized for any projects or domains."
73msgstr "Non sei autorizzato ad entrare a nessuno dei progetti o domini. "
74
75msgid "You are not authorized for any projects."
76msgstr "Non sei abilitato a nessun progetto."
diff --git a/openstack_auth/locale/ja/LC_MESSAGES/django.po b/openstack_auth/locale/ja/LC_MESSAGES/django.po
deleted file mode 100644
index 5e72b41..0000000
--- a/openstack_auth/locale/ja/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,101 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Akihiro Motoki <amotoki@gmail.com>, 2015
8# Shu Muto <shu-mutou@rf.jp.nec.com>, 2015
9# ykatabam <ykatabam@redhat.com>, 2015
10# ykatabam <ykatabam@redhat.com>, 2015
11# Mie Yamamoto <myamamot@redhat.com>, 2016. #zanata
12# Yuko Katabami <yukokatabami@gmail.com>, 2016. #zanata
13# Yuko Katabami <yukokatabami@gmail.com>, 2017. #zanata
14msgid ""
15msgstr ""
16"Project-Id-Version: django_openstack_auth 3.5.1.dev5\n"
17"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
18"POT-Creation-Date: 2017-07-27 23:17+0000\n"
19"MIME-Version: 1.0\n"
20"Content-Type: text/plain; charset=UTF-8\n"
21"Content-Transfer-Encoding: 8bit\n"
22"PO-Revision-Date: 2017-08-07 09:39+0000\n"
23"Last-Translator: Yuko Katabami <yukokatabami@gmail.com>\n"
24"Language: ja\n"
25"Plural-Forms: nplurals=1; plural=0;\n"
26"Generated-By: Babel 2.0\n"
27"X-Generator: Zanata 3.9.6\n"
28"Language-Team: Japanese\n"
29
30msgid "An error occurred authenticating. Please try again later."
31msgstr "認証中にエラーが発生しました。後ほどもう一度お試しください。"
32
33msgid "Authenticate using"
34msgstr "使用する認証方法"
35
36msgid "Could not find service provider ID on Keystone."
37msgstr "Keystone でサービスプロバイダー ID を見つけることができませんでした。"
38
39msgid "Domain"
40msgstr "ドメイン"
41
42msgid "Invalid credentials."
43msgstr "無効な認証情報です。"
44
45msgid "K2K Federation not setup for this session"
46msgstr "このセッションには K2K フェデレーションは設定されていません。"
47
48msgid ""
49"No authentication backend could be determined to handle the provided "
50"credentials."
51msgstr "指定された認証情報を処理する認証バックエンドが決定できませんでした。"
52
53msgid "Password"
54msgstr "パスワード"
55
56#, python-format
57msgid "Please consider changing your password, it will expire in %s minutes"
58msgstr ""
59"パスワードの変更をお勧めします。今のパスワードはあと %s 分で無効になります。"
60
61#, python-format
62msgid "Project switch failed for user \"%(username)s\"."
63msgstr "ユーザー \"%(username)s\" のプロジェクト切り替えに失敗しました。"
64
65msgid "Region"
66msgstr "リージョン"
67
68#, python-format
69msgid "Service provider authentication failed. %s"
70msgstr "サービスプロバイダーの認証に失敗しました。%s"
71
72#, python-format
73msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
74msgstr ""
75"Keystone プロバイダー \"%(keystone_provider)s\" への切り替えが正常に完了しま"
76"した。"
77
78#, python-format
79msgid "Switch to project \"%(project_name)s\" successful."
80msgstr "プロジェクト \"%(project_name)s\" へ正常に切り替えました。"
81
82msgid "The authentication token issued by the Identity service has expired."
83msgstr "Identity サービスにより発行された認証トークンの期限が切れました。"
84
85msgid "Unable to establish connection to keystone endpoint."
86msgstr "Keystone エンドポイントへの接続を確立できません。"
87
88msgid "Unable to retrieve authorized domains."
89msgstr "認証されたドメインを取得できません。"
90
91msgid "Unable to retrieve authorized projects."
92msgstr "権限を持っているプロジェクトの情報を取得できません。"
93
94msgid "User Name"
95msgstr "ユーザー名"
96
97msgid "You are not authorized for any projects or domains."
98msgstr "どのプロジェクトやドメインに対しても権限がありません。"
99
100msgid "You are not authorized for any projects."
101msgstr "どのプロジェクトに対しても権限がありません。"
diff --git a/openstack_auth/locale/ko_KR/LC_MESSAGES/django.po b/openstack_auth/locale/ko_KR/LC_MESSAGES/django.po
deleted file mode 100644
index 76ef6d4..0000000
--- a/openstack_auth/locale/ko_KR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,98 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Ian Y. Choi <ianyrchoi@gmail.com>, 2015
8# Sungjin Kang <potopro@gmail.com>, 2015
9# Andrea Young Oak Li <youli@redhat.com>, 2016. #zanata
10# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
11# Jun-Sik Shin <jsshin@smartx.kr>, 2017. #zanata
12# Sungjin Kang <gang.sungjin@gmail.com>, 2017. #zanata
13msgid ""
14msgstr ""
15"Project-Id-Version: django_openstack_auth 3.2.1.dev2\n"
16"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
17"POT-Creation-Date: 2017-06-07 17:46+0000\n"
18"MIME-Version: 1.0\n"
19"Content-Type: text/plain; charset=UTF-8\n"
20"Content-Transfer-Encoding: 8bit\n"
21"PO-Revision-Date: 2017-06-08 01:53+0000\n"
22"Last-Translator: Jun-Sik Shin <jsshin@smartx.kr>\n"
23"Language: ko-KR\n"
24"Plural-Forms: nplurals=1; plural=0;\n"
25"Generated-By: Babel 2.0\n"
26"X-Generator: Zanata 3.9.6\n"
27"Language-Team: Korean (South Korea)\n"
28
29msgid "An error occurred authenticating. Please try again later."
30msgstr "인증 중 오류가 발생했습니다. 잠시 후 다시 시도하세요."
31
32msgid "Authenticate using"
33msgstr "인증 방법"
34
35msgid "Could not find service provider ID on Keystone."
36msgstr "Keystone 에서 서비스 프로바이더 ID 를 찾지 못하였습니다."
37
38msgid "Domain"
39msgstr "도메인"
40
41msgid "Invalid credentials."
42msgstr "올바르지 않은 인증정보입니다."
43
44msgid "K2K Federation not setup for this session"
45msgstr "이 세션에는 K2K Federation 이 설정되지 않았습니다."
46
47msgid ""
48"No authentication backend could be determined to handle the provided "
49"credentials."
50msgstr ""
51"제공된 인증정보에 대한 처리를 할 수 있는 인증 백엔드가 존재하지 않습니다."
52
53msgid "Password"
54msgstr "암호"
55
56#, python-format
57msgid "Please consider changing your password, it will expire in %s minutes"
58msgstr "암호는 %s 분 후에 만료되므로 변경해 주시기 바랍니다."
59
60#, python-format
61msgid "Project switch failed for user \"%(username)s\"."
62msgstr "사용자 \"%(username)s\" 에 대한 프로젝트 전환에 실패했습니다."
63
64msgid "Region"
65msgstr "지역"
66
67#, python-format
68msgid "Service provider authentication failed. %s"
69msgstr "서비스 프로바이더 인증에 실패했습니다. %s"
70
71#, python-format
72msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
73msgstr "Keystone 프로바이더 \"%(keystone_provider)s\" 로 변경하였습니다."
74
75#, python-format
76msgid "Switch to project \"%(project_name)s\" successful."
77msgstr "프로젝트 \"%(project_name)s\" 로 전환에 성공하였습니다."
78
79msgid "The authentication token issued by the Identity service has expired."
80msgstr "Identity 서비스에서 발급한 인증 토큰이 만료되었습니다."
81
82msgid "Unable to establish connection to keystone endpoint."
83msgstr "Keystone 엔드포인트에 접속할 수 없습니다."
84
85msgid "Unable to retrieve authorized domains."
86msgstr "인증된 도메인을 찾지 못했습니다."
87
88msgid "Unable to retrieve authorized projects."
89msgstr "인증된 프로젝트를 가져올 수 없습니다."
90
91msgid "User Name"
92msgstr "사용자 이름"
93
94msgid "You are not authorized for any projects or domains."
95msgstr "프로젝트나 도메인에 대한 권한이 없습니다."
96
97msgid "You are not authorized for any projects."
98msgstr "모든 프로젝트에 대한 권한이 없습니다."
diff --git a/openstack_auth/locale/nl_NL/LC_MESSAGES/django.po b/openstack_auth/locale/nl_NL/LC_MESSAGES/django.po
deleted file mode 100644
index 66f2ce1..0000000
--- a/openstack_auth/locale/nl_NL/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,52 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Evelijn Saaltink <evelijnsaaltink@gmail.com>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9msgid ""
10msgstr ""
11"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
12"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
13"POT-Creation-Date: 2017-01-25 19:41+0000\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"PO-Revision-Date: 2015-08-17 09:33+0000\n"
18"Last-Translator: Evelijn Saaltink <evelijnsaaltink@gmail.com>\n"
19"Language: nl-NL\n"
20"Plural-Forms: nplurals=2; plural=(n != 1);\n"
21"Generated-By: Babel 2.0\n"
22"X-Generator: Zanata 3.7.3\n"
23"Language-Team: Dutch (Netherlands)\n"
24
25msgid "An error occurred authenticating. Please try again later."
26msgstr ""
27"Er is een fout opgetreden bij de verificatie. Probeert u het later nog eens."
28
29msgid "Authenticate using"
30msgstr "Gebruik authentificeren"
31
32msgid "Domain"
33msgstr "Domein"
34
35msgid "Password"
36msgstr "Wachtwoord"
37
38msgid "Region"
39msgstr "Regio"
40
41msgid "The authentication token issued by the Identity service has expired."
42msgstr ""
43"De door de identiteitsdienst verstrekte authenticatietoken is verlopen."
44
45msgid "Unable to retrieve authorized projects."
46msgstr "Niet in staat om de geauthentificeerde projecten op te halen."
47
48msgid "User Name"
49msgstr "Gebruikersnaam"
50
51msgid "You are not authorized for any projects."
52msgstr "U bent voor geen enkel project gemachtigd."
diff --git a/openstack_auth/locale/pa_IN/LC_MESSAGES/django.po b/openstack_auth/locale/pa_IN/LC_MESSAGES/django.po
deleted file mode 100644
index d5c6036..0000000
--- a/openstack_auth/locale/pa_IN/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,71 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
8msgid ""
9msgstr ""
10"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
11"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
12"POT-Creation-Date: 2017-01-25 19:41+0000\n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"PO-Revision-Date: 2015-12-28 03:33+0000\n"
17"Last-Translator: A S Alam <aalam@fedoraproject.org>\n"
18"Language: pa-IN\n"
19"Plural-Forms: nplurals=2; plural=(n != 1);\n"
20"Generated-By: Babel 2.0\n"
21"X-Generator: Zanata 3.7.3\n"
22"Language-Team: Punjabi (India)\n"
23
24msgid "An error occurred authenticating. Please try again later."
25msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਵੇਲੇ ਇੱਕ ਗਲਤੀ ਵਾਪਰੀ। ਕਿਰਪਾ ਕਰ ਕੇ ਬਾਅਦ ਵਿੱਚ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
26
27msgid "Authenticate using"
28msgstr "ਇਹ ਵਰਤ ਕੇ ਪ੍ਰਮਾਣਿਤ ਕਰੋ"
29
30msgid "Domain"
31msgstr "ਡੋਮੇਨ"
32
33msgid "Invalid credentials."
34msgstr "ਗਲਤ ਵੇਰਵੇ।"
35
36msgid ""
37"No authentication backend could be determined to handle the provided "
38"credentials."
39msgstr "ਦਿੱਤੀਆਂ ਸਨਦਾਂ ਨੂੰ ਨਿਪਟਾਉਣ ਲਈ ਕੋਈ ਪਰਮਾਣਕਿਤਾ ਬੈਕਐਂਡ ਪਤਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
40
41msgid "Password"
42msgstr "ਪਾਸਵਰਡ"
43
44#, python-format
45msgid "Project switch failed for user \"%(username)s\"."
46msgstr "\"%(username)s\" ਵਰਤੋਂ ਕਾਰ ਲਈ ਪ੍ਰੋਜੈਕਟ ਬਦਲਣਾ ਫੇਲ੍ਹ ਹੈ।"
47
48msgid "Region"
49msgstr "ਖੇਤਰ"
50
51#, python-format
52msgid "Switch to project \"%(project_name)s\" successful."
53msgstr "\"%(project_name)s\" ਪ੍ਰੋਜੈਕਟ ਲਈ ਬਦਲਣਾ ਕਾਮਯਾਬ ਹੈ।"
54
55msgid "The authentication token issued by the Identity service has expired."
56msgstr "ਪਛਾਣ ਸੇਵਾ ਵਲੋਂ ਜਾਰੀ ਕੀਤੇ ਪਰਮਾਣਕਿਤਾ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈ।"
57
58msgid "Unable to establish connection to keystone endpoint."
59msgstr "ਕੀਅਸਟੋਨ ਅੰਤ ਬਿੰਦੂ ਨਾਲ ਸੰਬੰਧ ਸਥਾਪਤ ਕਰਨ ਤੋਂ ਅਸਮਰੱਥ।"
60
61msgid "Unable to retrieve authorized projects."
62msgstr "ਅਧਿਕਾਰਤ ਪ੍ਰੋਜੈਕਟਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਅਸਮਰੱਥ।"
63
64msgid "User Name"
65msgstr "ਵਰਤੋਂਕਾਰ ਨਾਂ"
66
67msgid "You are not authorized for any projects or domains."
68msgstr "ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਪ੍ਰੋਜੈਕਟ ਜਾਂ ਡੋਮੇਨ ਲਈ ਅਧਿਕਾਰਿਤ ਨਹੀਂ ਹੋ।"
69
70msgid "You are not authorized for any projects."
71msgstr "ਤੁਸੀਂ ਕੋਈ ਵੀ ਪ੍ਰਾਜੈਕਟਾਂ ਲਈ ਅਧਿਕਾਰਤ ਨਹੀਂ ਹੋ।"
diff --git a/openstack_auth/locale/pl_PL/LC_MESSAGES/django.po b/openstack_auth/locale/pl_PL/LC_MESSAGES/django.po
deleted file mode 100644
index 3886b74..0000000
--- a/openstack_auth/locale/pl_PL/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,75 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Łukasz Jernaś <deejay1@srem.org>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9msgid ""
10msgstr ""
11"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
12"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
13"POT-Creation-Date: 2017-01-25 19:41+0000\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"PO-Revision-Date: 2016-03-21 09:03+0000\n"
18"Last-Translator: Łukasz Jernas <deejay1@srem.org>\n"
19"Language: pl-PL\n"
20"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
21"|| n%100>=20) ? 1 : 2);\n"
22"Generated-By: Babel 2.0\n"
23"X-Generator: Zanata 3.7.3\n"
24"Language-Team: Polish (Poland)\n"
25
26msgid "An error occurred authenticating. Please try again later."
27msgstr "Wystąpił błąd w trakcie uwierzytelniania. Proszę spróbować później."
28
29msgid "Authenticate using"
30msgstr "Uwierzytelnij się pużywając"
31
32msgid "Domain"
33msgstr "Domena"
34
35msgid "Invalid credentials."
36msgstr "Błędne dane logowania."
37
38msgid ""
39"No authentication backend could be determined to handle the provided "
40"credentials."
41msgstr ""
42"Nie można określić silnika uwierzytelniania, który by mógł obsłużyć podane "
43"dane uwierzytelniające."
44
45msgid "Password"
46msgstr "Hasło"
47
48#, python-format
49msgid "Project switch failed for user \"%(username)s\"."
50msgstr "Nie można przełączyć projektu dla użytkownika „%(username)s”."
51
52msgid "Region"
53msgstr "Region"
54
55#, python-format
56msgid "Switch to project \"%(project_name)s\" successful."
57msgstr "Przełączono na projekt „%(project_name)s”."
58
59msgid "The authentication token issued by the Identity service has expired."
60msgstr "Token uwierzytelniania wydany przez usługę uwierzytelniania wygasł."
61
62msgid "Unable to establish connection to keystone endpoint."
63msgstr "Nie można nawiązać połączenia z usługą keystone."
64
65msgid "Unable to retrieve authorized projects."
66msgstr "Nie można pobrać uwierzytelnionych projektów."
67
68msgid "User Name"
69msgstr "Nazwa użytkownika"
70
71msgid "You are not authorized for any projects or domains."
72msgstr "Brak upoważnień dla projektów lub domen."
73
74msgid "You are not authorized for any projects."
75msgstr "Nie upoważniono do żadnego projektu."
diff --git a/openstack_auth/locale/pt_BR/LC_MESSAGES/django.po b/openstack_auth/locale/pt_BR/LC_MESSAGES/django.po
deleted file mode 100644
index 9729744..0000000
--- a/openstack_auth/locale/pt_BR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,100 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Andre Campos Bezerra <andrecbezerra@gmail.com>, 2015
8# Gabriel Wainer, 2015
9# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
10# Fernando Pimenta <fernando.c.pimenta@gmail.com>, 2017. #zanata
11msgid ""
12msgstr ""
13"Project-Id-Version: django_openstack_auth 3.2.1.dev5\n"
14"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
15"POT-Creation-Date: 2017-06-28 12:08+0000\n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
19"PO-Revision-Date: 2017-06-28 12:37+0000\n"
20"Last-Translator: Fernando Pimenta <fernando.c.pimenta@gmail.com>\n"
21"Language: pt-BR\n"
22"Plural-Forms: nplurals=2; plural=(n > 1);\n"
23"Generated-By: Babel 2.0\n"
24"X-Generator: Zanata 3.9.6\n"
25"Language-Team: Portuguese (Brazil)\n"
26
27msgid "An error occurred authenticating. Please try again later."
28msgstr "Um erro ocorreu autenticando. Por favor tente novamente mais tarde."
29
30msgid "Authenticate using"
31msgstr "Autenticar usando"
32
33msgid "Could not find service provider ID on Keystone."
34msgstr "Não consegui encontrar o ID do provedor de serviço no Keystone."
35
36msgid "Domain"
37msgstr "Domínio"
38
39msgid "Invalid credentials."
40msgstr "Credencial Inválida"
41
42msgid "K2K Federation not setup for this session"
43msgstr "K2K Federation não está configurada para esta sessão"
44
45msgid ""
46"No authentication backend could be determined to handle the provided "
47"credentials."
48msgstr ""
49"Nenhuma autenticação poderia ser determinada para lidar com as credenciais "
50"fornecidas."
51
52msgid "Password"
53msgstr "Senha"
54
55#, python-format
56msgid "Please consider changing your password, it will expire in %s minutes"
57msgstr ""
58"Por favor, considere a alteração de sua senha, ela irá expirar em %s minutos"
59
60#, python-format
61msgid "Project switch failed for user \"%(username)s\"."
62msgstr "A troca de projeto falhou para o usuário \"%(username)s\"."
63
64msgid "Region"
65msgstr "Região"
66
67#, python-format
68msgid "Service provider authentication failed. %s"
69msgstr "Autenticação do provedor de serviço falhou. %s"
70
71#, python-format
72msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
73msgstr ""
74"Troca para o Provedor Keystone \"%(keystone_provider)s\" realizada com "
75"sucesso."
76
77#, python-format
78msgid "Switch to project \"%(project_name)s\" successful."
79msgstr "Troca para o projeto \"%(project_name)s\" realizada com sucesso."
80
81msgid "The authentication token issued by the Identity service has expired."
82msgstr "O token de autenticação emitido pelo serviço de identidade expirou."
83
84msgid "Unable to establish connection to keystone endpoint."
85msgstr "Não foi possível estabelecer conexão com o endpoint do Keystone."
86
87msgid "Unable to retrieve authorized domains."
88msgstr "Não foi possível recuperar domínios autorizados."
89
90msgid "Unable to retrieve authorized projects."
91msgstr "Não foi possível obter os projetos autorizados."
92
93msgid "User Name"
94msgstr "Nome do Usuário"
95
96msgid "You are not authorized for any projects or domains."
97msgstr "Você não está autorizado para nenhum projeto ou domínio."
98
99msgid "You are not authorized for any projects."
100msgstr "Você não está autorizado para nenhum projeto."
diff --git a/openstack_auth/locale/ru/LC_MESSAGES/django.po b/openstack_auth/locale/ru/LC_MESSAGES/django.po
deleted file mode 100644
index 9cac1d9..0000000
--- a/openstack_auth/locale/ru/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,87 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Alexander Vasiliev <avasiliev@asdco.ru>, 2015
8# Fedor Tarasenko <feodor.tarasenko@gmail.com>, 2015
9# Ilya Alekseyev <ilyaalekseyev@acm.org>, 2015
10# Ilya Shakhat <shakhat@gmail.com>, 2015
11# Nikita Burtsev, 2015
12# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
13# Artem <amikhalev90@gmail.com>, 2017. #zanata
14msgid ""
15msgstr ""
16"Project-Id-Version: django_openstack_auth 3.1.1.dev1\n"
17"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
18"POT-Creation-Date: 2017-01-25 19:41+0000\n"
19"MIME-Version: 1.0\n"
20"Content-Type: text/plain; charset=UTF-8\n"
21"Content-Transfer-Encoding: 8bit\n"
22"PO-Revision-Date: 2017-01-23 12:43+0000\n"
23"Last-Translator: Artem <amikhalev90@gmail.com>\n"
24"Language: ru\n"
25"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
26"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
27"%100>=11 && n%100<=14)? 2 : 3);\n"
28"Generated-By: Babel 2.0\n"
29"X-Generator: Zanata 3.7.3\n"
30"Language-Team: Russian\n"
31
32msgid "An error occurred authenticating. Please try again later."
33msgstr "Произошла ошибка аутентификации. Пожалуйста, повторите попытку позже."
34
35msgid "Authenticate using"
36msgstr "Аутентификация с использованием"
37
38msgid "Could not find service provider ID on Keystone."
39msgstr "Не удалось найти ИД поставщика служб в Keystone."
40
41msgid "Domain"
42msgstr "Домен"
43
44msgid "Invalid credentials."
45msgstr "Неправильные учётные данные."
46
47msgid ""
48"No authentication backend could be determined to handle the provided "
49"credentials."
50msgstr ""
51"Невозможно определить backend для обработки предоставленных учётных данных."
52
53msgid "Password"
54msgstr "Пароль"
55
56#, python-format
57msgid "Project switch failed for user \"%(username)s\"."
58msgstr "Не удалось переключить проект для пользователя \"%(username)s\"."
59
60msgid "Region"
61msgstr "Регион"
62
63#, python-format
64msgid "Service provider authentication failed. %s"
65msgstr "Неудачная аутентикация поставщика службы. %s"
66
67#, python-format
68msgid "Switch to project \"%(project_name)s\" successful."
69msgstr "Переключение на проект \"%(project_name)s\" выполнено успешно."
70
71msgid "The authentication token issued by the Identity service has expired."
72msgstr "Время действия токена, выданного сервисом идентификации, истекло."
73
74msgid "Unable to establish connection to keystone endpoint."
75msgstr "Невозможно установить соединение с точкой доступа keystone."
76
77msgid "Unable to retrieve authorized projects."
78msgstr "Невозможно получить авторизованные проекты"
79
80msgid "User Name"
81msgstr "Имя пользователя"
82
83msgid "You are not authorized for any projects or domains."
84msgstr "Вы не авторизованы ни в одном проекте или домене."
85
86msgid "You are not authorized for any projects."
87msgstr "Вы не авторизованы ни в одном проекте."
diff --git a/openstack_auth/locale/tr_TR/LC_MESSAGES/django.po b/openstack_auth/locale/tr_TR/LC_MESSAGES/django.po
deleted file mode 100644
index fddc2af..0000000
--- a/openstack_auth/locale/tr_TR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,99 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# İşbaran Akçayır <isbaran@gmail.com>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9# işbaran akçayır <isbaran@gmail.com>, 2017. #zanata
10# yasemin demiral <yasemin.demiral@tubitak.gov.tr>, 2017. #zanata
11msgid ""
12msgstr ""
13"Project-Id-Version: django_openstack_auth 3.5.1.dev8\n"
14"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
15"POT-Creation-Date: 2017-08-20 11:30+0000\n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
19"PO-Revision-Date: 2017-08-21 08:33+0000\n"
20"Last-Translator: yasemin demiral <yasemin.demiral@tubitak.gov.tr>\n"
21"Language: tr-TR\n"
22"Plural-Forms: nplurals=1; plural=0;\n"
23"Generated-By: Babel 2.0\n"
24"X-Generator: Zanata 3.9.6\n"
25"Language-Team: Turkish (Turkey)\n"
26
27msgid "An error occurred authenticating. Please try again later."
28msgstr "Bilinmeyen bir hata oluştu. Lütfen daha sonra tekrar deneyin."
29
30msgid "Authenticate using"
31msgstr "Kimlik doğrulama"
32
33msgid "Could not find service provider ID on Keystone."
34msgstr "Keystone için servis sağlayıcı ID'si bulunamadı."
35
36msgid "Domain"
37msgstr "Domain"
38
39msgid "Invalid credentials."
40msgstr "Geçersiz giriş bilgileri."
41
42msgid "K2K Federation not setup for this session"
43msgstr "K2K Birleşimi bu oturum için kurulmamış"
44
45msgid ""
46"No authentication backend could be determined to handle the provided "
47"credentials."
48msgstr ""
49"Sağlanan kimlik bilgilerini işleyecek kimlik doğrulama uygulaması tespit "
50"edilemedi."
51
52msgid "Password"
53msgstr "Parola"
54
55#, python-format
56msgid "Please consider changing your password, it will expire in %s minutes"
57msgstr ""
58"Lütfen parolanızı değiştirmeyin düşünün, %s dakikada süresini dolduracak"
59
60#, python-format
61msgid "Project switch failed for user \"%(username)s\"."
62msgstr "\"%(username)s\" kullanıcısı için proje geçişi başarısız."
63
64msgid "Region"
65msgstr "Bölge"
66
67#, python-format
68msgid "Service provider authentication failed. %s"
69msgstr "Servis sağlayıcı kimlik doğrulama başarısız. %s"
70
71#, python-format
72msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
73msgstr "\"%(keystone_provider)s\" Keystone Sağlayıcısına geçiş başarılı."
74
75#, python-format
76msgid "Switch to project \"%(project_name)s\" successful."
77msgstr "\"%(project_name)s\" projesine geçiş başarılı."
78
79msgid "The authentication token issued by the Identity service has expired."
80msgstr ""
81"Kimlik servisi tarafından verilen kimlik doğrulama belirtecinin süresi doldu."
82
83msgid "Unable to establish connection to keystone endpoint."
84msgstr "Keystone uç noktasına bağlantı kurulamadı."
85
86msgid "Unable to retrieve authorized domains."
87msgstr "Yetkili alanlar alınamadı."
88
89msgid "Unable to retrieve authorized projects."
90msgstr "Yetkiniz bulunan projeler alınamadı."
91
92msgid "User Name"
93msgstr "Kullanıcı Adı"
94
95msgid "You are not authorized for any projects or domains."
96msgstr "Herhangi bir proje veya domain için yetkili değilsiniz."
97
98msgid "You are not authorized for any projects."
99msgstr "Herhangi bir proje için yetkili değilsiniz."
diff --git a/openstack_auth/locale/uk/LC_MESSAGES/django.po b/openstack_auth/locale/uk/LC_MESSAGES/django.po
deleted file mode 100644
index 9f7805f..0000000
--- a/openstack_auth/locale/uk/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,50 +0,0 @@
1# Ukrainian translations for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7msgid ""
8msgstr ""
9"Project-Id-Version: Horizon\n"
10"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
11"POT-Creation-Date: 2015-08-04 06:25+0000\n"
12"PO-Revision-Date: 2015-07-16 01:34+0000\n"
13"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
14"Language-Team: Ukrainian (http://www.transifex.com/openstack/horizon/"
15"language/uk/)\n"
16"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
17"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
18"MIME-Version: 1.0\n"
19"Content-Type: text/plain; charset=utf-8\n"
20"Content-Transfer-Encoding: 8bit\n"
21"Generated-By: Babel 2.0\n"
22
23msgid "An error occurred authenticating. Please try again later."
24msgstr "Помилка у автентифікації. Будь-ласка, спробуйте пізніше."
25
26msgid "Domain"
27msgstr "Домен"
28
29msgid "Password"
30msgstr "Пароль"
31
32msgid "Region"
33msgstr "Регіон"
34
35msgid "The authentication token issued by the Identity service has expired."
36msgstr ""
37"Автентифікаційний токен, виданий Ідентифікаційним сервісом, більше не "
38"дійсний."
39
40msgid "Unable to authenticate to any available projects."
41msgstr "Неможливо автентифікуватися щодо жодного проекту."
42
43msgid "Unable to retrieve authorized projects."
44msgstr "Неможливо отримати авторизовані проекти."
45
46msgid "User Name"
47msgstr "Ім’я Користувача"
48
49msgid "You are not authorized for any projects."
50msgstr "Ви не авторизовані до жодного проекту."
diff --git a/openstack_auth/locale/zh_CN/LC_MESSAGES/django.po b/openstack_auth/locale/zh_CN/LC_MESSAGES/django.po
deleted file mode 100644
index 79f2ecc..0000000
--- a/openstack_auth/locale/zh_CN/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,99 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Allerson Yao, 2015
8# johnwoo_lee <lijiangsheng1@gmail.com>, 2015
9# LIU Yulong <dragon889@163.com>, 2015
10# Ying Chun Guo <daisy.ycguo@gmail.com>, 2015
11# 刘俊朋 <liujunpeng@inspur.com>, 2015
12# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
13# Bin <liubin@glab.cn>, 2017. #zanata
14# liujunpeng <liujunpeng@inspur.com>, 2017. #zanata
15msgid ""
16msgstr ""
17"Project-Id-Version: django_openstack_auth 3.4.1.dev6\n"
18"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
19"POT-Creation-Date: 2017-07-20 16:28+0000\n"
20"MIME-Version: 1.0\n"
21"Content-Type: text/plain; charset=UTF-8\n"
22"Content-Transfer-Encoding: 8bit\n"
23"PO-Revision-Date: 2017-07-24 02:52+0000\n"
24"Last-Translator: Bin <liubin@glab.cn>\n"
25"Language: zh-CN\n"
26"Plural-Forms: nplurals=1; plural=0;\n"
27"Generated-By: Babel 2.0\n"
28"X-Generator: Zanata 3.9.6\n"
29"Language-Team: Chinese (China)\n"
30
31msgid "An error occurred authenticating. Please try again later."
32msgstr "认证出现错误。请稍后重试。"
33
34msgid "Authenticate using"
35msgstr "使用认证"
36
37msgid "Could not find service provider ID on Keystone."
38msgstr "在Keystone上不能找到服务提供者ID。"
39
40msgid "Domain"
41msgstr "域"
42
43msgid "Invalid credentials."
44msgstr "凭据无效."
45
46msgid "K2K Federation not setup for this session"
47msgstr "会话没有建立K2K联邦"
48
49msgid ""
50"No authentication backend could be determined to handle the provided "
51"credentials."
52msgstr "没有认证后端可处理提供的凭据。"
53
54msgid "Password"
55msgstr "密码"
56
57#, python-format
58msgid "Please consider changing your password, it will expire in %s minutes"
59msgstr "请考虑修改你的密码,它将于%s分钟后过期"
60
61#, python-format
62msgid "Project switch failed for user \"%(username)s\"."
63msgstr "为用户“%(username)s”切换项目失败"
64
65msgid "Region"
66msgstr "区域"
67
68#, python-format
69msgid "Service provider authentication failed. %s"
70msgstr "服务提供者认证失败。%s"
71
72#, python-format
73msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
74msgstr "成功切换到 Keystone 提供者\"%(keystone_provider)s\"."
75
76#, python-format
77msgid "Switch to project \"%(project_name)s\" successful."
78msgstr "成功切换到项目\"%(project_name)s\""
79
80msgid "The authentication token issued by the Identity service has expired."
81msgstr "身份认证令牌已过期。"
82
83msgid "Unable to establish connection to keystone endpoint."
84msgstr "无法连接keystone端点。"
85
86msgid "Unable to retrieve authorized domains."
87msgstr "无法获取授权域。"
88
89msgid "Unable to retrieve authorized projects."
90msgstr "无法获取授权的项目。"
91
92msgid "User Name"
93msgstr "用户名"
94
95msgid "You are not authorized for any projects or domains."
96msgstr "您未被授权访问任何项目或域。"
97
98msgid "You are not authorized for any projects."
99msgstr "您未被授权访问任何项目。"
diff --git a/openstack_auth/locale/zh_TW/LC_MESSAGES/django.po b/openstack_auth/locale/zh_TW/LC_MESSAGES/django.po
deleted file mode 100644
index b8e20a8..0000000
--- a/openstack_auth/locale/zh_TW/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,90 +0,0 @@
1# Translations template for django_openstack_auth.
2# Copyright (C) 2015 ORGANIZATION
3# This file is distributed under the same license as the
4# django_openstack_auth project.
5#
6# Translators:
7# Zhang Xiaowei <zero00072@gmail.com>, 2015
8# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
9# Ching Kuo <gene@openstack.org>, 2017. #zanata
10msgid ""
11msgstr ""
12"Project-Id-Version: django_openstack_auth 3.1.1.dev12\n"
13"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
14"POT-Creation-Date: 2017-02-02 16:33+0000\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
18"PO-Revision-Date: 2017-02-02 07:53+0000\n"
19"Last-Translator: Ching Kuo <gene@openstack.org>\n"
20"Language: zh-TW\n"
21"Plural-Forms: nplurals=1; plural=0;\n"
22"Generated-By: Babel 2.0\n"
23"X-Generator: Zanata 3.7.3\n"
24"Language-Team: Chinese (Taiwan)\n"
25
26msgid "An error occurred authenticating. Please try again later."
27msgstr "認證發生錯誤。請稍後再試。"
28
29msgid "Authenticate using"
30msgstr "認證使用"
31
32msgid "Could not find service provider ID on Keystone."
33msgstr "在Keystone找不到服務提供者ID"
34
35msgid "Domain"
36msgstr "地域"
37
38msgid "Invalid credentials."
39msgstr "無效的認證。"
40
41msgid "K2K Federation not setup for this session"
42msgstr "這個session並未設定K2K聯合"
43
44msgid ""
45"No authentication backend could be determined to handle the provided "
46"credentials."
47msgstr "沒有選擇認證後端來處理提供的憑證。"
48
49msgid "Password"
50msgstr "密碼"
51
52#, python-format
53msgid "Project switch failed for user \"%(username)s\"."
54msgstr "使用者 \"%(username)s\" 的專案切換失敗。"
55
56msgid "Region"
57msgstr "區域"
58
59#, python-format
60msgid "Service provider authentication failed. %s"
61msgstr "服務來源認證錯誤。%s"
62
63#, python-format
64msgid "Switch to Keystone Provider \"%(keystone_provider)s\"successful."
65msgstr "成功切換認證來源到 \"%(keystone_provider)s\""
66
67#, python-format
68msgid "Switch to project \"%(project_name)s\" successful."
69msgstr "成功切換至專案 \"%(project_name)s\"。"
70
71msgid "The authentication token issued by the Identity service has expired."
72msgstr "認證伺服器發佈的門票已經過期。"
73
74msgid "Unable to establish connection to keystone endpoint."
75msgstr "無法建立與 Keystone 端點的連線。"
76
77msgid "Unable to retrieve authorized domains."
78msgstr "無法獲得認證過的地域。"
79
80msgid "Unable to retrieve authorized projects."
81msgstr "無法取回已授權的專案。"
82
83msgid "User Name"
84msgstr "用戶名稱"
85
86msgid "You are not authorized for any projects or domains."
87msgstr "您未獲授權對任何專案或網域執行動作。"
88
89msgid "You are not authorized for any projects."
90msgstr "沒有授權您任何專案。"
diff --git a/openstack_auth/models.py b/openstack_auth/models.py
deleted file mode 100644
index 7316aac..0000000
--- a/openstack_auth/models.py
+++ /dev/null
@@ -1,18 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14# import the User model in here so Django can find it
15from openstack_auth.user import User
16
17
18__all__ = ['User']
diff --git a/openstack_auth/plugin/__init__.py b/openstack_auth/plugin/__init__.py
deleted file mode 100644
index 75e5e85..0000000
--- a/openstack_auth/plugin/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License"); you may
2# not use this file except in compliance with the License. You may obtain
3# a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10# License for the specific language governing permissions and limitations
11# under the License.
12
13from openstack_auth.plugin.base import BasePlugin
14from openstack_auth.plugin.k2k import K2KAuthPlugin
15from openstack_auth.plugin.password import PasswordPlugin
16from openstack_auth.plugin.token import TokenPlugin
17
18
19__all__ = ['BasePlugin',
20 'PasswordPlugin',
21 'TokenPlugin',
22 'K2KAuthPlugin']
diff --git a/openstack_auth/plugin/base.py b/openstack_auth/plugin/base.py
deleted file mode 100644
index f1aff52..0000000
--- a/openstack_auth/plugin/base.py
+++ /dev/null
@@ -1,241 +0,0 @@
1# Licensed under the Apache License, Version 2.0 (the "License"); you may
2# not use this file except in compliance with the License. You may obtain
3# a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10# License for the specific language governing permissions and limitations
11# under the License.
12
13import abc
14import logging
15
16from django.utils.translation import ugettext_lazy as _
17from keystoneauth1 import exceptions as keystone_exceptions
18from keystoneclient.v2_0 import client as v2_client
19from keystoneclient.v3 import client as v3_client
20import six
21
22from openstack_auth import exceptions
23from openstack_auth import utils
24
25LOG = logging.getLogger(__name__)
26__all__ = ['BasePlugin']
27
28
29@six.add_metaclass(abc.ABCMeta)
30class BasePlugin(object):
31 """Base plugin to provide ways to log in to dashboard.
32
33 Provides a framework for keystoneclient plugins that can be used with the
34 information provided to return an unscoped token.
35 """
36
37 @abc.abstractmethod
38 def get_plugin(self, auth_url=None, **kwargs):
39 """Create a new plugin to attempt to authenticate.
40
41 Given the information provided by the login providers attempt to create
42 an authentication plugin that can be used to authenticate the user.
43
44 If the provided login information does not contain enough information
45 for this plugin to proceed then it should return None.
46
47 :param str auth_url: The URL to authenticate against.
48
49 :returns: A plugin that will be used to authenticate or None if the
50 plugin cannot authenticate with the data provided.
51 :rtype: keystoneclient.auth.BaseAuthPlugin
52 """
53 return None
54
55 @property
56 def keystone_version(self):
57 """The Identity API version as specified in the settings file."""
58 return utils.get_keystone_version()
59
60 def list_projects(self, session, auth_plugin, auth_ref=None):
61 """List the projects that are accessible to this plugin.
62
63 Query the keystone server for all projects that this authentication
64 token can be rescoped to.
65
66 This function is overrideable by plugins if they use a non-standard
67 mechanism to determine projects.
68
69 :param session: A session object for communication:
70 :type session: keystoneclient.session.Session
71 :param auth_plugin: The auth plugin returned by :py:meth:`get_plugin`.
72 :type auth_plugin: keystoneclient.auth.BaseAuthPlugin
73 :param auth_ref: The current authentication data. This is optional as
74 future auth plugins may not have auth_ref data and all
75 the required information should be available via the
76 auth_plugin.
77 :type auth_ref: keystoneclient.access.AccessInfo` or None.
78
79 :raises: exceptions.KeystoneAuthException on lookup failure.
80
81 :returns: A list of projects. This currently accepts returning both v2
82 or v3 keystoneclient projects objects.
83 """
84 try:
85 if self.keystone_version >= 3:
86 client = v3_client.Client(session=session, auth=auth_plugin)
87 if auth_ref.is_federated:
88 return client.federation.projects.list()
89 else:
90 return client.projects.list(user=auth_ref.user_id)
91
92 else:
93 client = v2_client.Client(session=session, auth=auth_plugin)
94 return client.tenants.list()
95
96 except (keystone_exceptions.ClientException,
97 keystone_exceptions.AuthorizationFailure):
98 msg = _('Unable to retrieve authorized projects.')
99 raise exceptions.KeystoneAuthException(msg)
100
101 def list_domains(self, session, auth_plugin, auth_ref=None):
102 try:
103 if self.keystone_version >= 3:
104 client = v3_client.Client(session=session, auth=auth_plugin)
105 return client.auth.domains()
106 else:
107 return []