Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
id
go-sso
Commits
86b820b3
Commit
86b820b3
authored
Aug 17, 2018
by
ale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update clientutil.Backend interface
parent
dc62a1d6
Pipeline
#1143
failed with stages
in 48 seconds
Changes
229
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
229 changed files
with
30894 additions
and
10060 deletions
+30894
-10060
proxy/proxy.go
proxy/proxy.go
+17
-1
vendor/git.autistici.org/ai3/go-common/clientutil/backend.go
vendor/git.autistici.org/ai3/go-common/clientutil/backend.go
+17
-94
vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go
...or/git.autistici.org/ai3/go-common/clientutil/balancer.go
+271
-0
vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof
vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof
+0
-0
vendor/git.autistici.org/ai3/go-common/clientutil/dns.go
vendor/git.autistici.org/ai3/go-common/clientutil/dns.go
+98
-0
vendor/git.autistici.org/ai3/go-common/clientutil/doc.go
vendor/git.autistici.org/ai3/go-common/clientutil/doc.go
+37
-0
vendor/git.autistici.org/ai3/go-common/clientutil/error.go
vendor/git.autistici.org/ai3/go-common/clientutil/error.go
+35
-0
vendor/git.autistici.org/ai3/go-common/clientutil/json.go
vendor/git.autistici.org/ai3/go-common/clientutil/json.go
+0
-45
vendor/git.autistici.org/ai3/go-common/clientutil/retry.go
vendor/git.autistici.org/ai3/go-common/clientutil/retry.go
+0
-92
vendor/git.autistici.org/ai3/go-common/clientutil/track.go
vendor/git.autistici.org/ai3/go-common/clientutil/track.go
+123
-0
vendor/git.autistici.org/ai3/go-common/clientutil/transport.go
...r/git.autistici.org/ai3/go-common/clientutil/transport.go
+34
-141
vendor/git.autistici.org/ai3/go-common/serverutil/http.go
vendor/git.autistici.org/ai3/go-common/serverutil/http.go
+42
-13
vendor/git.autistici.org/id/auth/README.md
vendor/git.autistici.org/id/auth/README.md
+8
-1
vendor/git.autistici.org/id/keystore/client/client.go
vendor/git.autistici.org/id/keystore/client/client.go
+3
-3
vendor/github.com/cenkalti/backoff/README.md
vendor/github.com/cenkalti/backoff/README.md
+1
-1
vendor/github.com/cenkalti/backoff/context.go
vendor/github.com/cenkalti/backoff/context.go
+1
-2
vendor/github.com/cenkalti/backoff/retry.go
vendor/github.com/cenkalti/backoff/retry.go
+0
-1
vendor/github.com/cenkalti/backoff/ticker.go
vendor/github.com/cenkalti/backoff/ticker.go
+0
-2
vendor/github.com/cenkalti/backoff/tries.go
vendor/github.com/cenkalti/backoff/tries.go
+2
-2
vendor/github.com/gorilla/mux/README.md
vendor/github.com/gorilla/mux/README.md
+3
-380
vendor/github.com/gorilla/mux/context_gorilla.go
vendor/github.com/gorilla/mux/context_gorilla.go
+0
-26
vendor/github.com/gorilla/mux/context_native.go
vendor/github.com/gorilla/mux/context_native.go
+0
-24
vendor/github.com/gorilla/mux/doc.go
vendor/github.com/gorilla/mux/doc.go
+17
-60
vendor/github.com/gorilla/mux/mux.go
vendor/github.com/gorilla/mux/mux.go
+32
-277
vendor/github.com/gorilla/mux/regexp.go
vendor/github.com/gorilla/mux/regexp.go
+43
-122
vendor/github.com/gorilla/mux/route.go
vendor/github.com/gorilla/mux/route.go
+48
-262
vendor/github.com/mssola/user_agent/README.md
vendor/github.com/mssola/user_agent/README.md
+1
-1
vendor/github.com/prometheus/common/model/time.go
vendor/github.com/prometheus/common/model/time.go
+3
-0
vendor/golang.org/x/crypto/ed25519/ed25519.go
vendor/golang.org/x/crypto/ed25519/ed25519.go
+48
-12
vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go
...rg/x/crypto/ed25519/internal/edwards25519/edwards25519.go
+22
-0
vendor/golang.org/x/crypto/ripemd160/ripemd160block.go
vendor/golang.org/x/crypto/ripemd160/ripemd160block.go
+34
-30
vendor/golang.org/x/net/context/context.go
vendor/golang.org/x/net/context/context.go
+2
-0
vendor/golang.org/x/sys/unix/affinity_linux.go
vendor/golang.org/x/sys/unix/affinity_linux.go
+124
-0
vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
+5
-5
vendor/golang.org/x/sys/unix/asm_linux_386.s
vendor/golang.org/x/sys/unix/asm_linux_386.s
+33
-3
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
+29
-1
vendor/golang.org/x/sys/unix/asm_linux_arm.s
vendor/golang.org/x/sys/unix/asm_linux_arm.s
+31
-4
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
+29
-1
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
+32
-4
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
+28
-5
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
+29
-1
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
+28
-0
vendor/golang.org/x/sys/unix/cap_freebsd.go
vendor/golang.org/x/sys/unix/cap_freebsd.go
+15
-15
vendor/golang.org/x/sys/unix/dev_darwin.go
vendor/golang.org/x/sys/unix/dev_darwin.go
+1
-1
vendor/golang.org/x/sys/unix/dev_dragonfly.go
vendor/golang.org/x/sys/unix/dev_dragonfly.go
+1
-1
vendor/golang.org/x/sys/unix/dev_freebsd.go
vendor/golang.org/x/sys/unix/dev_freebsd.go
+1
-1
vendor/golang.org/x/sys/unix/dev_linux.go
vendor/golang.org/x/sys/unix/dev_linux.go
+4
-4
vendor/golang.org/x/sys/unix/dev_netbsd.go
vendor/golang.org/x/sys/unix/dev_netbsd.go
+3
-3
vendor/golang.org/x/sys/unix/dev_openbsd.go
vendor/golang.org/x/sys/unix/dev_openbsd.go
+29
-0
vendor/golang.org/x/sys/unix/dirent.go
vendor/golang.org/x/sys/unix/dirent.go
+2
-87
vendor/golang.org/x/sys/unix/env_unix.go
vendor/golang.org/x/sys/unix/env_unix.go
+5
-1
vendor/golang.org/x/sys/unix/env_unset.go
vendor/golang.org/x/sys/unix/env_unset.go
+0
-14
vendor/golang.org/x/sys/unix/fcntl.go
vendor/golang.org/x/sys/unix/fcntl.go
+10
-0
vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
+0
-0
vendor/golang.org/x/sys/unix/file_unix.go
vendor/golang.org/x/sys/unix/file_unix.go
+0
-27
vendor/golang.org/x/sys/unix/gccgo.go
vendor/golang.org/x/sys/unix/gccgo.go
+17
-2
vendor/golang.org/x/sys/unix/gccgo_c.c
vendor/golang.org/x/sys/unix/gccgo_c.c
+4
-7
vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
+1
-1
vendor/golang.org/x/sys/unix/mkall.sh
vendor/golang.org/x/sys/unix/mkall.sh
+0
-9
vendor/golang.org/x/sys/unix/mkerrors.sh
vendor/golang.org/x/sys/unix/mkerrors.sh
+61
-20
vendor/golang.org/x/sys/unix/mksyscall.pl
vendor/golang.org/x/sys/unix/mksyscall.pl
+15
-2
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
+1
-1
vendor/golang.org/x/sys/unix/openbsd_pledge.go
vendor/golang.org/x/sys/unix/openbsd_pledge.go
+2
-2
vendor/golang.org/x/sys/unix/pagesize_unix.go
vendor/golang.org/x/sys/unix/pagesize_unix.go
+1
-1
vendor/golang.org/x/sys/unix/race.go
vendor/golang.org/x/sys/unix/race.go
+1
-1
vendor/golang.org/x/sys/unix/race0.go
vendor/golang.org/x/sys/unix/race0.go
+1
-1
vendor/golang.org/x/sys/unix/sockcmsg_linux.go
vendor/golang.org/x/sys/unix/sockcmsg_linux.go
+1
-1
vendor/golang.org/x/sys/unix/syscall.go
vendor/golang.org/x/sys/unix/syscall.go
+10
-25
vendor/golang.org/x/sys/unix/syscall_bsd.go
vendor/golang.org/x/sys/unix/syscall_bsd.go
+30
-41
vendor/golang.org/x/sys/unix/syscall_darwin.go
vendor/golang.org/x/sys/unix/syscall_darwin.go
+166
-22
vendor/golang.org/x/sys/unix/syscall_darwin_386.go
vendor/golang.org/x/sys/unix/syscall_darwin_386.go
+5
-12
vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
+5
-12
vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
+9
-12
vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
+5
-12
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+127
-19
vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_freebsd.go
vendor/golang.org/x/sys/unix/syscall_freebsd.go
+80
-32
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_linux.go
vendor/golang.org/x/sys/unix/syscall_linux.go
+98
-93
vendor/golang.org/x/sys/unix/syscall_linux_386.go
vendor/golang.org/x/sys/unix/syscall_linux_386.go
+12
-24
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
+25
-13
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
+12
-14
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
+51
-27
vendor/golang.org/x/sys/unix/syscall_linux_gc.go
vendor/golang.org/x/sys/unix/syscall_linux_gc.go
+14
-0
vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
+16
-0
vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
+30
-0
vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
+20
-0
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
+19
-12
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+13
-16
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
+12
-14
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+9
-11
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
+8
-11
vendor/golang.org/x/sys/unix/syscall_netbsd.go
vendor/golang.org/x/sys/unix/syscall_netbsd.go
+112
-16
vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_no_getwd.go
vendor/golang.org/x/sys/unix/syscall_no_getwd.go
+0
-11
vendor/golang.org/x/sys/unix/syscall_openbsd.go
vendor/golang.org/x/sys/unix/syscall_openbsd.go
+119
-33
vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
+8
-11
vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
+4
-11
vendor/golang.org/x/sys/unix/syscall_solaris.go
vendor/golang.org/x/sys/unix/syscall_solaris.go
+58
-28
vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
+4
-16
vendor/golang.org/x/sys/unix/syscall_unix.go
vendor/golang.org/x/sys/unix/syscall_unix.go
+101
-0
vendor/golang.org/x/sys/unix/timestruct.go
vendor/golang.org/x/sys/unix/timestruct.go
+82
-0
vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
+249
-139
vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
+249
-139
vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
+249
-139
vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
+249
-139
vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
+153
-135
vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
+189
-131
vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
+189
-131
vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
+189
-131
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+538
-167
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+538
-168
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+539
-167
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+539
-168
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+539
-170
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+540
-171
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+540
-171
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+539
-170
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+538
-169
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+538
-169
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+537
-168
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
+1
-1
vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
+147
-131
vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
+147
-131
vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
+147
-131
vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
+142
-126
vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
+319
-196
vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
+142
-126
vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
+178
-164
vendor/golang.org/x/sys/unix/zptrace386_linux.go
vendor/golang.org/x/sys/unix/zptrace386_linux.go
+80
-0
vendor/golang.org/x/sys/unix/zptracearm_linux.go
vendor/golang.org/x/sys/unix/zptracearm_linux.go
+41
-0
vendor/golang.org/x/sys/unix/zptracemips_linux.go
vendor/golang.org/x/sys/unix/zptracemips_linux.go
+50
-0
vendor/golang.org/x/sys/unix/zptracemipsle_linux.go
vendor/golang.org/x/sys/unix/zptracemipsle_linux.go
+50
-0
vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
+103
-0
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+103
-0
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
+105
-2
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+103
-0
vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
+68
-0
vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
+60
-0
vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
+60
-0
vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
+60
-0
vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+143
-86
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+128
-97
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+140
-83
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+72
-82
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+157
-90
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+138
-82
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+138
-82
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+157
-90
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+141
-74
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+141
-74
vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+128
-71
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+400
-61
vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
+93
-0
vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
+93
-0
vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
+93
-0
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
+104
-0
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
+104
-0
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
+104
-0
vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
+109
-0
vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
+1
-1
vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
+257
-0
vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
+270
-0
vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
+49
-11
vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
+49
-11
vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
+12
-2
vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
+12
-2
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+3
-0
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+3
-0
vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+24
-22
vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
+17
-7
vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
+1
-1
vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go
+0
-13
vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
+83
-56
vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
+106
-79
vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
+83
-56
vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
+109
-81
vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
+88
-50
vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+32
-0
vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+32
-0
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
+32
-0
vendor/golang.org/x/sys/unix/ztypes_linux_386.go
vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+1213
-160
vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+1216
-161
vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+1222
-169
vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+1217
-162
vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+1202
-149
vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+1215
-160
vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+1215
-160
vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+1202
-149
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+1220
-165
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+1220
-165
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+1170
-115
vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
+123
-99
vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
+49
-2
vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
+49
-2
vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
+49
-2
vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
+40
-2
vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
+82
-51
vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
+40
-2
vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
+111
-94
vendor/golang.org/x/sys/windows/asm_windows_386.s
vendor/golang.org/x/sys/windows/asm_windows_386.s
+2
-2
vendor/golang.org/x/sys/windows/asm_windows_amd64.s
vendor/golang.org/x/sys/windows/asm_windows_amd64.s
+1
-1
vendor/golang.org/x/sys/windows/dll_windows.go
vendor/golang.org/x/sys/windows/dll_windows.go
+5
-4
vendor/golang.org/x/sys/windows/env_unset.go
vendor/golang.org/x/sys/windows/env_unset.go
+0
-15
vendor/golang.org/x/sys/windows/env_windows.go
vendor/golang.org/x/sys/windows/env_windows.go
+5
-1
vendor/golang.org/x/sys/windows/memory_windows.go
vendor/golang.org/x/sys/windows/memory_windows.go
+1
-1
vendor/golang.org/x/sys/windows/mksyscall.go
vendor/golang.org/x/sys/windows/mksyscall.go
+1
-1
vendor/golang.org/x/sys/windows/race.go
vendor/golang.org/x/sys/windows/race.go
+1
-1
vendor/golang.org/x/sys/windows/race0.go
vendor/golang.org/x/sys/windows/race0.go
+1
-1
vendor/golang.org/x/sys/windows/security_windows.go
vendor/golang.org/x/sys/windows/security_windows.go
+45
-2
vendor/golang.org/x/sys/windows/service.go
vendor/golang.org/x/sys/windows/service.go
+1
-0
vendor/golang.org/x/sys/windows/syscall.go
vendor/golang.org/x/sys/windows/syscall.go
+6
-3
vendor/golang.org/x/sys/windows/syscall_windows.go
vendor/golang.org/x/sys/windows/syscall_windows.go
+157
-8
vendor/golang.org/x/sys/windows/types_windows.go
vendor/golang.org/x/sys/windows/types_windows.go
+81
-10
vendor/golang.org/x/sys/windows/types_windows_386.go
vendor/golang.org/x/sys/windows/types_windows_386.go
+1
-1
vendor/golang.org/x/sys/windows/types_windows_amd64.go
vendor/golang.org/x/sys/windows/types_windows_amd64.go
+1
-1
vendor/golang.org/x/sys/windows/zsyscall_windows.go
vendor/golang.org/x/sys/windows/zsyscall_windows.go
+273
-1
vendor/gopkg.in/yaml.v2/LICENSE
vendor/gopkg.in/yaml.v2/LICENSE
+10
-198
vendor/vendor.json
vendor/vendor.json
+67
-67
No files found.
proxy/proxy.go
View file @
86b820b3
package
proxy
import
(
"context"
"crypto/tls"
"errors"
"fmt"
"io/ioutil"
"math/rand"
"net"
"net/http"
"net/http/httputil"
"net/url"
"time"
"git.autistici.org/ai3/go-common/clientutil"
"github.com/gorilla/mux"
...
...
@@ -15,6 +19,9 @@ import (
"git.autistici.org/id/go-sso/httpsso"
)
// RNG for the random backend selector.
var
rnd
=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
// Backend defines a single-host HTTP proxy to a set of upstream
// backends.
type
Backend
struct
{
...
...
@@ -54,7 +61,16 @@ func (b *Backend) newHandler(ssow *httpsso.SSOWrapper) (http.Handler, error) {
// regardless of the HTTP request details.
tlsConfig
.
ServerName
=
b
.
ServerName
}
proxy
.
Transport
=
clientutil
.
NewTransport
(
b
.
Upstream
,
tlsConfig
,
nil
)
proxy
.
Transport
=
&
http
.
Transport
{
TLSClientConfig
:
tlsConfig
,
DialContext
:
func
(
ctx
context
.
Context
,
network
,
addr
string
)
(
net
.
Conn
,
error
)
{
// The simplest possible backend
// load-balancer: we just pick a random
// upstream target to connect to every time.
var
d
net
.
Dialer
return
d
.
DialContext
(
ctx
,
network
,
b
.
Upstream
[
rnd
.
Intn
(
len
(
b
.
Upstream
))])
},
}
h
:=
ssow
.
Wrap
(
proxy
,
b
.
Host
+
"/"
,
b
.
AllowedGroups
)
return
h
,
nil
...
...
vendor/git.autistici.org/ai3/go-common/clientutil/backend.go
View file @
86b820b3
package
clientutil
import
(
"crypto/tls"
"fmt"
"net/http"
"net/url"
"sync"
"time"
"context"
)
// BackendConfig specifies the configuration
to access
a service.
// BackendConfig specifies the configuration
of
a service
backend
.
//
// Services with multiple backends can be replicated or partitioned,
// depending on a configuration switch, making it a deployment-time
...
...
@@ -18,102 +13,30 @@ import (
// 'shard' parameter on their APIs.
type
BackendConfig
struct
{
URL
string
`yaml:"url"`
Sharded
bool
`yaml:"sharded"`
TLSConfig
*
TLSClientConfig
`yaml:"tls_config"`
Sharded
bool
`yaml:"sharded"`
Debug
bool
`yaml:"debug"`
}
// Backend is a runtime class that provides http Clients for use with
// a specific service backend. If the service can't be partitioned,
// pass an empty string to the C
lient
method.
// pass an empty string to the C
all
method.
type
Backend
interface
{
// URL for the service for a specific shard.
URL
(
string
)
string
// Call a remote method. The sharding behavior is the following:
//
// Services that support sharding (partitioning) should always
// include the shard ID in their Call() requests. Users can
// then configure backends to be sharded or not in their
// Config. When invoking Call with a shard ID on a non-sharded
// service, the shard ID is simply ignored. Invoking Call
// *without* a shard ID on a sharded service is an error.
Call
(
context
.
Context
,
string
,
string
,
interface
{},
interface
{})
error
// Cl
ient that can be used to make a request to the service
.
Cl
ient
(
string
)
*
http
.
Client
// Cl
ose all resources associated with the backend
.
Cl
ose
()
}
// NewBackend returns a new Backend with the given config.
func
NewBackend
(
config
*
BackendConfig
)
(
Backend
,
error
)
{
u
,
err
:=
url
.
Parse
(
config
.
URL
)
if
err
!=
nil
{
return
nil
,
err
}
var
tlsConfig
*
tls
.
Config
if
config
.
TLSConfig
!=
nil
{
tlsConfig
,
err
=
config
.
TLSConfig
.
TLSConfig
()
if
err
!=
nil
{
return
nil
,
err
}
}
if
config
.
Sharded
{
return
&
replicatedClient
{
u
:
u
,
c
:
newHTTPClient
(
u
,
tlsConfig
),
},
nil
}
return
&
shardedClient
{
baseURL
:
u
,
tlsConfig
:
tlsConfig
,
urls
:
make
(
map
[
string
]
*
url
.
URL
),
shards
:
make
(
map
[
string
]
*
http
.
Client
),
},
nil
}
type
replicatedClient
struct
{
c
*
http
.
Client
u
*
url
.
URL
}
func
(
r
*
replicatedClient
)
Client
(
_
string
)
*
http
.
Client
{
return
r
.
c
}
func
(
r
*
replicatedClient
)
URL
(
_
string
)
string
{
return
r
.
u
.
String
()
}
type
shardedClient
struct
{
baseURL
*
url
.
URL
tlsConfig
*
tls
.
Config
mx
sync
.
Mutex
urls
map
[
string
]
*
url
.
URL
shards
map
[
string
]
*
http
.
Client
}
func
(
s
*
shardedClient
)
getShardURL
(
shard
string
)
*
url
.
URL
{
if
shard
==
""
{
return
s
.
baseURL
}
u
,
ok
:=
s
.
urls
[
shard
]
if
!
ok
{
var
tmp
=
*
s
.
baseURL
tmp
.
Host
=
fmt
.
Sprintf
(
"%s.%s"
,
shard
,
tmp
.
Host
)
u
=
&
tmp
s
.
urls
[
shard
]
=
u
}
return
u
}
func
(
s
*
shardedClient
)
URL
(
shard
string
)
string
{
s
.
mx
.
Lock
()
defer
s
.
mx
.
Unlock
()
return
s
.
getShardURL
(
shard
)
.
String
()
}
func
(
s
*
shardedClient
)
Client
(
shard
string
)
*
http
.
Client
{
s
.
mx
.
Lock
()
defer
s
.
mx
.
Unlock
()
client
,
ok
:=
s
.
shards
[
shard
]
if
!
ok
{
u
:=
s
.
getShardURL
(
shard
)
client
=
newHTTPClient
(
u
,
s
.
tlsConfig
)
s
.
shards
[
shard
]
=
client
}
return
client
}
func
newHTTPClient
(
u
*
url
.
URL
,
tlsConfig
*
tls
.
Config
)
*
http
.
Client
{
return
&
http
.
Client
{
Transport
:
NewTransport
([]
string
{
u
.
Host
},
tlsConfig
,
nil
),
Timeout
:
30
*
time
.
Second
,
}
return
newBalancedBackend
(
config
,
defaultResolver
)
}
vendor/git.autistici.org/ai3/go-common/clientutil/balancer.go
0 → 100644
View file @
86b820b3
package
clientutil
import
(
"bytes"
"context"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"log"
"math/rand"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
"github.com/cenkalti/backoff"
)
// Our own narrow logger interface.
type
logger
interface
{
Printf
(
string
,
...
interface
{})
}
// A nilLogger is used when Config.Debug is false.
type
nilLogger
struct
{}
func
(
l
nilLogger
)
Printf
(
_
string
,
_
...
interface
{})
{}
// Parameters that define the exponential backoff algorithm used.
var
(
ExponentialBackOffInitialInterval
=
100
*
time
.
Millisecond
ExponentialBackOffMultiplier
=
1.4142
)
// newExponentialBackOff creates a backoff.ExponentialBackOff object
// with our own default values.
func
newExponentialBackOff
()
*
backoff
.
ExponentialBackOff
{
b
:=
backoff
.
NewExponentialBackOff
()
b
.
InitialInterval
=
ExponentialBackOffInitialInterval
b
.
Multiplier
=
ExponentialBackOffMultiplier
// Set MaxElapsedTime to 0 because we expect the overall
// timeout to be dictated by the request Context.
b
.
MaxElapsedTime
=
0
return
b
}
// Balancer for HTTP connections. It will round-robin across available
// backends, trying to avoid ones that are erroring out, until one
// succeeds or returns a permanent error.
//
// This object should not be used for load balancing of individual
// HTTP requests: it doesn't do anything smart beyond trying to avoid
// broken targets. It's meant to provide a *reliable* connection to a
// set of equivalent services for HA purposes.
type
balancedBackend
struct
{
*
backendTracker
*
transportCache
baseURI
*
url
.
URL
sharded
bool
resolver
resolver
log
logger
}
func
newBalancedBackend
(
config
*
BackendConfig
,
resolver
resolver
)
(
*
balancedBackend
,
error
)
{
u
,
err
:=
url
.
Parse
(
config
.
URL
)
if
err
!=
nil
{
return
nil
,
err
}
var
tlsConfig
*
tls
.
Config
if
config
.
TLSConfig
!=
nil
{
tlsConfig
,
err
=
config
.
TLSConfig
.
TLSConfig
()
if
err
!=
nil
{
return
nil
,
err
}
}
var
logger
logger
=
&
nilLogger
{}
if
config
.
Debug
{
logger
=
log
.
New
(
os
.
Stderr
,
fmt
.
Sprintf
(
"backend %s: "
,
u
.
Host
),
0
)
}
return
&
balancedBackend
{
backendTracker
:
newBackendTracker
(
u
.
Host
,
resolver
,
logger
),
transportCache
:
newTransportCache
(
tlsConfig
),
sharded
:
config
.
Sharded
,
baseURI
:
u
,
resolver
:
resolver
,
log
:
logger
,
},
nil
}
// Call the backend. Makes an HTTP POST request to the specified uri,
// with a JSON-encoded request body. It will attempt to decode the
// response body as JSON.
func
(
b
*
balancedBackend
)
Call
(
ctx
context
.
Context
,
shard
,
path
string
,
req
,
resp
interface
{})
error
{
data
,
err
:=
json
.
Marshal
(
req
)
if
err
!=
nil
{
return
err
}
var
tg
targetGenerator
=
b
.
backendTracker
if
b
.
sharded
&&
shard
!=
""
{
tg
=
newShardedGenerator
(
shard
,
b
.
baseURI
.
Host
,
b
.
resolver
)
}
seq
:=
newSequence
(
tg
)
b
.
log
.
Printf
(
"%016x: initialized"
,
seq
.
ID
())
var
httpResp
*
http
.
Response
err
=
backoff
.
Retry
(
func
()
error
{
req
,
rerr
:=
b
.
newJSONRequest
(
path
,
shard
,
data
)
if
rerr
!=
nil
{
return
rerr
}
httpResp
,
rerr
=
b
.
do
(
ctx
,
seq
,
req
)
return
rerr
},
backoff
.
WithContext
(
newExponentialBackOff
(),
ctx
))
if
err
!=
nil
{
return
err
}
defer
httpResp
.
Body
.
Close
()
// nolint
if
httpResp
.
Header
.
Get
(
"Content-Type"
)
!=
"application/json"
{
return
errors
.
New
(
"not a JSON response"
)
}
if
resp
==
nil
{
return
nil
}
return
json
.
NewDecoder
(
httpResp
.
Body
)
.
Decode
(
resp
)
}
// Return the URI to be used for the request. This is used both in the
// Host HTTP header and as the TLS server name used to pick a server
// certificate (if using TLS).
func
(
b
*
balancedBackend
)
getURIForRequest
(
shard
,
path
string
)
string
{
u
:=
*
b
.
baseURI
if
b
.
sharded
&&
shard
!=
""
{
u
.
Host
=
fmt
.
Sprintf
(
"%s.%s"
,
shard
,
u
.
Host
)
}
u
.
Path
=
appendPath
(
u
.
Path
,
path
)
return
u
.
String
()
}
// Build a http.Request object.
func
(
b
*
balancedBackend
)
newJSONRequest
(
path
,
shard
string
,
data
[]
byte
)
(
*
http
.
Request
,
error
)
{
req
,
err
:=
http
.
NewRequest
(
"POST"
,
b
.
getURIForRequest
(
shard
,
path
),
bytes
.
NewReader
(
data
))
if
err
!=
nil
{
return
nil
,
err
}
req
.
Header
.
Set
(
"Content-Type"
,
"application/json"
)
req
.
Header
.
Set
(
"Content-Length"
,
strconv
.
FormatInt
(
int64
(
len
(
data
)),
10
))
return
req
,
nil
}
// Select a new target from the given sequence and send the request to
// it. Wrap HTTP errors in a RemoteError object.
func
(
b
*
balancedBackend
)
do
(
ctx
context
.
Context
,
seq
*
sequence
,
req
*
http
.
Request
)
(
resp
*
http
.
Response
,
err
error
)
{
target
,
terr
:=
seq
.
Next
()
if
terr
!=
nil
{
return
}
b
.
log
.
Printf
(
"sequence %016x: connecting to %s"
,
seq
.
ID
(),
target
)
client
:=
&
http
.
Client
{
Transport
:
b
.
transportCache
.
getTransport
(
target
),
}
resp
,
err
=
client
.
Do
(
req
.
WithContext
(
ctx
))
if
err
==
nil
&&
resp
.
StatusCode
!=
200
{
err
=
remoteErrorFromResponse
(
resp
)
if
!
isStatusTemporary
(
resp
.
StatusCode
)
{
err
=
backoff
.
Permanent
(
err
)
}
resp
.
Body
.
Close
()
// nolint
resp
=
nil
}
seq
.
Done
(
target
,
err
)
return
}
var
errNoTargets
=
errors
.
New
(
"no available backends"
)
type
targetGenerator
interface
{
getTargets
()
[]
string
setStatus
(
string
,
bool
)
}
// A replicatedSequence repeatedly iterates over available backends in order of
// preference. Once in a while it refreshes its list of available
// targets.
type
sequence
struct
{
id
uint64
tg
targetGenerator
targets
[]
string
pos
int
}
func
newSequence
(
tg
targetGenerator
)
*
sequence
{
return
&
sequence
{
id
:
rand
.
Uint64
(),
tg
:
tg
,
targets
:
tg
.
getTargets
(),
}
}
func
(
s
*
sequence
)
ID
()
uint64
{
return
s
.
id
}
func
(
s
*
sequence
)
reloadTargets
()
{
targets
:=
s
.
tg
.
getTargets
()
if
len
(
targets
)
>
0
{
s
.
targets
=
targets
s
.
pos
=
0
}
}
// Next returns the next target.
func
(
s
*
sequence
)
Next
()
(
t
string
,
err
error
)
{
if
s
.
pos
>=
len
(
s
.
targets
)
{
s
.
reloadTargets
()
if
len
(
s
.
targets
)
==
0
{
err
=
errNoTargets
return
}
}
t
=
s
.
targets
[
s
.
pos
]
s
.
pos
++
return
}
func
(
s
*
sequence
)
Done
(
t
string
,
err
error
)
{
s
.
tg
.
setStatus
(
t
,
err
==
nil
)
}
// A shardedGenerator returns a single sharded target to a sequence.
type
shardedGenerator
struct
{
id
uint64
addrs
[]
string
}
func
newShardedGenerator
(
shard
,
base
string
,
resolver
resolver
)
*
shardedGenerator
{
return
&
shardedGenerator
{
id
:
rand
.
Uint64
(),
addrs
:
resolver
.
ResolveIP
(
fmt
.
Sprintf
(
"%s.%s"
,
shard
,
base
)),
}
}
func
(
g
*
shardedGenerator
)
getTargets
()
[]
string
{
return
g
.
addrs
}
func
(
g
*
shardedGenerator
)
setStatus
(
_
string
,
_
bool
)
{}
// Concatenate two URI paths.
func
appendPath
(
a
,
b
string
)
string
{
if
strings
.
HasSuffix
(
a
,
"/"
)
&&
strings
.
HasPrefix
(
b
,
"/"
)
{
return
a
+
b
[
1
:
]
}
return
a
+
b
}
// Some HTTP status codes are treated are temporary errors.
func
isStatusTemporary
(
code
int
)
bool
{
switch
code
{
case
http
.
StatusTooManyRequests
,
http
.
StatusBadGateway
,
http
.
StatusServiceUnavailable
,
http
.
StatusGatewayTimeout
:
return
true
default
:
return
false
}
}
vendor/git.autistici.org/ai3/go-common/clientutil/cpu.prof
0 → 100644
View file @
86b820b3
File added
vendor/git.autistici.org/ai3/go-common/clientutil/dns.go
0 → 100644
View file @
86b820b3
package
clientutil
import
(
"log"
"net"
"sync"
"time"
"golang.org/x/sync/singleflight"
)
type
resolver
interface
{
ResolveIP
(
string
)
[]
string
}
type
dnsResolver
struct
{}
func
(
r
*
dnsResolver
)
ResolveIP
(
hostport
string
)
[]
string
{
var
resolved
[]
string
host
,
port
,
err
:=
net
.
SplitHostPort
(
hostport
)
if
err
!=
nil
{
log
.
Printf
(
"error parsing %s: %v"
,
hostport
,
err
)
return
nil
}
hostIPs
,
err
:=
net
.
LookupIP
(
host
)
if
err
!=
nil
{
log
.
Printf
(
"error resolving %s: %v"
,
host
,
err
)
return
nil
}
for
_
,
ip
:=
range
hostIPs
{
resolved
=
append
(
resolved
,
net
.
JoinHostPort
(
ip
.
String
(),
port
))
}
return
resolved
}
var
defaultResolver
=
newDNSCache
(
&
dnsResolver
{})
type
cacheDatum
struct
{
addrs
[]
string
deadline
time
.
Time
}
type
dnsCache
struct
{