Skip to content

Commit 33e3dd4

Browse files
authored
upgrade GitHub to use newest HTTP (#102)
* upgrade GitHub to use newest HTTP * use HTTP.listen instead of HTTP.Servers.serve * small fixups * fixes for 0.7 * remove unnecessery declaration * Update REQUIRE * Update REQUIRE
1 parent 38eb5f9 commit 33e3dd4

19 files changed

+68
-79
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ Here's a table that matches up the provided `GitHubType`s with their correspondi
4444
|---------------|--------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
4545
| `Owner` | login, e.g. `"octocat"` | [organizations](https://developer.github.com/v3/orgs/), [users](https://developer.github.com/v3/users/) |
4646
| `Repo` | full_name, e.g. `"JuliaWeb/GitHub.jl"` | [repositories](https://developer.github.com/v3/repos/) |
47-
| `Commit` | sha, e.g. `"d069993b320c57b2ba27336406f6ec3a9ae39375"` | [repository commits](https://developer.github.com/v3/repos/commits/) |
48-
| `GitCommit` | sha, e.g. `"d069993b320c57b2ba27336406f6ec3a9ae39375"` | [raw git commits](https://developer.github.com/v3/git/commits/) |
47+
| `Commit` | sha, e.g. `"d069993b320c57b2ba27336406f6ec3a9ae39375"` | [repository commits](https://developer.github.com/v3/repos/commits/) |
48+
| `GitCommit` | sha, e.g. `"d069993b320c57b2ba27336406f6ec3a9ae39375"` | [raw git commits](https://developer.github.com/v3/git/commits/) |
4949
| `Branch` | name, e.g. `master` | [repository branches](https://developer.github.com/v3/repos/#get-branch) |
5050
| `Content` | path, e.g. `"src/owners/owners.jl"` | [repository contents](https://developer.github.com/v3/repos/contents/) |
5151
| `Comment` | id, e.g. `162224613` | [commit comments](https://developer.github.com/v3/repos/comments/), [issue comments](https://developer.github.com/v3/issues/comments/), [PR review comments](https://developer.github.com/v3/pulls/comments/) |
@@ -54,11 +54,11 @@ Here's a table that matches up the provided `GitHubType`s with their correspondi
5454
| `Issue` | number, e.g. `31` | [issues](https://developer.github.com/v3/issues/) |
5555
| `Team` | id, e.g. `1` | [teams](https://developer.github.com/v3/orgs/teams) |
5656
| `Gist` | id, e.g. `0bace7cc774df4b3a4b0ee9aaa271ef6` | [gists](https://developer.github.com/v3/gists) |
57-
| `Review` | id, e.g. `1` | [reviews](https://developer.github.com/v3/pulls/reviews/) |
58-
| `Blob` | sha, e.g. `"95c8d1aa2a7b1e6d672e15b67e0df4abbe57dcbe"` | [raw git blobs](https://developer.github.com/v3/git/blobs/)
59-
| `Tree` | sha, e.g. `"78e524d5e979e326a7c144ce195bf94ca9b04fa0"` | [raw git trees](https://developer.github.com/v3/git/trees/)
60-
| `Tag` | tag name, e.g. `v1.0` | [git tags](https://developer.github.com/v3/git/tags/)
61-
| `References` | reference name, e.g. `heads/master` (note: omits leading `refs/`) | [git tags](https://developer.github.com/v3/git/refs/)
57+
| `Review` | id, e.g. `1` | [reviews](https://developer.github.com/v3/pulls/reviews/) |
58+
| `Blob` | sha, e.g. `"95c8d1aa2a7b1e6d672e15b67e0df4abbe57dcbe"` | [raw git blobs](https://developer.github.com/v3/git/blobs/) |
59+
| `Tree` | sha, e.g. `"78e524d5e979e326a7c144ce195bf94ca9b04fa0"` | [raw git trees](https://developer.github.com/v3/git/trees/) |
60+
| `Tag` | tag name, e.g. `v1.0` | [git tags](https://developer.github.com/v3/git/tags/) |
61+
| `References` | reference name, e.g. `heads/master` (note: omits leading `refs/`) | [git tags](https://developer.github.com/v3/git/refs/) |
6262

6363

6464
You can inspect which fields are available for a type `G<:GitHubType` by calling `fieldnames(G)`.
@@ -89,7 +89,7 @@ GitHub.jl implements a bunch of methods that make REST requests to GitHub's API.
8989

9090
| method | return type | documentation |
9191
|------------------------------------------|------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
92-
| `repo(repo)` | `Repo` | [get `repo`](https://developer.github.com/v3/repos/#get) |
92+
| `repo(repo)` | `Repo` | [get `repo`](https://developer.github.com/v3/repos/#get) |
9393
| `create_repo(owner, name, params=Dict{String,String}())` | `Repo` | [create a repository of the given `name` in the given `owner`'s account](https://developer.github.com/v3/repos/#create) |
9494
| `create_fork(repo)` | `Repo` | [create a fork of `repo`](https://developer.github.com/v3/repos/forks/#create-a-fork) |
9595
| `forks(repo)` | `Tuple{Vector{Repo}, Dict}` | [get `repo`'s forks](https://developer.github.com/v3/repos/forks/#list-forks) |

REQUIRE

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
julia 0.6
22

3+
Compat 0.43
34
JSON
45
MbedTLS
5-
HTTP 0.5.4
6-
HttpCommon # for deprecations
6+
HTTP 0.6
7+
Nullables
8+

src/GitHub.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module GitHub
44

55
using Compat
66
using Compat.Dates
7+
using Nullables
78

89
if VERSION >= v"0.7.0-DEV.2338"
910
using Base64
@@ -15,8 +16,7 @@ end
1516

1617
import HTTP,
1718
JSON,
18-
MbedTLS,
19-
HttpCommon # for deprecations
19+
MbedTLS
2020

2121
########
2222
# init #

src/activity/events.jl

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ end
3535
# Validation Functions #
3636
########################
3737

38-
has_event_header(request::HTTP.Request) = haskey(HTTP.headers(request), "X-Github-Event")
39-
event_header(request::HTTP.Request) = HTTP.headers(request)["X-Github-Event"]
38+
has_event_header(request::HTTP.Request) = HTTP.hasheader(request, "X-Github-Event")
39+
event_header(request::HTTP.Request) = HTTP.header(request, "X-Github-Event")
4040

41-
has_sig_header(request::HTTP.Request) = haskey(HTTP.headers(request), "X-Hub-Signature")
42-
sig_header(request::HTTP.Request) = HTTP.headers(request)["X-Hub-Signature"]
41+
has_sig_header(request::HTTP.Request) = HTTP.hasheader(request, "X-Hub-Signature")
42+
sig_header(request::HTTP.Request) = HTTP.header(request, "X-Hub-Signature")
4343

4444
function has_valid_secret(request::HTTP.Request, secret)
4545
if has_sig_header(request)
46-
secret_sha = "sha1="*bytes2hex(MbedTLS.digest(MbedTLS.MD_SHA1, String(request), secret))
46+
secret_sha = "sha1="*bytes2hex(MbedTLS.digest(MbedTLS.MD_SHA1, HTTP.load(request), secret))
4747
return sig_header(request) == secret_sha
4848
end
4949
return false
@@ -62,69 +62,54 @@ end
6262
#################
6363

6464
struct EventListener
65-
server::HTTP.Server
65+
handle_request
6666
repos
6767
events
6868
function EventListener(handle; auth::Authorization = AnonymousAuth(),
6969
secret = nothing, events = nothing,
7070
repos = nothing, forwards = nothing)
71-
if !(isa(forwards, Void))
71+
if !(isa(forwards, Nothing))
7272
forwards = map(HTTP.URI, forwards)
7373
end
7474

75-
if !(isa(repos, Void))
75+
if !(isa(repos, Nothing))
7676
repos = map(name, repos)
7777
end
7878

79-
server = HTTP.Server() do request, response
80-
try
81-
handle_event_request(request, handle; auth = auth,
82-
secret = secret, events = events,
83-
repos = repos, forwards = forwards)
84-
catch err
85-
bt = catch_backtrace()
86-
print(STDERR, "SERVER ERROR: ")
87-
Base.showerror(STDERR, err, bt)
88-
return HTTP.Response(500)
89-
end
90-
end
79+
handle_request = request::HTTP.Request ->
80+
handle_event_request(request, handle; auth = auth,
81+
secret = secret, events = events,
82+
repos = repos, forwards = forwards)
9183

92-
return new(server, repos, events)
84+
return new(handle_request, repos, events)
9385
end
9486
end
9587

9688
function handle_event_request(request, handle;
9789
auth::Authorization = AnonymousAuth(),
9890
secret = nothing, events = nothing,
9991
repos = nothing, forwards = nothing)
100-
if !(isa(secret, Void)) && !(has_valid_secret(request, secret))
92+
if !(isa(secret, Nothing)) && !(has_valid_secret(request, secret))
10193
return HTTP.Response(400, "invalid signature")
10294
end
10395

104-
if !(isa(events, Void)) && !(is_valid_event(request, events))
96+
if !(isa(events, Nothing)) && !(is_valid_event(request, events))
10597
return HTTP.Response(204, "event ignored")
10698
end
10799

108-
event = event_from_payload!(event_header(request), JSON.parse(String(request)))
100+
event = event_from_payload!(event_header(request), JSON.parse(HTTP.load(request)))
109101

110-
if !(isa(repos, Void)) && !(from_valid_repo(event, repos))
102+
if !(isa(repos, Nothing)) && !(from_valid_repo(event, repos))
111103
return HTTP.Response(400, "invalid repo")
112104
end
113105

114-
if !(isa(forwards, Void))
106+
if !(isa(forwards, Nothing))
115107
for address in forwards
116108
HTTP.post(address, request)
117109
end
118110
end
119111

120-
retval = handle(event)
121-
if retval isa HttpCommon.Response
122-
Base.depwarn("event handlers should return an `HTTP.Response` instead of an `HttpCommon.Response`,
123-
making a best effort to convert to an `HTTP.Response`", :handle_event_request)
124-
retval = HTTP.Response(; status = retval.status, headers = convert(Dict{String, String}, retval.headers),
125-
body = HTTP.FIFOBuffer(retval.data))
126-
end
127-
return retval
112+
return handle(event)
128113
end
129114

130115
function Base.run(listener, args...; host = nothing, port = nothing, kwargs...)
@@ -136,9 +121,9 @@ end
136121

137122
function Base.run(listener::EventListener, host::HTTP.IPAddr, port::Int, args...; kwargs...)
138123
println("Listening for GitHub events sent to $port;")
139-
println("Whitelisted events: $(isa(listener.events, Void) ? "All" : listener.events)")
140-
println("Whitelisted repos: $(isa(listener.repos, Void) ? "All" : listener.repos)")
141-
return HTTP.serve(listener.server, host, port, args...; kwargs...)
124+
println("Whitelisted events: $(isa(listener.events, Nothing) ? "All" : listener.events)")
125+
println("Whitelisted repos: $(isa(listener.repos, Nothing) ? "All" : listener.repos)")
126+
HTTP.listen(listener.handle_request, host, port; kwargs...)
142127
end
143128

144129
###################

src/apps/installations.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ end
2525
headers["Accept"] = "application/vnd.github.machine-man-preview+json"
2626
results, page_data = github_paged_get(api, "/installation/repositories";
2727
headers=headers, options...)
28-
mapreduce(x->map(Repo, JSON.parse(String(x))["repositories"]), vcat, Repo[], results), page_data
28+
mapreduce(x->map(Repo, JSON.parse(HTTP.load(x))["repositories"]), vcat, Repo[], results), page_data
2929
end

src/git/blob.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
mutable struct Blob <: GitHubType
22
content::Nullable{String}
33
encoding::Nullable{String}
4-
url::Nullable{HttpCommon.URI}
4+
url::Nullable{HTTP.URI}
55
sha::Nullable{String}
66
size::Nullable{Int}
77
end

src/git/gitcommit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
mutable struct GitCommit <: GitHubType
22
sha::Nullable{String}
3-
url::Nullable{HttpCommon.URI}
3+
url::Nullable{HTTP.URI}
44
author::Nullable{Dict}
55
commiter::Nullable{Dict}
66
message::Nullable{String}

src/git/reference.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
mutable struct Reference <: GitHubType
22
ref::Nullable{String}
3-
url::Nullable{HttpCommon.URI}
3+
url::Nullable{HTTP.URI}
44
object::Nullable{Dict}
55
end
66

src/git/tag.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
mutable struct Tag <: GitHubType
22
tag::Nullable{String}
33
sha::Nullable{String}
4-
url::Nullable{HttpCommon.URI}
4+
url::Nullable{HTTP.URI}
55
message::Nullable{String}
66
tagger::Nullable{Dict}
77
object::Nullable{Dict}

src/git/tree.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
mutable struct Tree <: GitHubType
22
sha::Nullable{String}
3-
url::Nullable{HttpCommon.URI}
3+
url::Nullable{HTTP.URI}
44
tree::Nullable{Vector}
55
truncated::Nullable{Bool}
66
end

0 commit comments

Comments
 (0)