Fix views & update admin
This commit is contained in:
parent
52d8c14abe
commit
f21b626802
5 changed files with 70 additions and 19 deletions
|
|
@ -11,8 +11,18 @@ class UserAdminForm(UserChangeForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
widgets = {
|
widgets = {
|
||||||
"email": forms.EmailInput(attrs={"size": "50"}),
|
"email": forms.EmailInput(attrs={"size": "50"}),
|
||||||
"reddit_access_token": forms.TextInput(attrs={"size": "90"}),
|
"reddit_access_token": forms.PasswordInput(
|
||||||
"reddit_refresh_token": forms.TextInput(attrs={"size": "90"}),
|
attrs={"size": "90"}, render_value=True
|
||||||
|
),
|
||||||
|
"reddit_refresh_token": forms.PasswordInput(
|
||||||
|
attrs={"size": "90"}, render_value=True
|
||||||
|
),
|
||||||
|
"twitter_oauth_token": forms.PasswordInput(
|
||||||
|
attrs={"size": "90"}, render_value=True
|
||||||
|
),
|
||||||
|
"twitter_oauth_token_secret": forms.PasswordInput(
|
||||||
|
attrs={"size": "90"}, render_value=True
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -34,6 +44,10 @@ class UserAdmin(DjangoUserAdmin):
|
||||||
_("Reddit settings"),
|
_("Reddit settings"),
|
||||||
{"fields": ("reddit_access_token", "reddit_refresh_token")},
|
{"fields": ("reddit_access_token", "reddit_refresh_token")},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
_("Twitter settings"),
|
||||||
|
{"fields": ("twitter_oauth_token", "twitter_oauth_token_secret")},
|
||||||
|
),
|
||||||
(
|
(
|
||||||
_("Permission settings"),
|
_("Permission settings"),
|
||||||
{"classes": ("collapse",), "fields": ("is_staff", "is_superuser")},
|
{"classes": ("collapse",), "fields": ("is_staff", "is_superuser")},
|
||||||
|
|
|
||||||
|
|
@ -44,13 +44,25 @@
|
||||||
<div class="integrations">
|
<div class="integrations">
|
||||||
<h3 class="integrations__title">Twitter</h3>
|
<h3 class="integrations__title">Twitter</h3>
|
||||||
<div class="integrations__controls">
|
<div class="integrations__controls">
|
||||||
<a class="link button button--twitter" href="#">
|
{% if twitter_request_url %}
|
||||||
{% trans "Authorize account" %}
|
<a class="link button button--twitter" href="{{ twitter_request_url }}">
|
||||||
</a>
|
{% trans "Authorize account" %}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<button class="button button--twitter button--disabled" disabled>
|
||||||
|
{% trans "Authorize account" %}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<a class="link button button--twitter" href="#">
|
{% if twitter_revoke_url %}
|
||||||
{% trans "Deauthorize account" %}
|
<a class="link button button--twitter" href="#">
|
||||||
</a>
|
{% trans "Deauthorize account" %}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<button class="button button--twitter button--disabled" disabled>
|
||||||
|
{% trans "Deauthorize account" %}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ from newsreader.accounts.views import (
|
||||||
RegistrationCompleteView,
|
RegistrationCompleteView,
|
||||||
RegistrationView,
|
RegistrationView,
|
||||||
SettingsView,
|
SettingsView,
|
||||||
|
TwitterAuthRedirectView,
|
||||||
|
TwitterTemplateView,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -84,6 +86,16 @@ urlpatterns = [
|
||||||
login_required(RedditRevokeRedirectView.as_view()),
|
login_required(RedditRevokeRedirectView.as_view()),
|
||||||
name="reddit-revoke",
|
name="reddit-revoke",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"settings/integrations/twitter/request/",
|
||||||
|
login_required(TwitterAuthRedirectView.as_view()),
|
||||||
|
name="twitter-request",
|
||||||
|
),
|
||||||
|
path(
|
||||||
|
"settings/integrations/twitter/callback/",
|
||||||
|
login_required(TwitterTemplateView.as_view()),
|
||||||
|
name="twitter-template",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"settings/integrations",
|
"settings/integrations",
|
||||||
login_required(IntegrationsView.as_view()),
|
login_required(IntegrationsView.as_view()),
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ from newsreader.accounts.views.integrations import (
|
||||||
RedditRevokeRedirectView,
|
RedditRevokeRedirectView,
|
||||||
RedditTemplateView,
|
RedditTemplateView,
|
||||||
RedditTokenRedirectView,
|
RedditTokenRedirectView,
|
||||||
|
TwitterAuthRedirectView,
|
||||||
|
TwitterTemplateView,
|
||||||
)
|
)
|
||||||
from newsreader.accounts.views.password import (
|
from newsreader.accounts.views.password import (
|
||||||
PasswordChangeView,
|
PasswordChangeView,
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ class IntegrationsView(TemplateView):
|
||||||
return {
|
return {
|
||||||
**super().get_context_data(**kwargs),
|
**super().get_context_data(**kwargs),
|
||||||
**self.get_reddit_context(**kwargs),
|
**self.get_reddit_context(**kwargs),
|
||||||
|
**self.get_twitter_context(**kwargs),
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_reddit_context(self, **kwargs):
|
def get_reddit_context(self, **kwargs):
|
||||||
|
|
@ -66,6 +67,19 @@ class IntegrationsView(TemplateView):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_twitter_context(self, **kwargs):
|
||||||
|
twitter_revoke_url = None
|
||||||
|
user = self.request.user
|
||||||
|
|
||||||
|
# TODO add revoke url
|
||||||
|
if user.twitter_oauth_token and user.twitter_oauth_token_secret:
|
||||||
|
twitter_revoke_url = "https://foo/bar"
|
||||||
|
|
||||||
|
return {
|
||||||
|
"twitter_request_url": reverse_lazy("accounts:twitter-request"),
|
||||||
|
"twitter_revoke_url": twitter_revoke_url,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class RedditTemplateView(TemplateView):
|
class RedditTemplateView(TemplateView):
|
||||||
template_name = "accounts/views/reddit.html"
|
template_name = "accounts/views/reddit.html"
|
||||||
|
|
@ -162,8 +176,6 @@ class RedditRevokeRedirectView(RedirectView):
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
# TODO hookup url to urlconf
|
|
||||||
# TODO hookup url to integrations button
|
|
||||||
class TwitterAuthRedirectView(RedirectView):
|
class TwitterAuthRedirectView(RedirectView):
|
||||||
url = reverse_lazy("accounts:integrations")
|
url = reverse_lazy("accounts:integrations")
|
||||||
|
|
||||||
|
|
@ -182,8 +194,7 @@ class TwitterAuthRedirectView(RedirectView):
|
||||||
messages.error(request, _("Unable to retrieve initial Twitter token"))
|
messages.error(request, _("Unable to retrieve initial Twitter token"))
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
params = parse_qs(response.content)
|
params = parse_qs(response.text)
|
||||||
|
|
||||||
request_oauth_token = params.get("oauth_token")[0]
|
request_oauth_token = params.get("oauth_token")[0]
|
||||||
request_oauth_secret = params.get("oauth_token_secret")[0]
|
request_oauth_secret = params.get("oauth_token_secret")[0]
|
||||||
|
|
||||||
|
|
@ -194,20 +205,20 @@ class TwitterAuthRedirectView(RedirectView):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
request_params = urlencode({"oauth_token": request_oauth_secret})
|
request_params = urlencode({"oauth_token": request_oauth_token})
|
||||||
return redirect(f"{TWITTER_AUTH_URL}/?{request_params}")
|
return redirect(f"{TWITTER_AUTH_URL}/?{request_params}")
|
||||||
|
|
||||||
|
|
||||||
# TODO hookup url
|
# TODO remove cached tokens
|
||||||
class TwitterTemplateView(TemplateView):
|
class TwitterTemplateView(TemplateView):
|
||||||
template_name = "accounts/views/twitter.html"
|
template_name = "accounts/views/twitter.html"
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
context = self.get_context_data(**kwargs)
|
context = self.get_context_data(**kwargs)
|
||||||
|
|
||||||
denied = request.GET.get("denied", True)
|
denied = request.GET.get("denied", False)
|
||||||
oauth_token = request.GET.get("oauth_token")
|
oauth_token = request.GET.get("oauth_token")
|
||||||
request.GET.get("oauth_verifier")
|
oauth_verifier = request.GET.get("oauth_verifier")
|
||||||
|
|
||||||
if denied:
|
if denied:
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
|
|
@ -231,7 +242,7 @@ class TwitterTemplateView(TemplateView):
|
||||||
|
|
||||||
cached_secret = cache.get(f"twitter-{request.user.email}-secret")
|
cached_secret = cache.get(f"twitter-{request.user.email}-secret")
|
||||||
|
|
||||||
if not cached_token or not cached_token_secret:
|
if not cached_token or not cached_secret:
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
{
|
{
|
||||||
**context,
|
**context,
|
||||||
|
|
@ -245,7 +256,7 @@ class TwitterTemplateView(TemplateView):
|
||||||
client_secret=settings.TWITTER_CONSUMER_SECRET,
|
client_secret=settings.TWITTER_CONSUMER_SECRET,
|
||||||
resource_owner_key=cached_token,
|
resource_owner_key=cached_token,
|
||||||
resource_owner_secret=cached_secret,
|
resource_owner_secret=cached_secret,
|
||||||
verifier=oauth_token_secret,
|
verifier=oauth_verifier,
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
@ -261,7 +272,7 @@ class TwitterTemplateView(TemplateView):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
params = parse_qs(response.content)
|
params = parse_qs(response.text)
|
||||||
oauth_token = params.get("oauth_token")[0]
|
oauth_token = params.get("oauth_token")[0]
|
||||||
oauth_secret = params.get("oauth_token_secret")[0]
|
oauth_secret = params.get("oauth_token_secret")[0]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue