Return-Path: X-Original-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D8881C4A7 for ; Thu, 12 Sep 2013 15:08:52 +0000 (UTC) Received: (qmail 75372 invoked by uid 500); 12 Sep 2013 15:08:52 -0000 Delivered-To: apmail-incubator-allura-commits-archive@incubator.apache.org Received: (qmail 75271 invoked by uid 500); 12 Sep 2013 15:08:51 -0000 Mailing-List: contact allura-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: allura-dev@incubator.apache.org Delivered-To: mailing list allura-commits@incubator.apache.org Received: (qmail 75226 invoked by uid 99); 12 Sep 2013 15:08:50 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Sep 2013 15:08:50 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 927328BFCDB; Thu, 12 Sep 2013 15:08:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: johnsca@apache.org To: allura-commits@incubator.apache.org Date: Thu, 12 Sep 2013 15:08:52 -0000 Message-Id: <7afe7c3776e2418686fabd12c3c512df@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [3/3] git commit: [#6529] Added login overlay for project importers [#6529] Added login overlay for project importers Signed-off-by: Cory Johns Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/ed554cb0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ed554cb0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ed554cb0 Branch: refs/heads/cj/6529 Commit: ed554cb09e7966f1ff665e39158f4d26b6ca3642 Parents: 224017c Author: Cory Johns Authored: Tue Sep 10 21:55:05 2013 +0000 Committer: Cory Johns Committed: Thu Sep 12 15:08:21 2013 +0000 ---------------------------------------------------------------------- Allura/allura/controllers/auth.py | 4 ++ Allura/allura/lib/app_globals.py | 7 +++ Allura/allura/lib/security.py | 10 +++- Allura/allura/lib/widgets/forms.py | 3 +- .../lib/widgets/resources/js/login_overlay.js | 27 +++++++++ Allura/allura/nf/allura/css/allura.css | 13 ++++- .../allura/templates/jinja_master/master.html | 3 + .../templates/jinja_master/theme_macros.html | 11 +++- Allura/allura/templates/login_fragment.html | 60 ++++++++++++++++++++ Allura/allura/templates/widgets/forge_form.html | 1 + ForgeImporters/forgeimporters/base.py | 3 +- 11 files changed, 135 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/controllers/auth.py ---------------------------------------------------------------------- diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py index 4c1ee37..fa00208 100644 --- a/Allura/allura/controllers/auth.py +++ b/Allura/allura/controllers/auth.py @@ -105,6 +105,10 @@ class AuthController(BaseController): c.form = F.login_form return dict(oid_providers=OID_PROVIDERS, return_to=return_to) + @expose('jinja:allura:templates/login_fragment.html') + def login_fragment(self, *args, **kwargs): + return self.index(*args, **kwargs) + @expose('jinja:allura:templates/custom_login.html') def login_verify_oid(self, provider, username, return_to=None): if provider: http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/lib/app_globals.py ---------------------------------------------------------------------- diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py index c1c0b32..e684383 100644 --- a/Allura/allura/lib/app_globals.py +++ b/Allura/allura/lib/app_globals.py @@ -115,6 +115,7 @@ class Globals(object): # Load login/logout urls; only used for SFX logins self.login_url = config.get('auth.login_url', '/auth/') self.logout_url = config.get('auth.logout_url', '/auth/logout') + self.login_fragment_url = config.get('auth.login_fragment_url', '/auth/login_fragment') # Setup Gravatar self.gravatar = gravatar.url @@ -401,6 +402,12 @@ class Globals(object): def resource_manager(self): return ew_core.widget_context.resource_manager + def register_css(self, href, **kw): + self.resource_manager.register(ew.CSSLink(href, **kw)) + + def register_js(self, href, **kw): + self.resource_manager.register(ew.JSLink(href, **kw)) + def register_forge_css(self, href, **kw): self.resource_manager.register(ew.CSSLink('allura/' + href, **kw)) http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/lib/security.py ---------------------------------------------------------------------- diff --git a/Allura/allura/lib/security.py b/Allura/allura/lib/security.py index a0497ca..4718e56 100644 --- a/Allura/allura/lib/security.py +++ b/Allura/allura/lib/security.py @@ -383,7 +383,7 @@ def all_allowed(obj, user_or_role=None, project=None): return set([M.ALL_PERMISSIONS]) return perms -def require(predicate, message=None): +def require(predicate, message=None, login_overlay=False): ''' Example: require(has_access(c.app, 'read')) @@ -401,13 +401,17 @@ def require(predicate, message=None): if c.user != M.User.anonymous(): request.environ['error_message'] = message raise exc.HTTPForbidden(detail=message) + elif login_overlay: + c.show_login_overlay = True else: raise exc.HTTPUnauthorized() -def require_access(obj, permission, **kwargs): +def require_access(obj, permission, login_overlay=False, **kwargs): if obj is not None: predicate = has_access(obj, permission, **kwargs) - return require(predicate, message='%s access required' % permission.capitalize()) + return require(predicate, + message='%s access required' % permission.capitalize(), + login_overlay=login_overlay) else: raise exc.HTTPForbidden(detail="Could not verify permissions for this page.") http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/lib/widgets/forms.py ---------------------------------------------------------------------- diff --git a/Allura/allura/lib/widgets/forms.py b/Allura/allura/lib/widgets/forms.py index ae90b26..9d3f602 100644 --- a/Allura/allura/lib/widgets/forms.py +++ b/Allura/allura/lib/widgets/forms.py @@ -84,7 +84,8 @@ class ForgeForm(ew.SimpleForm): submit_text='Save', style='standard', method='post', - enctype=None) + enctype=None, + target=None) def display_label(self, field, label_text=None): ctx = super(ForgeForm, self).context_for(field) http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/lib/widgets/resources/js/login_overlay.js ---------------------------------------------------------------------- diff --git a/Allura/allura/lib/widgets/resources/js/login_overlay.js b/Allura/allura/lib/widgets/resources/js/login_overlay.js new file mode 100644 index 0000000..c852916 --- /dev/null +++ b/Allura/allura/lib/widgets/resources/js/login_overlay.js @@ -0,0 +1,27 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*global jQuery, $ */ +jQuery(function($) { + $('#login_overlay').draggable().lightbox_me({ + closeClick: false, + closeEsc: false, + centered: true + }); +}); http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/nf/allura/css/allura.css ---------------------------------------------------------------------- diff --git a/Allura/allura/nf/allura/css/allura.css b/Allura/allura/nf/allura/css/allura.css index 1334b0c..38404f7 100644 --- a/Allura/allura/nf/allura/css/allura.css +++ b/Allura/allura/nf/allura/css/allura.css @@ -215,4 +215,15 @@ b.ico.ico-vote-down { background-image: url('../images/vote_down.png'); } tr.rev div.markdown_content p { padding: 0; margin-bottom: 0; -} \ No newline at end of file +} + +#login_overlay .title { + margin-bottom: 0; + padding-left: 10px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +#login_overlay iframe { + width: 400px; +} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/templates/jinja_master/master.html ---------------------------------------------------------------------- diff --git a/Allura/allura/templates/jinja_master/master.html b/Allura/allura/templates/jinja_master/master.html index e3afa6a..8060240 100644 --- a/Allura/allura/templates/jinja_master/master.html +++ b/Allura/allura/templates/jinja_master/master.html @@ -132,6 +132,9 @@ {% endfor %} + {% if c.show_login_overlay %} + {{theme_macros.login_overlay()}} + {% endif %} {% for blob in g.resource_manager.emit('body_js') %} {{ blob }} {% endfor %} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/templates/jinja_master/theme_macros.html ---------------------------------------------------------------------- diff --git a/Allura/allura/templates/jinja_master/theme_macros.html b/Allura/allura/templates/jinja_master/theme_macros.html index 61f5e2f..7fc070c 100644 --- a/Allura/allura/templates/jinja_master/theme_macros.html +++ b/Allura/allura/templates/jinja_master/theme_macros.html @@ -112,4 +112,13 @@ {% endif %} {% endif %} -{%- endmacro %} \ No newline at end of file +{%- endmacro %} + +{%- macro login_overlay() %} + {% do g.register_js('js/jquery.lightbox_me.js') %} + {% do g.register_js('js/login_overlay.js') %} +
+

Login Required

+ +
+{%- endmacro %} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/templates/login_fragment.html ---------------------------------------------------------------------- diff --git a/Allura/allura/templates/login_fragment.html b/Allura/allura/templates/login_fragment.html new file mode 100644 index 0000000..31fb26d --- /dev/null +++ b/Allura/allura/templates/login_fragment.html @@ -0,0 +1,60 @@ +{#- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +-#} + + +{% import 'allura:templates/jinja_master/lib.html' as lib with context %} +{% if g.theme.jinja_macros %} + {% import g.theme.jinja_macros as theme_macros with context %} +{% endif %} +{% do g.register_forge_js('js/jquery-base.js') %} +{% do g.register_forge_js('js/allura-base.js') %} +{% do g.theme.require() %} +{% do g.resource_manager.register_widgets(c) %} +{# paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ #} + + + + + + + {{theme_macros.extra_header(g.theme_href(''))}} + {% for blob in g.resource_manager.emit('head_css') %} + {{ blob }} + {% endfor %} + {% for blob in g.resource_manager.emit('head_js') %} + {{ blob }} + {% endfor %} + + + + {{ c.form.display(action='../do_login', target='_top', value=dict(return_to=return_to)) }} + + {% for blob in g.resource_manager.emit('body_js_tail') %} + {{ blob }} + {% endfor %} + + http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/Allura/allura/templates/widgets/forge_form.html ---------------------------------------------------------------------- diff --git a/Allura/allura/templates/widgets/forge_form.html b/Allura/allura/templates/widgets/forge_form.html index 8adde73..adbc01c 100644 --- a/Allura/allura/templates/widgets/forge_form.html +++ b/Allura/allura/templates/widgets/forge_form.html @@ -18,6 +18,7 @@ -#}
{% set extra_width = 0 %} {% if style == 'wide' %} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ed554cb0/ForgeImporters/forgeimporters/base.py ---------------------------------------------------------------------- diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py index ffb1650..8cb8066 100644 --- a/ForgeImporters/forgeimporters/base.py +++ b/ForgeImporters/forgeimporters/base.py @@ -188,7 +188,7 @@ class ProjectImporter(BaseController): self.neighborhood = neighborhood def _check_security(self): - require_access(self.neighborhood, 'register') + require_access(self.neighborhood, 'register', login_overlay=True) @LazyProperty def tool_importers(self): @@ -229,6 +229,7 @@ class ProjectImporter(BaseController): tools installed and redirect to the new project, presumably with a message indicating that some data will not be available immediately. """ + require_access(self.neighborhood, 'register', login_overlay=False) try: c.project = self.neighborhood.register_project(kw['project_shortname'], project_name=kw['project_name'])