From 65d13f46facb6a39e8fd82ab69f55811bd3311d2 Mon Sep 17 00:00:00 2001
From: Hans Kristian Hoel <hanskhoe@stud.ntnu.no>
Date: Sat, 2 Nov 2019 22:26:31 +0100
Subject: [PATCH] fixed invocation and some error

---
 assignment2/commit.go   | 30 +++++---------------
 assignment2/firebase.go |  2 +-
 assignment2/language.go | 28 ++++---------------
 assignment2/status.go   |  2 +-
 assignment2/structs.go  |  6 ++--
 assignment2/webhook.go  | 61 ++++++++++++++++++++---------------------
 6 files changed, 48 insertions(+), 81 deletions(-)

diff --git a/assignment2/commit.go b/assignment2/commit.go
index cd12f5e..c4ef55a 100644
--- a/assignment2/commit.go
+++ b/assignment2/commit.go
@@ -27,7 +27,7 @@ func HandlerCommits(w http.ResponseWriter, r *http.Request) {
 		C.Auth = true                        // sets auth to true
 	}
 
-	fmt.Println(URL3) // **************************************************
+	//fmt.Println(URL3) // **************************************************
 
 	resp, err := DoRequest(Client, w, URL3) //request the /prodjects link with 100 repositoris per page
 	if err != nil {
@@ -37,9 +37,9 @@ func HandlerCommits(w http.ResponseWriter, r *http.Request) {
 
 	PageTot, err := strconv.Atoi(resp.Header.Get("X-Total-Pages")) //Get the total of pages that have repositoris
 	if err != nil {                                                //check for error
-		log.Fatal(err)
+		http.Error(w, "Do not exist"+err.Error(), http.StatusBadRequest)
 	}
-	fmt.Println(PageTot)
+	//fmt.Println(PageTot)
 
 	for i := 1; i <= PageTot; i++ { // loop true all pages
 		URL4 := URL3 + "&page=" + strconv.Itoa(i) // adds page numer to link
@@ -56,11 +56,11 @@ func HandlerCommits(w http.ResponseWriter, r *http.Request) {
 			http.Error(w, err.Error(), http.StatusBadRequest)
 			return
 		}
-		fmt.Println("str Temp: ", len(TempID)) // *****************************************************************
+		//fmt.Println("str Temp: ", len(TempID)) // *****************************************************************
 
 		I = append(I, TempID...) // adds temp to I
 
-		fmt.Println("str i: ", len(I)) // **********************************************
+		//fmt.Println("str i: ", len(I)) // **********************************************
 
 		var TempRep Commits // creates temp for commits
 
@@ -78,7 +78,7 @@ func HandlerCommits(w http.ResponseWriter, r *http.Request) {
 
 		C.Repos = append(C.Repos, TempRep.Repos...) // adds temp to C.Repos, so that C.Repos gets a length
 
-		fmt.Println("str c: ", len(C.Repos)) // ********************************************************
+		//fmt.Println("str c: ", len(C.Repos)) // ********************************************************
 
 	}
 
@@ -123,22 +123,6 @@ func HandlerCommits(w http.ResponseWriter, r *http.Request) {
 
 	// Webhooks**********************
 
-	Payload := &WebhooksInvocation{}
-	Payload.Event = "Commit"
-	Payload.Time = time.Now()
-	Payload.Params = "Limit = " + limit + " and Auth = " + auth
-
-	var webhooks []WebhookRegistration
-
-	webhooks, err = FBRead()
-	if err != nil {
-		fmt.Println("Error: ", err)
-	}
-
-	for i := range webhooks {
-		if webhooks[i].Event == Payload.Event {
-			CallUrl(webhooks[i].URL, Payload.Event+","+Payload.Params)
-		}
-	}
+	CallUrl("commits", "Limit = "+limit+" and Auth = "+auth, time.Now())
 
 }
diff --git a/assignment2/firebase.go b/assignment2/firebase.go
index d0c0d54..e5dcf60 100644
--- a/assignment2/firebase.go
+++ b/assignment2/firebase.go
@@ -69,7 +69,7 @@ func FBRead() ([]WebhookRegistration, error) {
 		if err != nil {
 			log.Fatalf("Failed to iterate: %v", err)
 		}
-		fmt.Println(doc.Data())
+		//fmt.Println(doc.Data())
 		err = doc.DataTo(&webhook) // sets data in to webhook struct
 		if err != nil {
 			fmt.Println("Error when converting retrieved document to webhook struct: ", err)
diff --git a/assignment2/language.go b/assignment2/language.go
index 7f0c7ae..8de16d0 100644
--- a/assignment2/language.go
+++ b/assignment2/language.go
@@ -56,7 +56,7 @@ func HandlerLanguages(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, err.Error(), http.StatusBadRequest)
 		return
 	}
-	fmt.Println(PageTot) // ***************************************************************
+	//fmt.Println(PageTot) // ***************************************************************
 
 	for i := 1; i <= PageTot; i++ { // loops true total pages
 		URL := URL3 + "&page=" + strconv.Itoa(i) // sets url to one page
@@ -77,7 +77,7 @@ func HandlerLanguages(w http.ResponseWriter, r *http.Request) {
 
 		I = append(I, TempID...) // adds test to I
 
-		fmt.Println("len: ", len(I))
+		//fmt.Println("len: ", len(I))
 
 	}
 
@@ -111,8 +111,8 @@ func HandlerLanguages(w http.ResponseWriter, r *http.Request) {
 
 	var Lang []TestLang // making a temp struckt
 
-	CodeTypes := Counter(Code)       // make a map[string]int that have codelanguag counted
-	fmt.Println("test: ", CodeTypes) //*********************************************
+	CodeTypes := Counter(Code) // make a map[string]int that have codelanguag counted
+	//fmt.Println("test: ", CodeTypes) //*********************************************
 
 	for k, v := range CodeTypes { // loops over map
 		Lang = append(Lang, TestLang{k, v}) // sets map values in to struct
@@ -120,7 +120,7 @@ func HandlerLanguages(w http.ResponseWriter, r *http.Request) {
 
 	sort.Slice(Lang, func(i, j int) bool { return Lang[i].Count > Lang[j].Count }) //sort struct from highest to lovest int
 
-	fmt.Println(Lang) //****************************************************************
+	//fmt.Println(Lang) //****************************************************************
 
 	for i := range Lang { // loops over struct
 		L.Languages = append(L.Languages, Lang[i].Lang) // sets string from struct inn to L.Languages
@@ -140,22 +140,6 @@ func HandlerLanguages(w http.ResponseWriter, r *http.Request) {
 
 	// Webhooks**********************
 
-	Payload := &WebhooksInvocation{}
-	Payload.Event = "Language"
-	Payload.Time = time.Now()
-	Payload.Params = "Limit = " + limit + " and Auth = " + auth
-
-	var webhooks []WebhookRegistration
-
-	webhooks, err = FBRead()
-	if err != nil {
-		fmt.Println("Error: ", err)
-	}
-
-	for i := range webhooks {
-		if webhooks[i].Event == Payload.Event {
-			CallUrl(webhooks[i].URL, Payload.Event+","+Payload.Params)
-		}
-	}
+	CallUrl("languages", "Limit = "+limit+" and Auth = "+auth, time.Now())
 
 }
diff --git a/assignment2/status.go b/assignment2/status.go
index cb1d75f..90c5f26 100644
--- a/assignment2/status.go
+++ b/assignment2/status.go
@@ -17,7 +17,7 @@ func HandlerStatus(w http.ResponseWriter, r *http.Request) {
 
 	S.Gitlab = resp.StatusCode
 
-	resp, err = http.Get("https://git.gvk.idi.ntnu.no") //må endre link
+	resp, err = http.Get("https://firebase.google.com") //må endre link
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusBadRequest)
 		return
diff --git a/assignment2/structs.go b/assignment2/structs.go
index 1c1ec20..b40ec8d 100644
--- a/assignment2/structs.go
+++ b/assignment2/structs.go
@@ -69,9 +69,9 @@ type WebhookRegistration struct {
 // }
 
 type WebhooksInvocation struct {
-	Event  string    `json:"event"`
-	Params string    `json:"params"`
-	Time   time.Time `json:"time"`
+	Event  string `json:"event"`
+	Params string `json:"params"`
+	Time   string `json:"time"`
 }
 
 //************ Firebase ***********
diff --git a/assignment2/webhook.go b/assignment2/webhook.go
index 7df7a25..40a54e6 100644
--- a/assignment2/webhook.go
+++ b/assignment2/webhook.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"io/ioutil"
 	"net/http"
-	"strconv"
 	"strings"
 	"time"
 )
@@ -28,15 +27,14 @@ func WebhookHandeler(w http.ResponseWriter, r *http.Request) {
 			http.Error(w, err.Error(), http.StatusBadRequest)
 		}
 
+		webhook.Event = strings.ToLower(webhook.Event)
 		webhook.Time = time.Now() // sets time stamp
 
 		err = FBSave() // saves webhook to firebase
 		if err != nil {
 			fmt.Println("Error: ", err)
 		}
-		//webhooks = append(webhooks, webhook) // saves webhook to webhooks ***************** look at this one
 
-		//fmt.Fprintln(w, len(webhooks)-1)
 		fmt.Println("Webhooks " + webhook.URL + " has been regstrerd")
 
 	case http.MethodGet:
@@ -101,41 +99,42 @@ func WebhookHandeler2(w http.ResponseWriter, r *http.Request) {
 
 }
 
-/*
-	Invokes the web service to trigger event. Currently only responds to POST requests.
-*/
-
-func ServiceHandler(w http.ResponseWriter, r *http.Request) {
-	var webhooks []WebhookRegistration //Webhook DB
-
-	switch r.Method {
-	case http.MethodPost:
-		fmt.Println("Recive POST request")
-		for _, v := range webhooks {
-			go CallUrl(v.URL, "Resonse on registered event in webhook demo: "+v.Event)
-		}
-	default:
-		http.Error(w, "Method is invalid "+r.Method, http.StatusBadRequest)
-	}
-}
-
 /*
 	Calls given URL with given content and awaits response (status and body).
 */
 
-func CallUrl(url string, content string) {
-	fmt.Println("Attempting invocation of url " + url + "...")
-	res, err := http.Post(url, "string", bytes.NewReader([]byte(content)))
+func CallUrl(event string, params string, timestamp time.Time) {
+	var webhooks []WebhookRegistration
+	webhooks, err := FBRead()
 	if err != nil {
-		fmt.Println("Error in HTTP request: " + err.Error())
+		fmt.Println("Error: ", err)
 	}
 
-	response, err := ioutil.ReadAll(res.Body)
-	if err != nil {
-		fmt.Println("Something is wrong with invocation response: " + err.Error())
-	}
+	for i := range webhooks {
+		if webhooks[i].Event == event {
+			var request = WebhooksInvocation{Event: event, Params: params, Time: timestamp.String()}
+
+			requestBody, err := json.Marshal(request)
+			if err != nil {
+				fmt.Println("Can not encode: " + err.Error())
+			}
+
+			fmt.Println("Attempting invoation of URL " + webhooks[i].URL + "...")
+
+			resp, err := http.Post(webhooks[i].URL, "json", bytes.NewReader([]byte(requestBody)))
+			if err != nil {
+				fmt.Println("Error in HTTP request: " + err.Error())
+			}
 
-	fmt.Println("Webhook invoked. Received status code " + strconv.Itoa(res.StatusCode) +
-		" and body: " + string(response))
+			response, err := ioutil.ReadAll(resp.Body)
+			if err != nil {
+				fmt.Println("Something vent wrong: " + err.Error())
+			}
+
+			fmt.Println("Webhook body: " + string(response))
+
+		}
+
+	}
 
 }
-- 
GitLab