summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-10-02 11:32:01 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-10-04 23:16:12 +0200
commitd44957e78f23c5c0010fce0bf84859f7fd9d41dd (patch)
tree7c7b18e01796a25b81c3975ed30e628f0dea4d3d
parentfd3b4c9747bc631a900a881bfdaadc65124cf0d1 (diff)
Make a widget to ask for an authorization code
-rw-r--r--po/POTFILES.in2
-rw-r--r--po/disfluid.pot28
-rw-r--r--po/fr.po48
-rw-r--r--src/scm/webid-oidc/client/gui/Makefile.am6
-rw-r--r--src/scm/webid-oidc/client/gui/authorization-prompt.scm94
-rw-r--r--src/ui/Makefile.am3
-rw-r--r--src/ui/authorization-prompt.glade75
7 files changed, 233 insertions, 23 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 00169b5..94d3140 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -42,6 +42,7 @@ src/scm/webid-oidc/client/gui/application.scm
src/scm/webid-oidc/client/gui/application-hooks.scm
src/scm/webid-oidc/client/gui/account-widget.scm
src/scm/webid-oidc/client/gui/accounts-widget.scm
+src/scm/webid-oidc/client/gui/authorization-prompt.scm
src/scm/webid-oidc/client/gui/client-widget.scm
src/scm/webid-oidc/client/gui/settings.scm
src/scm/webid-oidc/dpop-proof.scm
@@ -78,4 +79,5 @@ src/scm/webid-oidc/testing.scm
src/scm/webid-oidc/token-endpoint.scm
src/scm/webid-oidc/web-i18n.scm
src/ui/account-widget.glade
+src/ui/authorization-prompt.glade
src/ui/client-widget.glade \ No newline at end of file
diff --git a/po/disfluid.pot b/po/disfluid.pot
index b9857d7..16660be 100644
--- a/po/disfluid.pot
+++ b/po/disfluid.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: disfluid SNAPSHOT\n"
"Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n"
-"POT-Creation-Date: 2021-10-04 23:13+0200\n"
+"POT-Creation-Date: 2021-10-04 23:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -660,6 +660,16 @@ msgstr ""
msgid "Stub: please enter an URI or a host name...\n"
msgstr ""
+#: src/scm/webid-oidc/client/gui/authorization-prompt.scm:78
+#, scheme-format
+msgid "Your authorization is required: ~a"
+msgstr ""
+
+#: src/scm/webid-oidc/client/gui/authorization-prompt.scm:81
+#, scheme-format
+msgid "~a, and ~a"
+msgstr ""
+
#: src/scm/webid-oidc/client/gui/client-widget.scm:86
#, scheme-format
msgid "The client cannot be constructed: ~a\n"
@@ -2250,6 +2260,22 @@ msgstr ""
msgid "Use it"
msgstr ""
+#: src/ui/authorization-prompt.glade:13
+msgid "Your authorization is required because <reasons>:"
+msgstr ""
+
+#: src/ui/authorization-prompt.glade:24
+msgid "Authorize"
+msgstr ""
+
+#: src/ui/authorization-prompt.glade:41
+msgid "Please paste your authorization code below:"
+msgstr ""
+
+#: src/ui/authorization-prompt.glade:63
+msgid "OK"
+msgstr ""
+
#: src/ui/client-widget.glade:19
msgid "Client ID:"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 15e8834..0fddd77 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: webid-oidc 0.0.0\n"
"Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n"
-"POT-Creation-Date: 2021-10-04 23:13+0200\n"
+"POT-Creation-Date: 2021-10-04 23:15+0200\n"
"PO-Revision-Date: 2021-10-04 23:06+0200\n"
"Last-Translator: Vivien Kraus <vivien@planete-kraus.eu>\n"
"Language-Team: French <vivien@planete-kraus.eu>\n"
@@ -572,12 +572,12 @@ msgstr "Cette page n’existe pas sur le serveur."
#: src/scm/webid-oidc/client/accounts.scm:118
#, scheme-format
msgid "an authorization code is required: ~s, it can be obtained at ~s"
-msgstr "un code d’autorisation est requis : ~s, vous pouvez l’obtenir à ~s"
+msgstr "un code d’autorisation est requis : ~s, il peut être obtenu à ~s"
#: src/scm/webid-oidc/client/accounts.scm:121
#, scheme-format
msgid "an authorization code is required, it can be obtained at ~s"
-msgstr "un code d’autorisation est requis, vous pouvez en obtenir un à ~s"
+msgstr "un code d’autorisation est requis, il peut être obtenu à ~s"
#: src/scm/webid-oidc/client/accounts.scm:212
#, scheme-format
@@ -714,6 +714,16 @@ msgstr "Bouchon : ajout d’un compte avec le fournisseur d’identité ~s…\n
msgid "Stub: please enter an URI or a host name...\n"
msgstr "Bouchon : veuillez entrer une URI ou un nom d’hôte…\n"
+#: src/scm/webid-oidc/client/gui/authorization-prompt.scm:78
+#, scheme-format
+msgid "Your authorization is required: ~a"
+msgstr "Votre autorisation est requise : ~a"
+
+#: src/scm/webid-oidc/client/gui/authorization-prompt.scm:81
+#, scheme-format
+msgid "~a, and ~a"
+msgstr "~a et ~a"
+
#: src/scm/webid-oidc/client/gui/client-widget.scm:86
#, scheme-format
msgid "The client cannot be constructed: ~a\n"
@@ -2637,6 +2647,22 @@ msgstr "Rejeter"
msgid "Use it"
msgstr "L’utiliser"
+#: src/ui/authorization-prompt.glade:13
+msgid "Your authorization is required because <reasons>:"
+msgstr "Votre autorisation est requise parce que <raisons> :"
+
+#: src/ui/authorization-prompt.glade:24
+msgid "Authorize"
+msgstr "Autoriser"
+
+#: src/ui/authorization-prompt.glade:41
+msgid "Please paste your authorization code below:"
+msgstr "Veuillez coller votre code d’autorisation :"
+
+#: src/ui/authorization-prompt.glade:63
+msgid "OK"
+msgstr "OK"
+
#: src/ui/client-widget.glade:19
msgid "Client ID:"
msgstr "Identifiant client :"
@@ -2661,18 +2687,6 @@ msgstr "Annuler"
msgid "Update"
msgstr "Mettre à jour"
-#~ msgid "Your authorization is required because <reasons>:"
-#~ msgstr "Votre autorisation est requise parce que <raisons> :"
-
-#~ msgid "Authorize"
-#~ msgstr "Autoriser"
-
-#~ msgid "Please paste your authorization code below:"
-#~ msgstr "Veuillez coller votre code d’autorisation :"
-
-#~ msgid "OK"
-#~ msgstr "OK"
-
#, scheme-format
#~ msgid "To log in on ~a, please visit: ~a\n"
#~ msgstr "Pour vous connecte avec ~a, veuillez visiter : ~a\n"
@@ -3464,10 +3478,6 @@ msgstr "Mettre à jour"
#~ msgstr "c’est tout"
#, scheme-format
-#~ msgid "~a and ~a"
-#~ msgstr "~a et ~a"
-
-#, scheme-format
#~ msgid "~a, ~a"
#~ msgstr "~a, ~a"
diff --git a/src/scm/webid-oidc/client/gui/Makefile.am b/src/scm/webid-oidc/client/gui/Makefile.am
index d72f45c..b6a498d 100644
--- a/src/scm/webid-oidc/client/gui/Makefile.am
+++ b/src/scm/webid-oidc/client/gui/Makefile.am
@@ -20,7 +20,8 @@ dist_guiclientwebidoidcmod_DATA += \
%reldir%/account-widget.scm \
%reldir%/accounts-widget.scm \
%reldir%/application-hooks.scm \
- %reldir%/application.scm
+ %reldir%/application.scm \
+ %reldir%/authorization-prompt.scm
guiclientwebidoidcgo_DATA += \
%reldir%/settings.go \
@@ -28,4 +29,5 @@ guiclientwebidoidcgo_DATA += \
%reldir%/account-widget.go \
%reldir%/accounts-widget.go \
%reldir%/application-hooks.go \
- %reldir%/application.go
+ %reldir%/application.go \
+ %reldir%/authorization-prompt.go
diff --git a/src/scm/webid-oidc/client/gui/authorization-prompt.scm b/src/scm/webid-oidc/client/gui/authorization-prompt.scm
new file mode 100644
index 0000000..8e9ab81
--- /dev/null
+++ b/src/scm/webid-oidc/client/gui/authorization-prompt.scm
@@ -0,0 +1,94 @@
+;; disfluid, implementation of the Solid specification
+;; Copyright (C) 2021 Vivien Kraus
+
+;; 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 <https://www.gnu.org/licenses/>.
+
+(define-module (webid-oidc client gui authorization-prompt)
+ #:use-module (gi)
+ #:use-module (gi types)
+ #:use-module (gi util)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 exceptions)
+ #:use-module (ice-9 i18n)
+ #:use-module (ice-9 receive)
+ #:use-module (ice-9 optargs)
+ #:use-module (ice-9 pretty-print)
+ #:use-module (srfi srfi-9)
+ #:use-module (srfi srfi-19)
+ #:use-module (srfi srfi-26)
+ #:use-module (webid-oidc errors)
+ #:use-module ((webid-oidc stubs) #:prefix stubs:)
+ #:use-module (webid-oidc web-i18n)
+ #:use-module ((webid-oidc config) #:prefix config:)
+ #:use-module (webid-oidc client client)
+ #:use-module (webid-oidc client accounts)
+ #:use-module (webid-oidc jwk)
+ #:use-module (webid-oidc oidc-id-token)
+ #:use-module (web uri)
+ #:use-module (web response)
+ #:use-module (rnrs bytevectors)
+ #:use-module (oop goops)
+ #:declarative? #t
+ #:duplicates (merge-generics)
+ #:export
+ (
+ make-authorization-prompt
+ ))
+
+(push-duplicate-handler! 'merge-generics)
+
+;; This avoids a crash when compiling the module
+(use-typelibs ("GdkPixbuf" "2.0")
+ ("Gtk" "3.0"))
+
+(define (make-authorization-prompt uri)
+ ;; Return 3 values:
+ ;; - the builder
+ ;; - the whole widget
+ ;; - a 2-value function (reason, continuation) to add a handler
+ (let ((builder
+ (builder:new-from-file
+ (string-append config:uidir "/authorization-prompt.glade"))))
+ (let ((whole-widget
+ (builder:get-object builder "authorization_prompt"))
+ (reason-label
+ (builder:get-object builder "reason"))
+ (link-button
+ (builder:get-object builder "authorization_link"))
+ (entry
+ (builder:get-object builder "authorization_code_entry"))
+ (ok
+ (builder:get-object builder "ok_button"))
+ (reasons '())
+ (handlers '()))
+ (let ((handle (lambda (reason continuation)
+ (label:set-text reason-label
+ ((@ (ice-9 format) format) #f
+ (G_ "Your authorization is required: ~a")
+ (if (null? reasons)
+ reason
+ (format #f (G_ "~a, and ~a")
+ (string-join (reverse reasons) ", ")
+ reason))))
+ (set! reasons `(,reason ,@reasons))
+ (set! handlers `(,continuation ,@handlers)))))
+ (link-button:set-uri link-button (uri->string uri))
+ ((@ (gi) connect) entry activate
+ (lambda _
+ (button:clicked ok)))
+ ((@ (gi) connect) ok clicked
+ (lambda _
+ (let ((code (entry:get-text entry)))
+ ((@ (srfi srfi-1) for-each) (cute <> code) (reverse handlers)))))
+ (values builder whole-widget handle)))))
diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am
index 67f1143..706725c 100644
--- a/src/ui/Makefile.am
+++ b/src/ui/Makefile.am
@@ -18,4 +18,5 @@ uipkgdatadir = $(pkgdatadir)/ui
dist_uipkgdata_DATA = \
%reldir%/client-widget.glade \
%reldir%/account-widget.glade \
- %reldir%/accounts-widget.glade
+ %reldir%/accounts-widget.glade \
+ %reldir%/authorization-prompt.glade
diff --git a/src/ui/authorization-prompt.glade b/src/ui/authorization-prompt.glade
new file mode 100644
index 0000000..ec2fd7c
--- /dev/null
+++ b/src/ui/authorization-prompt.glade
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.36.0 -->
+<interface>
+ <requires lib="gtk+" version="3.22"/>
+ <object class="GtkBox" id="authorization_prompt">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="reason">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Your authorization is required because &lt;reasons&gt;:</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLinkButton" id="authorization_link">
+ <property name="label" translatable="yes">Authorize</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
+ <property name="uri">http://glade.gnome.org</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Please paste your authorization code below:</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="authorization_code_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="ok_button">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+</interface>