Skip to content

Commit 76a1e75

Browse files
committed
Merge branch 'main' into users
2 parents 6394949 + 6e6eee6 commit 76a1e75

File tree

19 files changed

+1556
-13
lines changed

19 files changed

+1556
-13
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ yarn-error.log
1717
# Front-end ignore
1818
.next/
1919
site/.next/
20-
coverage/
20+
coverage/
21+
22+
# Build
23+
bin/
24+
site/out/

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ yarn-error.log
1313
# Front-end ignore
1414
.next/
1515
site/.next/
16+
site/out/
1617
coverage/

Makefile

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
bin/coderd:
2+
mkdir -p bin
3+
go build -o bin/coderd cmd/coderd/main.go
4+
.PHONY: bin/coderd
5+
6+
build: site/out bin/coderd
7+
.PHONY: build
8+
19
# Runs migrations to output a dump of the database.
210
database/dump.sql: $(wildcard database/migrations/*.sql)
311
go run database/dump/main.go
@@ -43,4 +51,9 @@ provisionersdk/proto: provisionersdk/proto/provisioner.proto
4351
--go-drpc_out=. \
4452
--go-drpc_opt=paths=source_relative \
4553
./provisioner.proto
46-
.PHONY: provisionersdk/proto
54+
.PHONY: provisionersdk/proto
55+
56+
site/out:
57+
yarn build
58+
yarn export
59+
.PHONY: site/out

coderd/coderd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/coder/coder/database"
1010
"github.com/coder/coder/httpapi"
1111
"github.com/coder/coder/httpmw"
12+
"github.com/coder/coder/site"
1213
)
1314

1415
// Options are requires parameters for Coder to start.
@@ -41,5 +42,6 @@ func New(options *Options) http.Handler {
4142
r.Get("/user", users.getAuthenticatedUser)
4243
})
4344
})
45+
r.NotFound(site.Handler().ServeHTTP)
4446
return r
4547
}

cryptorand/numbers.go

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
package cryptorand
2+
3+
import (
4+
"crypto/rand"
5+
"encoding/binary"
6+
7+
"golang.org/x/xerrors"
8+
)
9+
10+
// Most of this code is inspired by math/rand, so shares similar
11+
// functions and implementations, but uses crypto/rand to generate
12+
// random Int63 data.
13+
14+
// Int64 returns a non-negative random 63-bit integer as a int64.
15+
func Int63() (int64, error) {
16+
var i int64
17+
err := binary.Read(rand.Reader, binary.BigEndian, &i)
18+
if err != nil {
19+
return 0, xerrors.Errorf("read binary: %w", err)
20+
}
21+
22+
if i < 0 {
23+
return -i, nil
24+
}
25+
return i, nil
26+
}
27+
28+
// Uint64 returns a random 64-bit integer as a uint64.
29+
func Uint64() (uint64, error) {
30+
upper, err := Int63()
31+
if err != nil {
32+
return 0, xerrors.Errorf("read upper: %w", err)
33+
}
34+
35+
lower, err := Int63()
36+
if err != nil {
37+
return 0, xerrors.Errorf("read lower: %w", err)
38+
}
39+
40+
return uint64(lower)>>31 | uint64(upper)<<32, nil
41+
}
42+
43+
// Int31 returns a non-negative random 31-bit integer as a int32.
44+
func Int31() (int32, error) {
45+
i, err := Int63()
46+
if err != nil {
47+
return 0, err
48+
}
49+
50+
return int32(i >> 32), nil
51+
}
52+
53+
// Uint32 returns a 32-bit value as a uint32.
54+
func Uint32() (uint32, error) {
55+
i, err := Int63()
56+
if err != nil {
57+
return 0, err
58+
}
59+
60+
return uint32(i >> 31), nil
61+
}
62+
63+
// Int returns a non-negative random integer as a int.
64+
func Int() (int, error) {
65+
i, err := Int63()
66+
if err != nil {
67+
return 0, err
68+
}
69+
70+
if i < 0 {
71+
return int(-i), nil
72+
}
73+
return int(i), nil
74+
}
75+
76+
// Int63n returns a non-negative random integer in [0,n) as a int64.
77+
func Int63n(n int64) (int64, error) {
78+
if n <= 0 {
79+
panic("invalid argument to Int63n")
80+
}
81+
82+
max := int64((1 << 63) - 1 - (1<<63)%uint64(n))
83+
i, err := Int63()
84+
if err != nil {
85+
return 0, err
86+
}
87+
88+
for i > max {
89+
i, err = Int63()
90+
if err != nil {
91+
return 0, err
92+
}
93+
}
94+
95+
return i % n, nil
96+
}
97+
98+
// Int31n returns a non-negative integer in [0,n) as a int32.
99+
func Int31n(n int32) (int32, error) {
100+
i, err := Uint32()
101+
if err != nil {
102+
return 0, err
103+
}
104+
105+
return UnbiasedModulo32(i, n)
106+
}
107+
108+
// UnbiasedModulo32 uniformly modulos v by n over a sufficiently large data
109+
// set, regenerating v if necessary. n must be > 0. All input bits in v must be
110+
// fully random, you cannot cast a random uint8/uint16 for input into this
111+
// function.
112+
func UnbiasedModulo32(v uint32, n int32) (int32, error) {
113+
prod := uint64(v) * uint64(n)
114+
low := uint32(prod)
115+
if low < uint32(n) {
116+
thresh := uint32(-n) % uint32(n)
117+
for low < thresh {
118+
var err error
119+
v, err = Uint32()
120+
if err != nil {
121+
return 0, err
122+
}
123+
prod = uint64(v) * uint64(n)
124+
low = uint32(prod)
125+
}
126+
}
127+
return int32(prod >> 32), nil
128+
}
129+
130+
// Intn returns a non-negative integer in [0,n) as a int.
131+
func Intn(n int) (int, error) {
132+
if n <= 0 {
133+
panic("n must be a positive nonzero number")
134+
}
135+
136+
if n <= 1<<31-1 {
137+
i, err := Int31n(int32(n))
138+
if err != nil {
139+
return 0, err
140+
}
141+
142+
return int(i), nil
143+
}
144+
145+
i, err := Int63n(int64(n))
146+
if err != nil {
147+
return 0, err
148+
}
149+
150+
return int(i), nil
151+
}
152+
153+
// Float64 returns a random number in [0.0,1.0) as a float64.
154+
func Float64() (float64, error) {
155+
again:
156+
i, err := Int63n(1 << 53)
157+
if err != nil {
158+
return 0, err
159+
}
160+
161+
f := (float64(i) / (1 << 53))
162+
if f == 1 {
163+
goto again
164+
}
165+
166+
return f, nil
167+
}
168+
169+
// Float32 returns a random number in [0.0,1.0) as a float32.
170+
func Float32() (float32, error) {
171+
again:
172+
i, err := Float64()
173+
if err != nil {
174+
return 0, err
175+
}
176+
177+
f := float32(i)
178+
if f == 1 {
179+
goto again
180+
}
181+
182+
return f, nil
183+
}
184+
185+
// Bool returns a random true/false value as a bool.
186+
func Bool() (bool, error) {
187+
i, err := Uint64()
188+
if err != nil {
189+
return false, err
190+
}
191+
192+
// True if the least significant bit is 1
193+
return i&1 == 1, nil
194+
}

0 commit comments

Comments
 (0)