Gisle Aune
6 years ago
2 changed files with 0 additions and 152 deletions
@ -1,2 +0,0 @@ |
|||
config.json |
|||
debug |
@ -1,150 +0,0 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"context" |
|||
"encoding/json" |
|||
"log" |
|||
"net/http" |
|||
|
|||
"git.aiterp.net/rpdata/api/graphql/loader" |
|||
"git.aiterp.net/rpdata/api/graphql/resolver" |
|||
"git.aiterp.net/rpdata/api/graphql/schema" |
|||
"git.aiterp.net/rpdata/api/internal/auth" |
|||
"git.aiterp.net/rpdata/api/internal/store" |
|||
"git.aiterp.net/rpdata/api/model/change" |
|||
"git.aiterp.net/rpdata/api/model/file" |
|||
logModel "git.aiterp.net/rpdata/api/model/log" |
|||
graphql "github.com/graph-gophers/graphql-go" |
|||
"github.com/graph-gophers/graphql-go/relay" |
|||
) |
|||
|
|||
func main() { |
|||
err := store.Init() |
|||
if err != nil { |
|||
log.Fatalln("Failed to init store:", err) |
|||
} |
|||
|
|||
n, err := logModel.UpdateAllCharacters() |
|||
if err != nil { |
|||
log.Println("Charcter updated stopped:", err) |
|||
} |
|||
log.Println("Updated characters on", n, "logs") |
|||
|
|||
schema, err := graphql.ParseSchema(schema.String(), &resolver.Resolver{}, graphql.MaxParallelism(48)) |
|||
if err != nil { |
|||
log.Fatalln("Failed to parse schema:", err) |
|||
} |
|||
|
|||
http.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
|||
if r.Method != "GET" { |
|||
http.Error(w, "method not allowed", http.StatusMethodNotAllowed) |
|||
return |
|||
} |
|||
|
|||
w.Write(page) |
|||
})) |
|||
|
|||
relayHandler := &relay.Handler{Schema: schema} |
|||
http.HandleFunc("/graphql", func(w http.ResponseWriter, r *http.Request) { |
|||
l := loader.New() |
|||
r = r.WithContext(l.ToContext(r.Context())) |
|||
|
|||
r = auth.RequestWithToken(r) |
|||
|
|||
relayHandler.ServeHTTP(w, r) |
|||
}) |
|||
|
|||
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) { |
|||
r = auth.RequestWithToken(r) |
|||
|
|||
token := auth.TokenFromContext(r.Context()) |
|||
if !token.Permitted("file.upload") { |
|||
http.Error(w, "Unauthorized", http.StatusUnauthorized) |
|||
return |
|||
} |
|||
|
|||
if err := r.ParseMultipartForm(16384); err != nil { |
|||
http.Error(w, "Internal (1): "+err.Error(), http.StatusInternalServerError) |
|||
return |
|||
} |
|||
|
|||
formFile, header, err := r.FormFile("file") |
|||
if err != nil || header == nil || formFile == nil { |
|||
http.Error(w, "No file provided", http.StatusBadRequest) |
|||
return |
|||
} |
|||
|
|||
file, err := file.Upload(r.Context(), header.Filename, header.Header.Get("Content-Type"), token.UserID, header.Size, formFile) |
|||
if err != nil { |
|||
http.Error(w, "Internal (2): "+err.Error(), http.StatusInternalServerError) |
|||
return |
|||
} |
|||
|
|||
json, err := json.Marshal(file) |
|||
if err != nil { |
|||
http.Error(w, "Internal (3): "+err.Error(), http.StatusInternalServerError) |
|||
return |
|||
} |
|||
|
|||
w.Header().Set("Content-Type", "application/json") |
|||
w.WriteHeader(http.StatusOK) |
|||
w.Write(json) |
|||
}) |
|||
|
|||
change.InitializeTimeline() |
|||
go func() { |
|||
index := int64(0) |
|||
|
|||
for { |
|||
index++ |
|||
ch, err := change.Timeline.Get(context.Background(), index) |
|||
if err == change.ErrExpired { |
|||
continue |
|||
} else if err != nil { |
|||
log.Println("Timeline:", err) |
|||
break |
|||
} |
|||
|
|||
log.Printf("Change: time=%s model=%s op=%s id=%s author=%s\n", ch.Time.Local().Format("[Mon Jan 02 15:04 MST]"), ch.Model, ch.Op, ch.ObjectID, ch.Author) |
|||
} |
|||
}() |
|||
|
|||
log.Fatal(http.ListenAndServe(":17000", nil)) |
|||
} |
|||
|
|||
var page = []byte(` |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/graphiql/0.10.2/graphiql.css" /> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.1.0/fetch.min.js"></script> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react.min.js"></script> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react-dom.min.js"></script> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/graphiql/0.10.2/graphiql.js"></script> |
|||
</head> |
|||
<body style="width: 100%; height: 100%; margin: 0; overflow: hidden;"> |
|||
<div id="graphiql" style="height: 100vh;">Loading...</div> |
|||
<script> |
|||
function graphQLFetcher(graphQLParams) { |
|||
return fetch("/graphql", { |
|||
method: "post", |
|||
body: JSON.stringify(graphQLParams), |
|||
credentials: "include", |
|||
}).then(function (response) { |
|||
return response.text(); |
|||
}).then(function (responseBody) { |
|||
try { |
|||
return JSON.parse(responseBody); |
|||
} catch (error) { |
|||
return responseBody; |
|||
} |
|||
}); |
|||
} |
|||
ReactDOM.render( |
|||
React.createElement(GraphiQL, {fetcher: graphQLFetcher}), |
|||
document.getElementById("graphiql") |
|||
); |
|||
</script> |
|||
</body> |
|||
</html> |
|||
`) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue