def _send_comment_notification_mail(recipient_name, recipient_email, data, lang="en"): ''' A helper function to send notification emails to given recipients ''' current_locale = get_lang() if lang: set_lang(lang) from ckanext.datarequests import email_template # recreate the request url url = str(g.site_url) + tk.url_for(controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='show', id=data.get("request_id")) data["link"] = url # fill out the email template subject = email_template.subject.format(**data) message = email_template.message.format(**data) # Finally mail the user and reset locale try: mail_recipient(recipient_name, recipient_email, subject, message) except MailerException, e: log.error(e)
def mail_process_status(locale, member_user, approve, group_name, capacity): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) role_name = _(capacity) subject_template = _SUBJECT_MEMBERSHIP_APPROVED( ) if approve else _SUBJECT_MEMBERSHIP_REJECTED() message_template = _MESSAGE_MEMBERSHIP_APPROVED( ) if approve else _MESSAGE_MEMBERSHIP_REJECTED() subject = subject_template % { 'organization': group_name } message = message_template % { 'role': role_name, 'organization': group_name } try: mail_user(member_user, subject, message) except Exception: log.exception("Mail could not be sent") # raise MailerException("Mail could not be sent") finally: set_lang(current_locale)
def logged_in(self): # we need to set the language via a redirect lang = session.pop('lang', None) session.save() came_from = request.params.get('came_from', '') # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: context = None data_dict = {'id': c.user} user_dict = get_action('user_show')(context, data_dict) h.flash_success(_("%s is now logged in") % user_dict['display_name']) if came_from: return h.redirect_to(str(came_from)) return self.me() else: err = _('Login failed. Bad username or password.') if g.openid_enabled: err += _(' (Or if using OpenID, it hasn\'t been associated ' 'with a user account.)') if h.asbool(config.get('ckan.legacy_templates', 'false')): h.flash_error(err) h.redirect_to(locale=lang, controller='user', action='login', came_from=came_from) else: return self.login(error=err)
def _send_comment_notification_mail(recipient_name, recipient_email, data, lang="en"): ''' A helper function to send notification emails to given recipients ''' current_locale = get_lang() if lang: set_lang(lang) from ckanext.datarequests import email_template # recreate the request url url = str(g.site_url) + tk.url_for( controller= 'ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='show', id=data.get("request_id")) data["link"] = url # fill out the email template subject = email_template.subject.format(**data) message = email_template.message.format(**data) # Finally mail the user and reset locale try: mail_recipient(recipient_name, recipient_email, subject, message) except MailerException, e: log.error(e)
def logged_in(self): # we need to set the language via a redirect lang = session.pop("lang", None) session.save() came_from = request.params.get("came_from", "") # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: context = None data_dict = {"id": c.user} user_dict = get_action("user_show")(context, data_dict) h.flash_success(_("%s is now logged in") % user_dict["display_name"]) if came_from: return h.redirect_to(str(came_from)) return self.me() else: err = _("Login failed. Bad username or password.") if g.openid_enabled: err += _(" (Or if using OpenID, it hasn't been associated " "with a user account.)") if h.asbool(config.get("ckan.legacy_templates", "false")): h.flash_error(err) h.redirect_to(locale=lang, controller="user", action="login", came_from=came_from) else: return self.login(error=err)
def mail_process_status(locale, member_user, approve, group_name, capacity): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) role_name = _(capacity) subject_template = _SUBJECT_MEMBERSHIP_APPROVED( ) if approve else _SUBJECT_MEMBERSHIP_REJECTED() message_template = _MESSAGE_MEMBERSHIP_APPROVED( ) if approve else _MESSAGE_MEMBERSHIP_REJECTED() subject = subject_template % {'organization': group_name} message = message_template % { 'role': role_name, 'organization': group_name } try: mail_user(member_user, subject, message) except Exception: log.exception("Mail could not be sent") # raise MailerException("Mail could not be sent") finally: set_lang(current_locale)
def _mail_new_membership_request(locale, admin, group, url, user_obj, data_dict=None, admin_list=None): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) subject = hdx_util._SUBJECT_MEMBERSHIP_REQUEST.format(**{ 'user_fullname': user_obj.display_name }) user_message = data_dict.get('message') if data_dict else 'Please add me to this organisation' message = hdx_util._MESSAGE_MEMBERSHIP_REQUEST.format(**{ 'user_fullname': user_obj.display_name, 'user_email': user_obj.email, 'org_title': group.display_name, 'org_add_member_url': (config['ckan.site_url'] + '/organization/members/{org_name}').format( org_name=group.name), 'user_message': user_message }) try: # mail_user(admin, subject, message) # HDX change if admin: hdx_mail.send_mail([{'display_name': admin.display_name or admin.fullname, 'email': admin.email}], subject, message) else: hdx_mail.send_mail(admin_list, subject, message, True) except MailerException, e: log.error(e)
def logged_in(self): # we need to set the language via a redirect lang = session.pop('lang', None) session.save() # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: is_new = False is_sysadmin = new_authz.is_sysadmin(c.user) # Retrieve information about the current user context = {'model': model, 'session': model.Session, 'user': c.user or c.author, 'schema': schema.user_new_form_schema()} data_dict = {'id': c.user} user_dict = get_action('user_show')(context, data_dict) # This check is not needed (or correct) for sys admins if not is_sysadmin: # Get all organizations and all groups the user belongs to orgs_q = model.Session.query(model.Group) \ .filter(model.Group.is_organization == True) \ .filter(model.Group.state == 'active') q = model.Session.query(model.Member) \ .filter(model.Member.table_name == 'user') \ .filter(model.Member.table_id == user_dict['id']) group_ids = [] for row in q.all(): group_ids.append(row.group_id) if not group_ids: is_new = True else: orgs_q = orgs_q.filter(model.Group.id.in_(group_ids)) orgs_list = model_dictize.group_list_dictize(orgs_q.all(), context) if len(orgs_list) == 0: is_new = True h.flash_success(_("<p><strong>Note</strong></p>" "<p>%s is now logged in</p>") % user_dict['display_name'], allow_html=True) if is_new: return h.redirect_to(controller='ckanext.canada.controller:CanadaController', action='view_new_user', locale=lang) else: return h.redirect_to(controller='package', action='search', locale=lang) else: h.flash_error(_('Login failed. Bad username or password.')) return h.redirect_to(controller='user', action='login', locale=lang)
def load_translations(lang): # Register a translator in this thread so that # the _() functions in logic layer can work from paste.registry import Registry from pylons import translator from pylons import request registry = Registry() registry.prepare() class FakePylons: translator = None fakepylons = FakePylons() class FakeRequest: # Stores details of the translator environ = {'pylons.pylons': fakepylons} registry.register(request, FakeRequest()) # create translator i18n.set_lang(lang) # pull out translator and register it registry.register(translator, fakepylons.translator)
def i18_js_strings(self, lang): ''' This is used to produce the translations for javascript. ''' i18n.set_lang(lang) html = base.render('js_strings.html', cache_force=True) html = re.sub('<[^\>]*>', '', html) header = "text/javascript; charset=utf-8" base.response.headers['Content-type'] = header return html
def i18_js_strings(self, lang): ''' This is used to produce the translations for javascript. ''' i18n.set_lang(lang) html = base.render('js_strings.html', cache_force=True) html = re.sub(r'<[^\>]*>', '', html) header = "text/javascript; charset=utf-8" base.response.headers['Content-type'] = header return html
def notify(self): prev_lang = i18n.get_lang() i18n.set_lang(config.get('ckan.locale_default', 'en')) comment_id = request.params.get('comment_id') comment = request.params.get('comment') pkg_id = request.params.get('pkg_id') recipient_name_field = config.get('disqus.notify.name_field') recipient_email_field = config.get('disqus.notify.email_field') mail_sent = False if pkg_id is not None: pkg = logic.get_action('package_show')({ 'ignore_auth': True }, { 'id': pkg_id }) if recipient_email_field in pkg and pkg.get( recipient_email_field, '') != '': url_path = toolkit.url_for(controller='package', action='read', id=pkg_id) url = '%s%s' % (request.host_url, url_path) msg_fields = { 'url': url, 'title': pkg["title"], 'comment': comment } title = _(u'New comment for dataset "%(title)s"') % msg_fields msg = _( u'The dataset "%(title)s" has received a new comment:\n\n%(comment)s\n\n<%(url)s>' ) % msg_fields recipient_name = pkg.get(recipient_name_field, _(u'Dataset maintainer')) recipient_email = pkg.get(recipient_email_field) try: mailer.mail_recipient(recipient_name, recipient_email, title, msg) mail_sent = True except mailer.MailerException as e: log.error('Could not send disqus notification mail: %s' % e) data = { 'comment_id': comment_id, 'pkg_id': pkg_id, 'mail_sent': mail_sent } result = render('disqus_callback.html', data) i18n.set_lang(prev_lang) return result
def send_comment_notification_mail(recipient_name, recipient_email, dataset, comment): from ckanext.ytp_comments import email_template # Fill out the message template url = str(g.site_url) + toolkit.url_for(controller='package', action='read', id=dataset.id) if comment.user_id: userobj = model.User.get(comment.user_id) commenter_email = userobj.email commenter_name = userobj.name subject_vars = { 'dataset': dataset.title } subject = email_template.subject.format(**subject_vars) message_vars = { 'user': commenter_name, 'email': commenter_email, 'dataset': dataset.title, 'link': url, 'comment_subject': helpers.markdown_extract(comment.subject).strip(), 'comment': helpers.markdown_extract(comment.comment).strip() } message = email_template.message.format(**message_vars) log.debug(subject) log.debug(message) # Locale fix current_locale = get_lang() locale = _get_safe_locale() if locale == 'en': _reset_lang() else: set_lang(locale) # Finally mail the user and reset locale try: log.debug("LOCALE: " + str(locale)) log.debug(subject) log.debug(message) mail_recipient(recipient_name, recipient_email, subject, message) except MailerException, e: log.error(e)
def logged_in(self): # we need to set the language via a redirect # Lang is not being retrieved properly by the Babel i18n lib in # this redirect, so using this clunky workaround for now. lang = session.pop('lang', None) if lang is None: came_from = request.params.get('came_from', '') if came_from.startswith('/fr'): lang = 'fr' else: lang = 'en' session.save() # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: context = None data_dict = {'id': c.user} user_dict = get_action('user_show')(context, data_dict) h.flash_success( _('<strong>Note</strong><br>{0} is now logged in').format( user_dict['display_name'] ), allow_html=True ) notice_no_access() return h.redirect_to( controller='ckanext.canada.controller:CanadaController', action='home', locale=lang) else: h.flash_error(_('Login failed. Bad username or password.')) return h.redirect_to( controller='user', action='login', locale=lang )
def mail_new_membership_request(locale, admin, group_name, url, user_name, user_email): # TODO: Set admin locale. Admin/user locale is stored at drupal database so may be a bit challenging to fetch it. We default to finnish for the time being current_locale = get_lang() i18n.set_lang("fi") subject = _SUBJECT_MEMBERSHIP_REQUEST() % {'organization': group_name} message = _MESSAGE_MEMBERSHIP_REQUEST() % { 'user': user_name, 'email': user_email, 'organization': group_name, 'link': url } try: mail_user(admin, subject, message) except Exception: log.exception("Mail could not be sent") finally: set_lang(current_locale)
def mail_new_membership_request(locale, admin, group_name, url, user_name, user_email): # TODO: Set admin locale. Admin/user locale is stored at drupal database so may be a bit challenging to fetch it. We default to finnish for the time being current_locale = get_lang() i18n.set_lang("fi") subject = _SUBJECT_MEMBERSHIP_REQUEST() % { 'organization': group_name } message = _MESSAGE_MEMBERSHIP_REQUEST() % { 'user': user_name, 'email': user_email, 'organization': group_name, 'link': url } try: mail_user(admin, subject, message) except Exception: log.exception("Mail could not be sent") finally: set_lang(current_locale)
def _mail_new_membership_request(locale, admin, group_name, url, user_name, user_email): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) subject = _SUBJECT_MEMBERSHIP_REQUEST() % { 'organization': group_name } message = _MESSAGE_MEMBERSHIP_REQUEST() % { 'user': user_name, 'email': user_email, 'organization': group_name, 'link': url } try: mail_user(admin, subject, message) except MailerException, e: log.error(e)
def _mail_process_status(locale, member_user, approve, group_name, capacity): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) role_name = _(capacity) subject = hdx_util._SUBJECT_MEMBERSHIP_APPROVED if approve else hdx_util._SUBJECT_MEMBERSHIP_REJECTED message_template = hdx_util._MESSAGE_MEMBERSHIP_APPROVED if approve else hdx_util._MESSAGE_MEMBERSHIP_REJECTED message = message_template.format(**{ 'role': role_name, 'organization': group_name }) try: hdx_mail.send_mail( [{'display_name': member_user.display_name or member_user.fullname, 'email': member_user.email}], subject, message) except MailerException, e: log.error(e)
def mail_new_membership_request(locale, admin, group_name, url, user_name, user_email): current_locale = get_lang() if locale == 'en': _reset_lang() else: set_lang(locale) subject = _SUBJECT_MEMBERSHIP_REQUEST() % { 'organization': group_name } message = _MESSAGE_MEMBERSHIP_REQUEST() % { 'user': user_name, 'email': user_email, 'organization': group_name, 'link': url } try: _mail_user(admin, subject, message, context="Admin") except Exception: log.exception("Mail could not be sent") finally: set_lang(current_locale)
def logged_in(self): # we need to set the language via a redirect lang = session.pop("lang", None) session.save() # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: context = None data_dict = {"id": c.user} user_dict = get_action("user_show")(context, data_dict) h.flash_success( _("<p><strong>Note</strong></p>" "<p>%s is now logged in</p>") % user_dict["display_name"], allow_html=True, ) return h.redirect_to(controller="package", action="search", locale=lang) else: h.flash_error(_("Login failed. Bad username or password.")) return h.redirect_to(controller="user", action="login", locale=lang)
def logged_in(self): # we need to set the language via a redirect lang = session.pop('lang', None) session.save() # we need to set the language explicitly here or the flash # messages will not be translated. i18n.set_lang(lang) if c.user: context = None data_dict = {'id': c.user} user_dict = get_action('user_show')(context, data_dict) h.flash_success(_("<p><strong>Note</strong></p>" "<p>%s is now logged in</p>") % user_dict['display_name'], allow_html=True) return h.redirect_to(controller='package', action='search', locale=lang) else: h.flash_error(_('Login failed. Bad username or password.')) return h.redirect_to(controller='user', action='login', locale=lang)
def identify(self): log.info('identify') #set language as default to be able to translate flash messages lang = request.environ.get('CKAN_LANG') if lang and lang=='sk': i18n.set_lang('sk') c = toolkit.c environ = toolkit.request.environ user = environ.get('REMOTE_USER', '') log.info('environ user %s', user) if user: identity = environ.get("repoze.who.identity", {}) user_data = identity.get("attributes", {}) ticket = identity.get("ticket", '') user_id = identity.get("repoze.who.userid") if not (user_data or user_id): log.info("redirect to logged_out") delete_cookies() return h.redirect_to(controller='user', action='logged_out') if not user_data: user_ticket = pylons.session.get('ckanext-cas-ticket', '') if user_ticket: if is_ticket_valid(user_ticket): c.userobj = model.User.get(user_id) else: log.info("redirect to logged_out") environ['REMOTE_USER'] = None environ['repoze.who.identity'] = None delete_cookies() h.flash_notice(toolkit._('You were logged out in another app')) return #h.redirect_to(controller='home', action='index') else: c.userobj = model.User.get(user_id) else: subject_id = user_data['Subject.UPVSIdentityID'][0] actor_id = user_data['Actor.UPVSIdentityID'][0] success = insert_entry(ticket, subject_id, actor_id) if not success: log.info("same ticket in DB - consistency error") pylons.session['ckanext-cas-ticket'] = ticket pylons.session.save() self._create_user(user_data, 'Actor') if actor_id!=subject_id: self._create_user(user_data, 'Subject') log.debug('jedna sa o zastupovanie subjectu %s actorom %s', subject_id, actor_id) spr_roles = user_data.get('SPR.Roles','') if self._subject_is_org(subject_id) and not 'MOD-R-PO' in spr_roles: identity["repoze.who.userid"] = actor_id pylons.session['ckanext-cas-actorid'] = subject_id pylons.session.save() c.userobj = model.User.get(actor_id) h.flash_notice(toolkit._('You are not allowed to act as {0} in data.gov.sk').format(user_data['Subject.FormattedName'][0])) else: identity["repoze.who.userid"] = subject_id pylons.session['ckanext-cas-actorid'] = actor_id pylons.session.save() c.userobj = model.User.get(subject_id) else: c.userobj = model.User.get(subject_id) #set c.user -> CKAN logic log.debug('c.userobj: %s',c.userobj) c.user = c.userobj.name if user_data: spr_roles = user_data.get('SPR.Roles','') subject_id = user_data['Subject.UPVSIdentityID'][0] actor_id = user_data['Actor.UPVSIdentityID'][0] log.debug("SPR roles: %s", spr_roles) pylons.session['ckanext-cas-roles'] = spr_roles pylons.session.save() if 'MOD-R-PO' in spr_roles: org_id = user_data['Subject.UPVSIdentityID'][0] org_name = user_data.get('Subject.Username',user_data['Subject.UPVSIdentityID'])[0] org_title = user_data['Subject.FormattedName'][0] self.create_organization(org_id, org_name, org_title) if c.user: toolkit.get_action('auditlog_send')(data_dict={'event_name' : 'user_login', 'subject' : user_data['Subject.UPVSIdentityID'][0], 'authorized_user' : user_data['Actor.UPVSIdentityID'][0], 'description' : 'User login to CKAN from IP {0}'.format(environ.get('REMOTE_ADDR', '')), 'object_reference' : 'UserID://' + user_data['Subject.UPVSIdentityID'][0], 'debug_level' : 2, 'error_code' : 0}) else: toolkit.get_action('auditlog_send')(data_dict={'event_name' : 'user_login', 'subject' : user_data['Subject.UPVSIdentityID'][0], 'authorized_user' : user_data['Actor.UPVSIdentityID'][0], 'description' : 'User login to CKAN from IP {0}'.format(environ.get('REMOTE_ADDR', '')), 'object_reference' : 'UserID://' + user_data['Subject.UPVSIdentityID'][0], 'debug_level' : 1, 'error_code' : 1}) else: delete_session_items()
'dataset': dataset.title, 'link': url, 'comment_subject': helpers.markdown_extract(comment.subject).strip(), 'comment': helpers.markdown_extract(comment.comment).strip() } message = email_template.message.format(**message_vars) log.debug(subject) log.debug(message) # Locale fix current_locale = get_lang() locale = _get_safe_locale() if locale == 'en': _reset_lang() else: set_lang(locale) # Finally mail the user and reset locale try: log.debug("LOCALE: " + str(locale)) log.debug(subject) log.debug(message) mail_recipient(recipient_name, recipient_email, subject, message) except MailerException, e: log.error(e) finally: set_lang(current_locale)