-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
105 lines (83 loc) · 2.28 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"flag"
"fmt"
"html/template"
"log"
"net/http"
"github.com/google/go-github/github"
"golang.org/x/oauth2"
)
func request(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("index.html")
t.Execute(w, nil)
}
type repos_hash struct {
url string
hashtable map[string]int
}
func gather(repo *github.Repository, client *github.Client, out chan repos_hash) {
var repos_tmp repos_hash
//filter them
fmt.Println("repo_URL : ", *repo.URL)
fmt.Println("repo_Owner : ", *repo.Owner.Login)
fmt.Println("repo_Owner : ", *repo.Name)
res, _, err := client.Repositories.ListLanguages(*repo.Owner.Login, *repo.Name)
if err != nil {
fmt.Println(err)
}
repos_tmp.hashtable = res
repos_tmp.url = *repo.URL
out <- repos_tmp
}
func search(w http.ResponseWriter, r *http.Request) {
/*Get the form content*/
/*r.ParseForm()
// logic part of log in
fmt.Println("language: ", r.Form["language"])
/* language := strings.Join(r.Form["language"], "")*/
//start the query on github
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: "b1abf4e31f153ad21e19cf70dabce2310a731b1c"},
)
tc := oauth2.NewClient(oauth2.NoContext, ts)
client := github.NewClient(tc)
//get the 100 last repositories
opt := &github.RepositoryListAllOptions{
ListOptions: github.ListOptions{PerPage: 100},
}
// get all pages of results
var allRepos []*github.Repository
repos, _, err := client.Repositories.ListAll(opt)
if err != nil {
fmt.Println(err)
}
allRepos = append(allRepos, repos...)
reposChan := make(chan repos_hash, len(allRepos))
for _, repo := range allRepos {
go gather(repo, client, reposChan)
}
result := make([]repos_hash, len(allRepos))
for i := 0; i < len(allRepos); i++ {
result[i] = <-reposChan
fmt.Println(result[i])
}
// for _, elmt := range allRepos {
// fmt.Printf("elmt :%s\n", elmt.url)
// }
t, _ := template.ParseFiles("result.html")
t.Execute(w, nil)
}
func main() {
//On initialise la valeur du port
port := flag.String("port", "3000", "server port number")
http.HandleFunc("/", request)
http.HandleFunc("/search", search)
log.Println("Listening on :" + *port)
//manage request
log.Println("Listenning...")
err := http.ListenAndServe(":"+*port, nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}