Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 30, 2024. It is now read-only.
/coder-v1-cliPublic archive

Commit99468a5

Browse files
author
Russtopia
committed
Add custom prefix devurl
1 parentc8cec8e commit99468a5

File tree

2 files changed

+96
-38
lines changed

2 files changed

+96
-38
lines changed

‎cmd/coder/urls.go

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net/http"
77
"os"
8+
"regexp"
89
"strconv"
910
"strings"
1011
"text/tabwriter"
@@ -21,7 +22,7 @@ type urlsCmd struct{}
2122
typeDevURLstruct {
2223
IDstring`json:"id"`
2324
URLstring`json:"url"`
24-
Portstring`json:"port"`
25+
Portint`json:"port"`
2526
Accessstring`json:"access"`
2627
}
2728

@@ -35,47 +36,52 @@ var urlAccessLevel = map[string]string{
3536

3637
funcportIsValid(portstring)bool {
3738
p,err:=strconv.ParseUint(port,10,16)
38-
ifp<1 {
39+
ifp<1||p>65535{
3940
// port 0 means 'any free port', which we don't support
4041
err=strconv.ErrRange
4142
}
4243
iferr!=nil {
43-
fmt.Println("Invalid port")
44+
flog.Error("Invalid port")
4445
}
4546
returnerr==nil
4647
}
4748

4849
funcaccessLevelIsValid(levelstring)bool {
4950
_,ok:=urlAccessLevel[level]
5051
if!ok {
51-
fmt.Println("Invalid access level")
52+
flog.Error("Invalid access level")
5253
}
5354
returnok
5455
}
5556

5657
typecreateSubCmdstruct {
57-
accessstring
58+
accessstring
59+
urlnamestring
5860
}
5961

6062
func (sub*createSubCmd)RegisterFlags(fl*pflag.FlagSet) {
6163
fl.StringVarP(&sub.access,"access","a","private","[private | org | authed | public] set devurl access")
64+
fl.StringVarP(&sub.urlname,"name","n","","devurl name")
6265
}
6366

6467
func (subcreateSubCmd)Spec() cli.CommandSpec {
6568
return cli.CommandSpec{
6669
Name:"create",
67-
Usage:"<env name> <port> [--access <level>]",
70+
Usage:"<env name> <port> [--access <level>] [--name <name>]",
6871
Desc:"create/update a devurl for external access",
6972
}
7073
}
7174

75+
vardevURLNameValidRx=regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9]{0,63}$")
76+
7277
// Run creates or updates a devURL, specified by env ID and port
7378
// (fl.Arg(0) and fl.Arg(1)), with access level (fl.Arg(2)) on
7479
// the cemanager.
7580
func (subcreateSubCmd)Run(fl*pflag.FlagSet) {
7681
envName:=fl.Arg(0)
7782
port:=fl.Arg(1)
78-
access:=fl.Arg(2)
83+
name:=fl.Arg(2)
84+
access:=fl.Arg(3)
7985

8086
ifenvName=="" {
8187
exitUsage(fl)
@@ -84,26 +90,35 @@ func (sub createSubCmd) Run(fl *pflag.FlagSet) {
8490
if!portIsValid(port) {
8591
exitUsage(fl)
8692
}
93+
portNum,_:=strconv.Atoi(port)
8794

8895
access=strings.ToUpper(sub.access)
8996
if!accessLevelIsValid(access) {
9097
exitUsage(fl)
9198
}
9299

100+
name=sub.urlname
101+
ifname!=""&&!devURLNameValidRx.MatchString(name) {
102+
flog.Error("update devurl: name must be < 64 chars in length, begin with a letter and only contain letters or digits.")
103+
return
104+
}
93105
entClient:=requireAuth()
94106

95107
env:=findEnv(entClient,envName)
96108

97-
_,found:=devURLID(port,urlList(envName))
109+
found,urlID:=devURLID(portNum,urlList(envName))
98110
iffound {
99-
fmt.Printf("Updating devurl for port %v\n",port)
111+
flog.Info("Updating devurl for port %v",port)
112+
err:=entClient.UpdateDevURL(env.ID,urlID,portNum,name,access)
113+
iferr!=nil {
114+
flog.Error("update devurl: %s",err.Error())
115+
}
100116
}else {
101-
fmt.Printf("Adding devurl for port %v\n",port)
102-
}
103-
104-
err:=entClient.UpsertDevURL(env.ID,port,access)
105-
iferr!=nil {
106-
flog.Error("upsert devurl: %s",err.Error())
117+
flog.Info("Adding devurl for port %v",port)
118+
err:=entClient.InsertDevURL(env.ID,portNum,name,access)
119+
iferr!=nil {
120+
flog.Error("insert devurl: %s",err.Error())
121+
}
107122
}
108123
}
109124

@@ -117,15 +132,16 @@ func (sub delSubCmd) Spec() cli.CommandSpec {
117132
}
118133
}
119134

120-
// devURLID returns the ID of a devURL, given the env name and port.
121-
// ("", false) is returned if no match is found.
122-
funcdevURLID(portstring,urls []DevURL) (string,bool) {
135+
// devURLID returns the ID of a devURL, given the env name and port
136+
// from a list of DevURL records.
137+
// (false, "") is returned if no match is found.
138+
funcdevURLID(portint,urls []DevURL) (bool,string) {
123139
for_,url:=rangeurls {
124140
ifurl.Port==port {
125-
returnurl.ID,true
141+
returntrue,url.ID
126142
}
127143
}
128-
return"",false
144+
returnfalse,""
129145
}
130146

131147
// Run deletes a devURL, specified by env ID and port, from the cemanager.
@@ -140,14 +156,14 @@ func (sub delSubCmd) Run(fl *pflag.FlagSet) {
140156
if!portIsValid(port) {
141157
exitUsage(fl)
142158
}
159+
portNum,_:=strconv.Atoi(port)
143160

144161
entClient:=requireAuth()
145-
146162
env:=findEnv(entClient,envName)
147163

148-
urlID,found:=devURLID(port,urlList(envName))
164+
found,urlID:=devURLID(portNum,urlList(envName))
149165
iffound {
150-
fmt.Printf("Deleting devurl for port %v\n",port)
166+
flog.Info("Deleting devurl for port %v",port)
151167
}else {
152168
flog.Fatal("No devurl found for port %v",port)
153169
}
@@ -193,7 +209,7 @@ func urlList(envName string) []DevURL {
193209
}
194210

195211
iflen(devURLs)==0 {
196-
fmt.Printf("no dev urls were found for environment: %s\n",envName)
212+
flog.Error("no dev urls were found for environment: %s",envName)
197213
}
198214

199215
returndevURLs
@@ -207,7 +223,7 @@ func (cmd urlsCmd) Run(fl *pflag.FlagSet) {
207223

208224
w:=tabwriter.NewWriter(os.Stdout,0,0,1,' ',tabwriter.TabIndent)
209225
for_,devURL:=rangedevURLs {
210-
fmt.Fprintf(w,"%s\t%s\t%s\n",devURL.URL,devURL.Port,devURL.Access)
226+
fmt.Fprintf(w,"%s\t%d\t%s\n",devURL.URL,devURL.Port,devURL.Access)
211227
}
212228
w.Flush()
213229
}

‎internal/entclient/devurl.go

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,23 @@ package entclient
33
import (
44
"fmt"
55
"net/http"
6+
7+
"golang.org/x/xerrors"
68
)
79

10+
typedelDevURLRequeststruct {
11+
EnvIDstring`json:"environment_id"`
12+
DevURLIDstring`json:"url_id"`
13+
}
14+
15+
// DelDevURL deletes a devurl from the specified environment.
816
func (cClient)DelDevURL(envID,urlIDstring)error {
917
reqString:="/api/environments/%s/devurls/%s"
10-
reqUrl:=fmt.Sprintf(reqString,envID,urlID)
18+
reqURL:=fmt.Sprintf(reqString,envID,urlID)
1119

12-
res,err:=c.request("DELETE",reqUrl,map[string]string{
13-
"environment_id":envID,
14-
"url_id":urlID,
20+
res,err:=c.request("DELETE",reqURL,delDevURLRequest{
21+
EnvID:envID,
22+
DevURLID:urlID,
1523
})
1624
iferr!=nil {
1725
returnerr
@@ -24,22 +32,56 @@ func (c Client) DelDevURL(envID, urlID string) error {
2432
returnnil
2533
}
2634

27-
func (cClient)UpsertDevURL(envID,port,accessstring)error {
35+
typecreateDevURLRequeststruct {
36+
EnvIDstring`json:"environment_id"`
37+
Portint`json:"port"`
38+
Accessstring`json:"access"`
39+
Namestring`json:"name"`
40+
}
41+
42+
// InsertDevURL inserts a new devurl into the specified environment.
43+
func (cClient)InsertDevURL(envIDstring,portint,name,accessstring)error {
2844
reqString:="/api/environments/%s/devurls"
29-
reqUrl:=fmt.Sprintf(reqString,envID)
45+
reqURL:=fmt.Sprintf(reqString,envID)
3046

31-
res,err:=c.request("POST",reqUrl,map[string]string{
32-
"environment_id":envID,
33-
"port":port,
34-
"access":access,
47+
res,err:=c.request("POST",reqURL,createDevURLRequest{
48+
EnvID:envID,
49+
Port:port,
50+
Access:access,
51+
Name:name,
3552
})
53+
ifres!=nil&&res.StatusCode==http.StatusConflict {
54+
returnxerrors.Errorf("Failed to create devurl. Check that the port and name are unique.")
55+
}
3656
iferr!=nil {
3757
returnerr
3858
}
59+
returnnil
60+
}
3961

40-
ifres.StatusCode!=http.StatusOK {
41-
returnbodyError(res)
42-
}
62+
typeupdateDevURLRequeststruct {
63+
EnvIDstring`json:"environment_id"`
64+
Portint`json:"port"`
65+
Accessstring`json:"access"`
66+
Namestring`json:"name"`
67+
}
4368

69+
// UpdateDevURL updates an existing devurl in the specified environment.
70+
func (cClient)UpdateDevURL(envID,urlIDstring,portint,name,accessstring)error {
71+
reqString:="/api/environments/%s/devurls/%s"
72+
reqURL:=fmt.Sprintf(reqString,envID,urlID)
73+
74+
res,err:=c.request("PUT",reqURL,updateDevURLRequest{
75+
EnvID:envID,
76+
Port:port,
77+
Access:access,
78+
Name:name,
79+
})
80+
ifres!=nil&&res.StatusCode==http.StatusConflict {
81+
returnxerrors.Errorf("Failed to update devurl. Check that the port and name are unique.")
82+
}
83+
iferr!=nil {
84+
returnerr
85+
}
4486
returnnil
4587
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp