Skip to content

Commit 626a64b

Browse files
author
Milan Pavlik
committed
Clean up
1 parent c1a6291 commit 626a64b

File tree

7 files changed

+104
-47
lines changed

7 files changed

+104
-47
lines changed

app/src/App.tsx

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22
import './App.css';
33
import { grpc } from 'grpc-web-client';
44
import { HackerNewsService } from './proto/hackernews_pb_service';
5-
import { GetStoryRequest, ListStoriesRequest, ListStoriesResponse } from './proto/hackernews_pb';
5+
import { ListStoriesRequest, ListStoriesResponse } from './proto/hackernews_pb';
66
import { Button, Container, Divider, Grid, Header, Image, Menu, Segment } from 'semantic-ui-react';
77
import StoryList from './StoryList';
88
import StoryView from './StoryView';
@@ -17,7 +17,7 @@ const ThemingLayout = () => (
1717
<StoryList />
1818
</Grid.Column>
1919

20-
<Grid.Column width={9}>
20+
<Grid.Column width={13} stretched={true}>
2121

2222
<Header as="h2">Example body text</Header>
2323
<StoryView />
@@ -244,27 +244,29 @@ const ThemingLayout = () => (
244244
class App extends React.Component {
245245

246246
componentDidMount() {
247+
let count = 0;
247248
const request = new ListStoriesRequest();
248249
grpc.invoke(HackerNewsService.ListStories, {
249250
request: request,
250251
debug: true,
251252
host: 'http://localhost:8900',
252253
onMessage: (res: ListStoriesResponse) => {
254+
count += 1;
253255
// const obj: ListStoriesResponse = res.toObject();
254-
const id = res.getStory()!.getId();
256+
const url = res.getStory()!.getUrl();
257+
console.log('url', url);
255258
// console.log(id);
256-
257-
const req = new GetStoryRequest();
258-
req.setId(id);
259-
260-
grpc.unary(HackerNewsService.GetStory, {
261-
host: 'http://localhost:8900',
262-
debug: true,
263-
request: req,
264-
onEnd: (result) => {
265-
console.log(result.message ? atob((result.message.toObject() as {html: string}).html) : 'nil');
266-
}
267-
});
259+
if (count === 1) {
260+
fetch('http://localhost:8900/article-proxy?q=' + encodeURIComponent(url));
261+
}
262+
// grpc.unary(HackerNewsService.GetStory, {
263+
// host: 'http://localhost:8900',
264+
// debug: true,
265+
// request: req,
266+
// onEnd: (result) => {
267+
// console.log(result.message ? atob((result.message.toObject() as {html: string}).html) : 'nil');
268+
// }
269+
// });
268270
},
269271
onEnd: (res) => {
270272
console.log('end', res);

app/src/StoryView.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import * as React from 'react';
22

33
const StoryView: React.SFC<{}> = (props) => {
4+
const url = 'http://localhost:8900/article-proxy?q=' +
5+
'https%3A%2F%2Fstackshare.io%2Fstream%2Fstream-and-go-news-feeds-for-over-300-million-end-users';
46
return (
57
<iframe
68
frameBorder="0"
7-
width="100%"
8-
height="100%"
9-
src="https://0day.work/using-a-yubikey-for-gpg-and-ssh/"
9+
style={{
10+
height: '100vh',
11+
width: '100%',
12+
}}
13+
src={url}
1014
/>
1115
);
1216
};

server/hackernews/scraper.go

Lines changed: 0 additions & 21 deletions
This file was deleted.

server/main.go

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,43 @@ package main
22

33
import (
44
"github.com/go-chi/chi"
5+
chiMiddleware "github.com/go-chi/chi/middleware"
56
"google.golang.org/grpc"
67
"net/http"
78
"github.com/easyCZ/grpc-web-hacker-news/server/hackernews"
89
hackernews_pb "github.com/easyCZ/grpc-web-hacker-news/server/proto"
910
"google.golang.org/grpc/grpclog"
1011
"github.com/improbable-eng/grpc-web/go/grpcweb"
12+
"github.com/go-chi/cors"
13+
"github.com/easyCZ/grpc-web-hacker-news/server/proxy"
14+
"github.com/easyCZ/grpc-web-hacker-news/server/ping"
15+
"github.com/easyCZ/grpc-web-hacker-news/server/middleware"
1116
)
1217

1318
func main() {
14-
router := chi.NewRouter()
15-
1619
grpcServer := grpc.NewServer()
1720
hackernewsService := hackernews.NewHackerNewsService(nil)
1821
hackernews_pb.RegisterHackerNewsServiceServer(grpcServer, hackernewsService)
1922

2023
wrappedGrpc := grpcweb.WrapServer(grpcServer)
21-
router.Use(func(handler http.Handler) http.Handler {
22-
return wrappedGrpc
23-
})
2424

25-
router.Get("/ping", func(writer http.ResponseWriter, request *http.Request) {
26-
writer.Write([]byte("pong"))
27-
})
25+
router := chi.NewRouter()
26+
router.Use(
27+
chiMiddleware.Logger,
28+
chiMiddleware.Recoverer,
29+
middleware.NewGrpcWebMiddleware(wrappedGrpc).Handler, // Must come before general CORS handling
30+
cors.New(cors.Options{
31+
AllowedOrigins: []string{"*"},
32+
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
33+
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", },
34+
ExposedHeaders: []string{"Link"},
35+
AllowCredentials: true,
36+
MaxAge: 300, // Maximum value not ignored by any of major browsers
37+
}).Handler,
38+
)
39+
40+
router.Get("/article-proxy", proxy.Article)
41+
router.Get("/ping", ping.Handler)
2842

2943
if err := http.ListenAndServe(":8900", router); err != nil {
3044
grpclog.Fatalf("failed starting http2 server: %v", err)

server/middleware/grpcWeb.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package middleware
2+
3+
import (
4+
"github.com/improbable-eng/grpc-web/go/grpcweb"
5+
"net/http"
6+
)
7+
8+
type GrpcWebMiddleware struct {
9+
*grpcweb.WrappedGrpcServer
10+
}
11+
12+
func (m *GrpcWebMiddleware) Handler(next http.Handler) http.Handler {
13+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14+
if m.IsAcceptableGrpcCorsRequest(r) || m.IsGrpcWebRequest(r) {
15+
m.ServeHTTP(w, r)
16+
return
17+
}
18+
next.ServeHTTP(w, r)
19+
})
20+
}
21+
22+
func NewGrpcWebMiddleware(grpcWeb *grpcweb.WrappedGrpcServer) *GrpcWebMiddleware {
23+
return &GrpcWebMiddleware{grpcWeb}
24+
}

server/ping/ping.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ping
2+
3+
import "net/http"
4+
5+
func Handler(w http.ResponseWriter, r *http.Request) {
6+
w.Write([]byte("pong"))
7+
}

server/proxy/article.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package proxy
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
"bufio"
7+
)
8+
9+
func Article(w http.ResponseWriter, r *http.Request) {
10+
//url := chi.URLParam(request, "q") // URL encoded url we want to proxy serve
11+
url := "http://www.bbc.com/news/health-42736764"
12+
fmt.Println("url", url)
13+
if url == "" {
14+
http.Error(w, "Must specify the url to request", 400)
15+
}
16+
response, err := http.Get(url)
17+
if err != nil {
18+
http.Error(w, "Failed to retrieve article", 500)
19+
}
20+
if response.StatusCode >= 400 {
21+
if err != nil {
22+
http.Error(w, response.Status, response.StatusCode)
23+
}
24+
}
25+
reader := bufio.NewReader(response.Body)
26+
reader.WriteTo(w)
27+
}

0 commit comments

Comments
 (0)