From b31548a8beff1b76fcbcfc1750a1bd959c14d117 Mon Sep 17 00:00:00 2001
From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch>
Date: Fri, 24 Jun 2022 23:41:44 +0200
Subject: [PATCH] add support for basic auth

---
 public_html/javascript/functions.js       | 42 +++++++++++++++--------
 public_html/javascript/inc_config.js.dist |  5 +++
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/public_html/javascript/functions.js b/public_html/javascript/functions.js
index a2a6068..f71324f 100644
--- a/public_html/javascript/functions.js
+++ b/public_html/javascript/functions.js
@@ -110,6 +110,7 @@ function _getTaglist(sData){
     var sTags='';
     let aData=JSON.parse(sData);
 
+    // sReturn+='<code>'+sData+'</code><br>';
     sReturn+='<input id="'+ID_TAGINPUT+'" type="text" size="20" value="'+AM_TAGS+'"'
             +' onkeypress="getAppstatus()"'
             +' onkeydown="getAppstatus()"'
@@ -132,11 +133,16 @@ function _getTaglist(sData){
  * called from getAppstatus
  */
  async function getTags(){
-    let out = '<h2><span>🏷️</span> Tags</h2>';
     AM_TAGURL=_getUrlForTags();
 
+    let out = '<h2><span>🏷️</span> Tags</h2>';
+
     try{
-        let response = await fetch(AM_TAGURL);
+        let response = await fetch(AM_TAGURL, { "headers": 
+            AM_AUTH 
+        } );
+
+        // let response = await fetch(AM_TAGURL);
         if (response.ok) {
             out+=_getTaglist(await response.text());
         } else {
@@ -146,8 +152,8 @@ function _getTaglist(sData){
                 +'</div>';
         } 
     } catch {
-        out+='<div class="app result3">'
-        +'ERROR: no response from '
+        out+='<div class="app result1">'
+        +'UNKNOWN: no response from '
         +AM_TAGURL
         +'</div>';
     }
@@ -168,7 +174,7 @@ function _getTaglist(sData){
 function _getAllAppsStatus(sData){
     var sReturn="";
     var oDate=new Date;
-
+    // sReturn+='<code>'+sData+'</code><br>';
     sReturn+=''
             +'<h3>Tags: ' + tags + '</h3>'
             + '<p>' 
@@ -241,22 +247,23 @@ function _getSingleAppStatus(aData){
  * fetch appmonitor api - status of apps
  */
 async function getAppstatus(){
-    if(!AM_TAGURL){
-        getTags();
-    }
+
 
     var o=document.getElementById(ID_TAGINPUT);
     tags=o ? o.value : AM_TAGS;
 
     let out = '<h2><span>📦</span> Applications</h2>';
-    // for (var i=0; i<AM_TAGS.length; i++){
-
-        // let apiurl=_getUrlWithTags(AM_TAGS[i])
     let apiurl=_getUrlWithTags(tags)
+    // let myfunction="_getAllAppsStatus";
     try{
-        let response = await fetch(apiurl);
+        let response = await fetch(apiurl, { "headers": 
+            AM_AUTH 
+        } );
         if (response.ok) {
+
             out+=_getAllAppsStatus(await response.text());
+            // out+=eval(myfunction+'(await '+response.text()+')');
+            
         } else {
             out+='<div class="app result1">'
                 +'ERROR '+response.status+': '+response.statusText + ' - '
@@ -265,8 +272,8 @@ async function getAppstatus(){
         } 
     }
     catch {
-        out+='<div class="app result3">'
-        +'ERROR: no response from '
+        out+='<div class="app result1">'
+        +'UNKNOWN: no response from '
         +apiurl
         +'</div>';
     }
@@ -281,6 +288,13 @@ async function getAppstatus(){
 // MAIN
 // ----------------------------------------------------------------------
 
+// for auth header with basic auth
+let AM_AUTH=(AM_USER)
+    ? { "Authorization": "Basic " + btoa(AM_USER + ":" + AM_PASSWORD) }
+    : {}
+;
+
+getTags();
 AM_TIMER=window.setTimeout("getAppstatus()", 500);
 
 
diff --git a/public_html/javascript/inc_config.js.dist b/public_html/javascript/inc_config.js.dist
index 1b65e7d..4fe9189 100644
--- a/public_html/javascript/inc_config.js.dist
+++ b/public_html/javascript/inc_config.js.dist
@@ -1,3 +1,8 @@
 const AM_SERVER_URL='https://appmonitor.example.com/api';
 const AM_TAGS='live,myapp';
+
+// optional: BASIC AUTH
+// const AM_USER='api';
+// const AM_PASSWORD='password-of-api-user';
+
 const REFRESHTIME=30; // in sec
-- 
GitLab