class Schleuder::KeywordHandlers::SubscriptionManangement
Public Instance Methods
list_subscriptions()
click to toggle source
# File lib/schleuder/keyword_handlers/subscription_management.rb, line 105 def list_subscriptions subs = if @arguments.blank? @list.subscriptions.all.to_a else @arguments.map do |argument| @list.subscriptions.where('email like ?', "%#{argument}%").to_a end.flatten end if subs.blank? return nil end out = [ I18n.t('keyword_handlers.subscription_management.list_of_subscriptions') ] out << subs.map do |subscription| # Fingerprints are at most 40 characters long, and lines shouldn't # exceed 80 characters if possible. s = subscription.email if subscription.fingerprint.present? s << "\t0x#{subscription.fingerprint}" end if ! subscription.delivery_enabled? s << "\tDelivery disabled!" end s end out.join("\n") end
set_fingerprint()
click to toggle source
# File lib/schleuder/keyword_handlers/subscription_management.rb, line 136 def set_fingerprint if @arguments.blank? return I18n.t( 'keyword_handlers.subscription_management.set_fingerprint_requires_arguments' ) end if @arguments.first.match(/@/) email = @arguments.shift.downcase if email != @mail.signer.email && ! @list.from_admin?(@mail) return I18n.t( 'keyword_handlers.subscription_management.set_fingerprint_only_self' ) end else email = @mail.signer.email end sub = @list.subscriptions.where(email: email).first if sub.blank? return I18n.t( 'keyword_handlers.subscription_management.is_not_subscribed', email: email ) end fingerprint = @arguments.join unless GPGME::Key.valid_fingerprint?(fingerprint) return I18n.t( 'keyword_handlers.subscription_management.set_fingerprint_requires_valid_fingerprint', fingerprint: fingerprint ) end sub.fingerprint = fingerprint if sub.save I18n.t( 'keyword_handlers.subscription_management.fingerprint_set', email: email, fingerprint: sub.fingerprint ) else I18n.t( 'keyword_handlers.subscription_management.setting_fingerprint_failed', email: email, fingerprint: sub.fingerprint, errors: sub.errors.to_a.join("\n") ) end end
subscribe()
click to toggle source
# File lib/schleuder/keyword_handlers/subscription_management.rb, line 10 def subscribe if @arguments.blank? return I18n.t( 'keyword_handlers.subscription_management.subscribe_requires_arguments' ) end email = @arguments.shift.to_s.downcase if @arguments.present? # Collect all arguments that look like fingerprint-material fingerprint = '' while @arguments.first.present? && @arguments.first.match(/^(0x)?[a-f0-9]+$/i) fingerprint << @arguments.shift.downcase end # If the collected values aren't a valid fingerprint, then the input # didn't conform with what this code expects, and then the other # values shouldn't be used. unless GPGME::Key.valid_fingerprint?(fingerprint) return I18n.t('keyword_handlers.subscription_management.subscribe_requires_arguments') end if @arguments.present? # Use possibly remaining args as flags. adminflag = @arguments.shift.to_s.downcase.presence unless ['true', 'false'].include?(adminflag) return I18n.t('keyword_handlers.subscription_management.subscribe_requires_arguments') end if @arguments.present? deliveryflag = @arguments.shift.to_s.downcase.presence unless ['true', 'false'].include?(deliveryflag) return I18n.t('keyword_handlers.subscription_management.subscribe_requires_arguments') end end end end sub, _ = @list.subscribe(email, fingerprint, adminflag, deliveryflag) if sub.persisted? I18n.t( 'keyword_handlers.subscription_management.subscribed', email: sub.email, fingerprint: sub.fingerprint, admin: sub.admin, delivery_enabled: sub.delivery_enabled ) else I18n.t( 'keyword_handlers.subscription_management.subscribing_failed', email: sub.email, errors: sub.errors.full_messages.join(".\n") ) end end
unset_fingerprint()
click to toggle source
# File lib/schleuder/keyword_handlers/subscription_management.rb, line 187 def unset_fingerprint if @arguments.blank? return I18n.t( 'keyword_handlers.subscription_management.unset_fingerprint_requires_arguments' ) end email = @arguments.shift.to_s.downcase if email != @mail.signer.email && ! @list.from_admin?(mail) return I18n.t( 'keyword_handlers.subscription_management.unset_fingerprint_only_self' ) end if email == @mail.signer.email && @list.from_admin?(@mail) && @arguments.last.to_s.downcase != 'force' return I18n.t( 'keyword_handlers.subscription_management.unset_fingerprint_requires_arguments' ) end sub = @list.subscriptions.where(email: email).first if sub.blank? return I18n.t( 'keyword_handlers.subscription_management.is_not_subscribed', email: email ) end sub.fingerprint = '' if sub.save I18n.t( 'keyword_handlers.subscription_management.fingerprint_unset', email: email ) else I18n.t( 'keyword_handlers.subscription_management.unsetting_fingerprint_failed', email: email, errors: sub.errors.to_a.join("\n") ) end end
unsubscribe()
click to toggle source
# File lib/schleuder/keyword_handlers/subscription_management.rb, line 65 def unsubscribe # If no address was given we unsubscribe the sender. email = @arguments.first.to_s.downcase.presence || @mail.signer.email # Refuse to unsubscribe the last admin. if @list.admins.size == 1 && @list.admins.first.email == email return I18n.t( 'keyword_handlers.subscription_management.cannot_unsubscribe_last_admin', email: email ) end # TODO: May signers have multiple UIDs? We don't match those currently. if ! @list.from_admin?(@mail) && email != @mail.signer.email # Only admins may unsubscribe others. return I18n.t( 'keyword_handlers.subscription_management.forbidden', email: email ) end sub = @list.subscriptions.where(email: email).first if sub.blank? return I18n.t( 'keyword_handlers.subscription_management.is_not_subscribed', email: email ) end if res = sub.delete I18n.t( 'keyword_handlers.subscription_management.unsubscribed', email: email ) else I18n.t( 'keyword_handlers.subscription_management.unsubscribing_failed', email: email, error: res.errors.to_a ) end end