LP#1861013: fix Overdrive API integration when password required user/jeffdavis/lp1982217-lp1861013-omnibus-wip
authorJeff Davis <jeff.davis@bc.libraries.coop>
Tue, 23 Aug 2022 21:01:29 +0000 (14:01 -0700)
committerJeff Davis <jdavis@sitka.bclibraries.ca>
Mon, 24 Oct 2022 19:00:47 +0000 (12:00 -0700)
This fix was partially written by Ben Holt for BC Libraries Cooperative.

Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop>
Open-ILS/src/templates-bootstrap/opac/parts/ebook_api/login_js.tt2
Open-ILS/src/templates-bootstrap/opac/parts/js.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/form.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2

index 7bb12bd..533261f 100755 (executable)
@@ -1,4 +1,4 @@
-<script>
+<script type="text/javascript">
 var vendors_requiring_password = [];
 
 [% IF !loc_value; PROCESS get_library; END; %]
@@ -8,34 +8,49 @@ var vendors_requiring_password = [];
 vendors_requiring_password.push('overdrive');
 [% END %]
 
+var pw_cache_count = 0;
+
 dojo.addOnLoad(function() {
-    var handle = dojo.connect(dojo.byId('#login-form-box'), 'onclick', function(evt) {
+    var handle = dojo.connect(dojo.byId('login-form'), 'onsubmit', function(evt) {
+        // Prevent the form submission from happening until after we have
+        // handled any ebook vendor interactions
+        evt.preventDefault();
+
         // disconnect this event since it's one-time-only
         // (when we switch to jQuery, we can use .one() here)
         dojo.disconnect(handle);
 
         // we cache the username (and password) for now, but will
         // replace that with the patron's active barcode later
-        vendors_requiring_password.forEach(function(v) {
-            if (vendor_list.includes(v)) {
-                checkSession(v, function(v,ses) {
-                    var username = dojo.byId('#username_field').value;
-                    var password = dojo.byId('#password_field').value;
-                    new OpenSRF.ClientSession('open-ils.ebook_api').request({
-                        method: 'open-ils.ebook_api.patron.cache_password',
-                        params: [ ses, password ],
-                        async: true,
-                        oncomplete: function(r) {
-                            var resp = r.recv();
-                            if (resp) {
-                                console.log('patron password has been cached');
-                                return;
+        if (vendors_requiring_password.length > 0) {
+            vendors_requiring_password.forEach(function(v) {
+                pw_cache_count++;
+                if (vendor_list.includes(v)) {
+                    checkSession(v, function(v,ses) {
+                        var username = dojo.byId('username_field').value;
+                        var password = dojo.byId('password_field').value;
+                        new OpenSRF.ClientSession('open-ils.ebook_api').request({
+                            method: 'open-ils.ebook_api.patron.cache_password',
+                            params: [ ses, password ],
+                            async: true,
+                            oncomplete: function(r) {
+                                var resp = r.recv();
+                                if (resp) {
+                                    // Success, now submit the form
+                                    console.log('patron password has been cached');
+                                    if (pw_cache_count >= vendors_requiring_password.length) {
+                                        document.getElementById('login-form').submit();
+                                        return;
+                                    }
+                                }
                             }
-                        }
-                    }).send();
-                });
-            }
-        });
+                        }).send();
+                    });
+                }
+            });
+        } else {
+            document.getElementById('login-form').submit();
+        }
     });
 });
 </script>
index 87b7752..5b372bd 100755 (executable)
 
 [% IF ebook_api.enabled == 'true' %]
     [% INCLUDE "opac/parts/ebook_api/base_js.tt2" %]
-    [% INCLUDE "opac/parts/ebook_api/login_js.tt2" IF (ctx.page == 'login') %]
+    [% INCLUDE "opac/parts/ebook_api/login_js.tt2" %]
 [% END %]
 
 <!-- provide a JS friendly org unit hash -->
index fcd8d87..5884f53 100755 (executable)
@@ -3,7 +3,7 @@
 <div class='container'>
 <hr>
     <h3 class="text-center">[% l('Log in to Your Account') %]</h3>
-    <form method='post'>
+    <form method='post' id="login-form">
    <div class="row text-center">[%# INCLUDE "opac/parts/login/help.tt2" %]</div>
     [% IF ctx.login_failed_event %]
 <div id='login-failed-message'>
index 44c4544..91855da 100755 (executable)
@@ -1,7 +1,7 @@
 <div class="modal fade" id="loginModal" tabindex="-1" role="dialog" aria-hidden="true">
   <div class="modal-dialog modal-dialog-centered" role="document">
     <div class="modal-content">
-     <form method='post' action="/eg/opac/login?redirect_to=%2Feg%2Fopac%2Fmyopac%2Fmain">
+     <form method='post' id="login-form" action="/eg/opac/login?redirect_to=%2Feg%2Fopac%2Fmyopac%2Fmain">
       <div class="modal-header">
         <h1 class="modal-title" id="exampleModalLabel">Login To Evergreen</h1>
         <button type="button" class="close" data-dismiss="modal" aria-label="Close">