choosit: remove obsolete and unused newsletter connector (#20620)
This commit is contained in:
parent
5bcfe8b690
commit
ba53d3a9a5
|
@ -1,30 +0,0 @@
|
|||
# passerelle - uniform access to multiple data sources and services
|
||||
# Copyright (C) 2016 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import django.apps
|
||||
|
||||
class AppConfig(django.apps.AppConfig):
|
||||
name = 'passerelle.apps.choosit'
|
||||
label = 'choosit'
|
||||
|
||||
def get_after_urls(self):
|
||||
return None
|
||||
|
||||
def get_connector_model(self):
|
||||
from . import models
|
||||
return models.ChoositSMSGateway
|
||||
|
||||
default_app_config = 'passerelle.apps.choosit.AppConfig'
|
|
@ -1,19 +0,0 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import ChoositSMSGateway, ChoositRegisterGateway, ChoositRegisterNewsletter
|
||||
|
||||
class ChoositSMSGatewayAdmin(admin.ModelAdmin):
|
||||
prepopulated_fields = {'slug': ('title',)}
|
||||
list_display = ['title', 'slug', 'description', 'key',
|
||||
'default_country_code']
|
||||
|
||||
admin.site.register(ChoositSMSGateway, ChoositSMSGatewayAdmin)
|
||||
|
||||
|
||||
|
||||
class ChoositRegisterGatewayAdmin(admin.ModelAdmin):
|
||||
prepopulated_fields = {'slug': ('title',)}
|
||||
|
||||
admin.site.register(ChoositRegisterGateway, ChoositRegisterGatewayAdmin)
|
||||
admin.site.register(ChoositRegisterNewsletter)
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
import requests
|
||||
import json
|
||||
import hashlib
|
||||
|
||||
class ChoositRegisterWS(object):
|
||||
def __init__(self, url, key):
|
||||
self.url = url
|
||||
self.key = key
|
||||
|
||||
def categories(self):
|
||||
return requests.post(self.url, data={'action': 'read'}).json()
|
||||
|
||||
def create(self, newsletter, email):
|
||||
return requests.post(self.url, data={'action': 'create', 'email': email,
|
||||
'newsletter': newsletter, 'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}).json()
|
||||
|
||||
def delete(self, newsletter, email):
|
||||
return requests.post(self.url, data={'action': 'delete', 'email': email,
|
||||
'newsletter': newsletter, 'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}).json()
|
||||
|
||||
def update(self, subscriptions, email):
|
||||
'''Returns { 'email': 'bdauvergne@entrouvert.com',
|
||||
'hash': 'ab60e5e1b226561092c082ca73a2ad9ee4527c7b',
|
||||
'status': 'ok'}
|
||||
or
|
||||
|
||||
{ 'email': 'bdauvergne@entrouvert.com',
|
||||
'hash': 'ab60e5dgd34543543',
|
||||
'status': 'nok',
|
||||
'error': 'error message'}
|
||||
'''
|
||||
if isinstance(subscriptions, basestring):
|
||||
subscriptions = subscriptions.split(',')
|
||||
params = {
|
||||
'action': 'update',
|
||||
'email': email,
|
||||
'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}
|
||||
for i, subscription in enumerate(subscriptions):
|
||||
params['subscriptions[%d]'% i] = subscription
|
||||
res = requests.post(self.url, data=params)
|
||||
return res.json()
|
||||
|
||||
def subscriptions(self, email):
|
||||
'''Returns { 'email': 'johndoe@example.com',
|
||||
'hash': 'ef787...',
|
||||
'newsletters': { '1': 'newsletter 1', ... },
|
||||
'subscriptions': [ '1' ] }
|
||||
'''
|
||||
return requests.post(self.url, data={'action': 'read', 'email': email,
|
||||
'hash': hashlib.sha1(self.key+email).hexdigest()}).json()
|
||||
|
||||
def newsletters(self, categories):
|
||||
params = {'action': 'read_newsletters'}
|
||||
for i, categorie in enumerate(categories):
|
||||
params['categories[%d]' % i] = categorie
|
||||
return requests.post(self.url, data=params).json()
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
# ne fonctionne que depuis lantana
|
||||
# examples:
|
||||
# python choosit.py 'https://emailingeco.montpellier-agglo.com/ws/index.php' mykey subscriptions 'bdauvergne@entrouvert.com'
|
||||
# python choosit.py 'https://emailingeco.montpellier-agglo.com/ws/index.php' mykey update '315,316' 'bdauvergne@entrouvert.com'
|
||||
|
||||
ws = ChoositRegisterWS(sys.argv[1], sys.argv[2])
|
||||
func = getattr(ws, sys.argv[3])
|
||||
import pprint
|
||||
pprint.pprint(func(*sys.argv[4:]))
|
|
@ -1,14 +0,0 @@
|
|||
from django.utils.text import slugify
|
||||
from django import forms
|
||||
|
||||
from .models import ChoositRegisterGateway
|
||||
|
||||
class ChoositRegisterGatewayForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = ChoositRegisterGateway
|
||||
exclude = ('slug', 'users')
|
||||
|
||||
def save(self, commit=True):
|
||||
if not self.instance.slug:
|
||||
self.instance.slug = slugify(self.instance.title)
|
||||
return super(ChoositRegisterGatewayForm, self).save(commit=commit)
|
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.12 on 2018-08-14 15:48
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('choosit', '0006_auto_20170920_0951'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='choositregistergateway',
|
||||
name='newsletters',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='choositregistergateway',
|
||||
name='users',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='ChoositRegisterGateway',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='ChoositRegisterNewsletter',
|
||||
),
|
||||
]
|
|
@ -4,14 +4,11 @@ import requests
|
|||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.db import models
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from passerelle.utils.jsonresponse import APIError
|
||||
from passerelle.base.models import BaseResource
|
||||
from passerelle.sms import SMSGatewayMixin
|
||||
|
||||
from .choosit import ChoositRegisterWS
|
||||
|
||||
|
||||
class ChoositSMSGateway(BaseResource, SMSGatewayMixin):
|
||||
key = models.CharField(verbose_name=_('Key'), max_length=64)
|
||||
|
@ -113,86 +110,3 @@ class ChoositSMSGateway(BaseResource, SMSGatewayMixin):
|
|||
raise APIError('Choosit error: some destinations failed',
|
||||
data=zip(destinations, results))
|
||||
return zip(destinations, results)
|
||||
|
||||
|
||||
class ChoositRegisterNewsletter(models.Model):
|
||||
name = models.CharField(max_length=16)
|
||||
description = models.CharField(max_length=128, blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Choosit Registration'
|
||||
db_table = 'newsletter_choosit'
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s: %s' % (self.name, self.description or u'<unnamed>')
|
||||
|
||||
|
||||
class ChoositRegisterGateway(BaseResource):
|
||||
category = _('Newsletter registration')
|
||||
|
||||
url = models.CharField(max_length=200)
|
||||
key = models.CharField(max_length=64)
|
||||
newsletters = models.ManyToManyField(ChoositRegisterNewsletter, blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Choosit Registration'
|
||||
db_table = 'registration_choosit'
|
||||
|
||||
@classmethod
|
||||
def get_verbose_name(cls):
|
||||
return cls._meta.verbose_name
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('choosit-register-view', kwargs={'slug': self.slug})
|
||||
|
||||
@classmethod
|
||||
def get_add_url(cls):
|
||||
return reverse('choosit-register-add')
|
||||
|
||||
def get_edit_url(self):
|
||||
return reverse('choosit-register-edit', kwargs={'slug': self.slug})
|
||||
|
||||
def get_delete_url(self):
|
||||
return reverse('choosit-register-delete', kwargs={'slug': self.slug})
|
||||
|
||||
def get_list(self, user):
|
||||
reg = ChoositRegisterWS(self.url, self.key)
|
||||
|
||||
ws = reg.subscriptions(email=user or '')
|
||||
if 'error' in ws:
|
||||
raise APIError(ws['error'])
|
||||
newsletters = ws['newsletter']
|
||||
subscriptions = ws['subscriptions']
|
||||
|
||||
filters = dict([(n.name, n.description) for n in self.newsletters.all()])
|
||||
if filters:
|
||||
for name in newsletters.copy():
|
||||
if name not in filters:
|
||||
del newsletters[name]
|
||||
elif filters[name]:
|
||||
newsletters[name] = filters[name]
|
||||
|
||||
ret = []
|
||||
for id, name in newsletters.items():
|
||||
newsletter = {
|
||||
'name': id,
|
||||
'description': name,
|
||||
'transports': {'available': ['mail']}
|
||||
}
|
||||
if user:
|
||||
if id in subscriptions:
|
||||
newsletter['transports']['defined'] = ['mail']
|
||||
else:
|
||||
newsletter['transports']['defined'] = []
|
||||
ret.append(newsletter)
|
||||
|
||||
return ret
|
||||
|
||||
def post(self, user, data):
|
||||
subscriptions = [row['name'] for row in data if row['transports']]
|
||||
reg = ChoositRegisterWS(self.url, self.key)
|
||||
ws = reg.update(subscriptions, user)
|
||||
return {"message": ws['status']}
|
||||
|
||||
def export_json(self):
|
||||
raise NotImplementedError
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "passerelle/manage/service_view.html" %}
|
||||
{% load i18n passerelle %}
|
||||
|
||||
{% block description %}
|
||||
<p>
|
||||
Service URL : {{ object.url }}
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block endpoints %}
|
||||
<ul>
|
||||
<li>{% trans 'Register:' %} <a href="{% url 'choosit-register' slug=object.slug %}"
|
||||
>{{ site_base_uri }}{% url 'choosit-register' slug=object.slug %}</a> (POST)</li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block security %}
|
||||
<p>
|
||||
{% trans 'Accessing the listings is open, but posting requests is limited to the following API users:' %}
|
||||
</p>
|
||||
{% access_rights_table resource=object permission='can_post_request' %}
|
||||
{% endblock %}
|
|
@ -1,14 +0,0 @@
|
|||
from django.conf.urls import url
|
||||
from views import *
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<slug>[\w,-]+)/$', ChoositDetailView.as_view(), name='choosit-view'),
|
||||
url(r'^register/(?P<slug>[\w,-]+)/$', ChoositRegisterDetailView.as_view(), name='choosit-register-view'),
|
||||
url(r'^register/(?P<slug>[\w,-]+)/register$', ChoositRegisterView.as_view(), name='choosit-register'),
|
||||
]
|
||||
|
||||
management_urlpatterns = [
|
||||
url(r'^register/add$', ChoositRegisterCreateView.as_view(), name='choosit-register-add'),
|
||||
url(r'^register/(?P<slug>[\w,-]+)/edit$', ChoositRegisterUpdateView.as_view(), name='choosit-register-edit'),
|
||||
url(r'^register/(?P<slug>[\w,-]+)/delete$', ChoositRegisterDeleteView.as_view(), name='choosit-register-delete'),
|
||||
]
|
|
@ -1,67 +0,0 @@
|
|||
import json
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.views.generic.edit import CreateView, UpdateView, DeleteView, View
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
from passerelle.base.views import ResourceView
|
||||
from passerelle import utils
|
||||
|
||||
from .models import ChoositSMSGateway, ChoositRegisterGateway
|
||||
from .forms import ChoositRegisterGatewayForm
|
||||
|
||||
|
||||
class ChoositDetailView(ResourceView):
|
||||
model = ChoositSMSGateway
|
||||
template_name = 'passerelle/manage/messages_service_view.html'
|
||||
|
||||
|
||||
class ChoositRegisterDetailView(ResourceView):
|
||||
model = ChoositRegisterGateway
|
||||
template_name = 'choosit/choosit_register_detail.html'
|
||||
|
||||
|
||||
class ChoositRegisterCreateView(CreateView):
|
||||
model = ChoositRegisterGateway
|
||||
template_name = 'passerelle/manage/service_form.html'
|
||||
form_class = ChoositRegisterGatewayForm
|
||||
|
||||
|
||||
class ChoositRegisterUpdateView(UpdateView):
|
||||
model = ChoositRegisterGateway
|
||||
template_name = 'passerelle/manage/service_form.html'
|
||||
form_class = ChoositRegisterGatewayForm
|
||||
|
||||
|
||||
class ChoositRegisterDeleteView(DeleteView):
|
||||
model = ChoositRegisterGateway
|
||||
template_name = 'passerelle/manage/service_confirm_delete.html'
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('manage-home')
|
||||
|
||||
|
||||
class ChoositRegisterView(View, SingleObjectMixin):
|
||||
model = ChoositRegisterGateway
|
||||
|
||||
@method_decorator(csrf_exempt)
|
||||
@utils.protected_api('can_post_request')
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
return super(ChoositRegisterView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
@utils.to_json()
|
||||
@method_decorator(csrf_exempt)
|
||||
def get(self, request, *args, **kwargs):
|
||||
user = request.GET.get('user')
|
||||
assert user, 'missing user parameter'
|
||||
return {'data': self.get_object().get_list(user)}
|
||||
|
||||
@utils.to_json()
|
||||
def post(self, request, *args, **kwargs):
|
||||
user = request.GET.get('user')
|
||||
assert user, 'missing user parameter'
|
||||
data = json.loads(request.body)
|
||||
assert isinstance(data, list), 'body must be a JSON list'
|
||||
return {'data': self.get_object().post(user, data)}
|
|
@ -15,7 +15,6 @@ from .urls_utils import decorated_includes, required, app_enabled, manager_requi
|
|||
from .base.urls import access_urlpatterns
|
||||
from .plugins import register_apps_urls
|
||||
|
||||
from passerelle.apps.choosit import urls as choosit_urls
|
||||
from passerelle.apps.pastell import urls as pastell_urls
|
||||
|
||||
admin.autodiscover()
|
||||
|
@ -36,14 +35,6 @@ urlpatterns = [
|
|||
decorated_includes(manager_required, include(access_urlpatterns))),
|
||||
]
|
||||
|
||||
urlpatterns += required(
|
||||
app_enabled('choosit'), [
|
||||
url(r'^choosit/', include(choosit_urls.urlpatterns)),
|
||||
url(r'^manage/choosit/',
|
||||
decorated_includes(manager_required, include(choosit_urls.management_urlpatterns))),
|
||||
]
|
||||
)
|
||||
|
||||
urlpatterns += required(
|
||||
app_enabled('pastell'), [
|
||||
url(r'^manage/pastell/',
|
||||
|
|
Loading…
Reference in New Issue