Add decentralized services
This commit is contained in:
parent
d2422d5036
commit
c7d0adf780
19 changed files with 346 additions and 19 deletions
|
|
@ -5,11 +5,10 @@ COPY . .
|
|||
RUN go get -d ./...
|
||||
RUN go install ./...
|
||||
|
||||
|
||||
FROM alpine:latest
|
||||
RUN apk --no-cache add ca-certificates tzdata
|
||||
WORKDIR /app
|
||||
COPY --from=builder /go/bin/app .
|
||||
COPY --from=builder /go/bin/spaceapi.ccc.de ./app
|
||||
COPY config.yaml config.yaml
|
||||
EXPOSE 8080
|
||||
CMD ["./app"]
|
||||
|
|
|
|||
|
|
@ -4,4 +4,6 @@ type ConfigFile struct {
|
|||
SharedSecret string `yaml:"shared_secret,omitempty"`
|
||||
MongoDbServer string `yaml:"mongodb_server,omitempty"`
|
||||
MongoDbDatabase string `yaml:"mongodb_database,omitempty"`
|
||||
DokuWikiUser string `yaml:"doku_wiki_user,omitempty"`
|
||||
DokuWikiPassword string `yaml:"doku_wiki_password,omitempty"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,27 @@ func writeCalendar(calendar Calendar) {
|
|||
c.Upsert(bson.M{"space": calendar.Space}, calendar)
|
||||
}
|
||||
|
||||
func writeDecentralizedServices(services []DecentrealizedService) {
|
||||
if len(services) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
session, err := mgo.Dial(config.MongoDbServer)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer session.Close()
|
||||
|
||||
session.SetMode(mgo.Monotonic, true)
|
||||
|
||||
c := session.DB(config.MongoDbDatabase).C("decentralized_services")
|
||||
|
||||
c.DropCollection()
|
||||
for _, service := range(services) {
|
||||
c.Insert(service)
|
||||
}
|
||||
}
|
||||
|
||||
func updateSpaceurl(spaceUrl SpaceUrl) {
|
||||
session, err := mgo.Dial(config.MongoDbServer)
|
||||
if err != nil {
|
||||
|
|
@ -131,3 +152,20 @@ func readCalendar() []Calendar {
|
|||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
func readServices() []DecentrealizedService {
|
||||
session, err := mgo.Dial(config.MongoDbServer)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer session.Close()
|
||||
|
||||
session.SetMode(mgo.Monotonic, true)
|
||||
|
||||
c := session.DB(config.MongoDbDatabase).C("decentralized_services")
|
||||
var result []DecentrealizedService
|
||||
c.Find(bson.M{}).Iter().All(&result)
|
||||
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"github.com/gofrs/uuid"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/robfig/cron"
|
||||
"gopkg.in/yaml.v2"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
|
|
@ -22,11 +24,16 @@ func main() {
|
|||
panic("Can't load config")
|
||||
}
|
||||
config.SharedSecret = os.Getenv("SHARED_SECRET")
|
||||
config.DokuWikiUser = os.Getenv("DOKU_WIKI_USER")
|
||||
config.DokuWikiPassword = os.Getenv("DOKU_WIKI_PASSWORD")
|
||||
|
||||
updateDecentralizedServicesList()
|
||||
|
||||
c := cron.New()
|
||||
_, err = c.AddFunc("@hourly", func() {
|
||||
err = c.AddFunc("@hourly", func() {
|
||||
loadSpaceData()
|
||||
getCalendars()
|
||||
updateDecentralizedServicesList()
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("Can't start cron %v", err)
|
||||
|
|
@ -61,6 +68,10 @@ func CalendarIndex(w http.ResponseWriter, r *http.Request) {
|
|||
ReturnJson(w, readCalendar())
|
||||
}
|
||||
|
||||
func DecentralizedServicesIndex(w http.ResponseWriter, r *http.Request) {
|
||||
ReturnJson(w, readServices())
|
||||
}
|
||||
|
||||
func SpaceUrlAdd(w http.ResponseWriter, r *http.Request) {
|
||||
spaceUrl := SpaceUrl{}
|
||||
createEntry(&spaceUrl, w, r)
|
||||
|
|
@ -130,3 +141,48 @@ func refreshData(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
w.WriteHeader(204)
|
||||
}
|
||||
|
||||
func updateDecentralizedServicesList() {
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest("GET", "https://doku.ccc.de/index.php?title=Spezial:Ask&x=-5B-5BKategorie%3ADienste-5D-5D%2F-3FService-2DName%3DName%2F-3FService-2DProduct%3DProdukt%2F-3FService-2DIs-2DCentralized%3DZentralisiert%2F-3FService-2DVisibility%3DSichtbarkeit%2F-3FService-2DOrg%3DOrganisation%2F-3FService-2DType%3DTyp%2F-3FService-2DURL%3DURL%2F-3FService-2DContact%3DKontakt%2F-3FService-2DCheck-23ISO%3DOnline-20Check%2F-3FService-2DState%3DOnline-3F%2F-3FService-2DEncryption%3DVerschl%C3%BCsselung%2F-3FService-2DHas-2DIPv4%3DIPv4%2F-3FService-2DHas-2DIPv6%3DIPv6&mainlabel=-&limit=50&offset=0&format=csv&headers=show&searchlabel=CSV&default=%21no%20result%21&sep=%3B&valuesep=%3B&filename=dienste.csv", nil)
|
||||
if err != nil{
|
||||
log.Fatal(err)
|
||||
}
|
||||
req.SetBasicAuth(config.DokuWikiUser, config.DokuWikiPassword)
|
||||
resp, err := client.Do(req)
|
||||
if err != nil{
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
r := csv.NewReader(resp.Body)
|
||||
r.Comma = ';'
|
||||
|
||||
var DecentrealizedServiceList []DecentrealizedService
|
||||
for {
|
||||
record, err := r.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if record[3] == "public" && record[9] == "wahr" && record[6] != "" {
|
||||
foo := DecentrealizedService{
|
||||
record[0],
|
||||
record[1],
|
||||
record[6],
|
||||
}
|
||||
|
||||
DecentrealizedServiceList = append(DecentrealizedServiceList, foo)
|
||||
}
|
||||
}
|
||||
|
||||
writeDecentralizedServices(DecentrealizedServiceList)
|
||||
}
|
||||
|
||||
type DecentrealizedService struct {
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
|
|
|||
15
backend/go.mod
Normal file
15
backend/go.mod
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
module github.com/gidsi/spaceapi.ccc.de
|
||||
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/PuloV/ics-golang v0.0.0-20190808201353-a3394d3bcade
|
||||
github.com/channelmeter/iso8601duration v0.0.0-20150204201828-8da3af7a2a61 // indirect
|
||||
github.com/gidsi/ics-golang v0.0.0-20190331185529-e95e328c4a08
|
||||
github.com/gofrs/uuid v3.2.0+incompatible
|
||||
github.com/gorilla/mux v1.7.3
|
||||
github.com/robfig/cron v1.2.0
|
||||
github.com/robfig/cron/v3 v3.0.1
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||
gopkg.in/yaml.v2 v2.2.8
|
||||
)
|
||||
18
backend/go.sum
Normal file
18
backend/go.sum
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
github.com/PuloV/ics-golang v0.0.0-20190808201353-a3394d3bcade h1:odEkSCl2gLWPtvraEdCyBZbeYyMMTysWPLMurnB8sUY=
|
||||
github.com/PuloV/ics-golang v0.0.0-20190808201353-a3394d3bcade/go.mod h1:f1P3hjG+t54/IrnXMnnw+gRmFCDR/ryj9xSQ7MPMkQw=
|
||||
github.com/channelmeter/iso8601duration v0.0.0-20150204201828-8da3af7a2a61 h1:o64h9XF42kVEUuhuer2ehqrlX8rZmvQSU0+Vpj1rF6Q=
|
||||
github.com/channelmeter/iso8601duration v0.0.0-20150204201828-8da3af7a2a61/go.mod h1:Rp8e0DCtEKwXFOC6JPJQVTz8tuGoGvw6Xfexggh/ed0=
|
||||
github.com/gidsi/ics-golang v0.0.0-20190331185529-e95e328c4a08 h1:x57vmmjqLdRGv3bZQqoyzt4S08z5pTk/vkWaqXGnswI=
|
||||
github.com/gidsi/ics-golang v0.0.0-20190331185529-e95e328c4a08/go.mod h1:oIDQdzzcgVLYQRfohyxBaOVr7pyfRydoPcEdVNXry4s=
|
||||
github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
|
||||
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
|
||||
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
|
|
@ -36,6 +36,12 @@ var IndexRoutes = Routes{
|
|||
"/calendar",
|
||||
CalendarIndex,
|
||||
},
|
||||
Route{
|
||||
"ServicesIndex",
|
||||
"GET",
|
||||
"/services",
|
||||
DecentralizedServicesIndex,
|
||||
},
|
||||
Route{
|
||||
"SpaceUrlAdd",
|
||||
"POST",
|
||||
|
|
|
|||
BIN
backend/spaceapi.ccc.de
Executable file
BIN
backend/spaceapi.ccc.de
Executable file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue