Skip to content

Commit 6c7b644

Browse files
committed
docs: update docs about insecure skip verify
1 parent f1c0f8d commit 6c7b644

File tree

9 files changed

+509
-485
lines changed

9 files changed

+509
-485
lines changed

api/openai/openai.go

Lines changed: 119 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package openai
22

33
import (
4-
"context"
5-
"crypto/tls"
6-
"fmt"
7-
"github.com/0xJacky/Nginx-UI/api"
8-
"github.com/0xJacky/Nginx-UI/internal/chatbot"
9-
"github.com/0xJacky/Nginx-UI/settings"
10-
"github.com/gin-gonic/gin"
11-
"github.com/pkg/errors"
12-
"github.com/sashabaranov/go-openai"
13-
"io"
14-
"net/http"
15-
"net/url"
4+
"context"
5+
"crypto/tls"
6+
"fmt"
7+
"github.com/0xJacky/Nginx-UI/api"
8+
"github.com/0xJacky/Nginx-UI/internal/chatbot"
9+
"github.com/0xJacky/Nginx-UI/settings"
10+
"github.com/gin-gonic/gin"
11+
"github.com/pkg/errors"
12+
"github.com/sashabaranov/go-openai"
13+
"io"
14+
"net/http"
15+
"net/url"
1616
)
1717

1818
const ChatGPTInitPrompt = `You are a assistant who can help users write and optimise the configurations of Nginx,
@@ -22,111 +22,111 @@ Later the language environment depends on the user message.
2222
The first reply should involve the key information of the file and ask user what can you help them.`
2323

2424
func MakeChatCompletionRequest(c *gin.Context) {
25-
var json struct {
26-
Filepath string `json:"filepath"`
27-
Messages []openai.ChatCompletionMessage `json:"messages"`
28-
}
29-
30-
if !api.BindAndValid(c, &json) {
31-
return
32-
}
33-
34-
messages := []openai.ChatCompletionMessage{
35-
{
36-
Role: openai.ChatMessageRoleSystem,
37-
Content: ChatGPTInitPrompt,
38-
},
39-
}
40-
41-
messages = append(messages, json.Messages...)
42-
43-
if json.Filepath != "" {
44-
messages = chatbot.ChatCompletionWithContext(json.Filepath, messages)
45-
}
46-
47-
// SSE server
48-
c.Writer.Header().Set("Content-Type", "text/event-stream; charset=utf-8")
49-
c.Writer.Header().Set("Cache-Control", "no-cache")
50-
c.Writer.Header().Set("Connection", "keep-alive")
51-
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
52-
53-
config := openai.DefaultConfig(settings.OpenAISettings.Token)
54-
55-
if settings.OpenAISettings.Proxy != "" {
56-
proxyUrl, err := url.Parse(settings.OpenAISettings.Proxy)
57-
if err != nil {
58-
c.Stream(func(w io.Writer) bool {
59-
c.SSEvent("message", gin.H{
60-
"type": "error",
61-
"content": err.Error(),
62-
})
63-
return false
64-
})
65-
return
66-
}
67-
transport := &http.Transport{
68-
Proxy: http.ProxyURL(proxyUrl),
69-
TLSClientConfig: &tls.Config{InsecureSkipVerify: settings.ServerSettings.InsecureSkipVerify},
70-
}
71-
config.HTTPClient = &http.Client{
72-
Transport: transport,
73-
}
74-
}
75-
76-
if settings.OpenAISettings.BaseUrl != "" {
77-
config.BaseURL = settings.OpenAISettings.BaseUrl
78-
}
79-
80-
openaiClient := openai.NewClientWithConfig(config)
81-
ctx := context.Background()
82-
83-
req := openai.ChatCompletionRequest{
84-
Model: settings.OpenAISettings.Model,
85-
Messages: messages,
86-
Stream: true,
87-
}
88-
stream, err := openaiClient.CreateChatCompletionStream(ctx, req)
89-
if err != nil {
90-
fmt.Printf("CompletionStream error: %v\n", err)
91-
c.Stream(func(w io.Writer) bool {
92-
c.SSEvent("message", gin.H{
93-
"type": "error",
94-
"content": err.Error(),
95-
})
96-
return false
97-
})
98-
return
99-
}
100-
defer stream.Close()
101-
msgChan := make(chan string)
102-
go func() {
103-
defer close(msgChan)
104-
for {
105-
response, err := stream.Recv()
106-
if errors.Is(err, io.EOF) {
107-
fmt.Println()
108-
return
109-
}
110-
111-
if err != nil {
112-
fmt.Printf("Stream error: %v\n", err)
113-
return
114-
}
115-
116-
message := fmt.Sprintf("%s", response.Choices[0].Delta.Content)
117-
118-
msgChan <- message
119-
}
120-
}()
121-
122-
c.Stream(func(w io.Writer) bool {
123-
if m, ok := <-msgChan; ok {
124-
c.SSEvent("message", gin.H{
125-
"type": "message",
126-
"content": m,
127-
})
128-
return true
129-
}
130-
return false
131-
})
25+
var json struct {
26+
Filepath string `json:"filepath"`
27+
Messages []openai.ChatCompletionMessage `json:"messages"`
28+
}
29+
30+
if !api.BindAndValid(c, &json) {
31+
return
32+
}
33+
34+
messages := []openai.ChatCompletionMessage{
35+
{
36+
Role: openai.ChatMessageRoleSystem,
37+
Content: ChatGPTInitPrompt,
38+
},
39+
}
40+
41+
messages = append(messages, json.Messages...)
42+
43+
if json.Filepath != "" {
44+
messages = chatbot.ChatCompletionWithContext(json.Filepath, messages)
45+
}
46+
47+
// SSE server
48+
c.Writer.Header().Set("Content-Type", "text/event-stream; charset=utf-8")
49+
c.Writer.Header().Set("Cache-Control", "no-cache")
50+
c.Writer.Header().Set("Connection", "keep-alive")
51+
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
52+
53+
config := openai.DefaultConfig(settings.OpenAISettings.Token)
54+
55+
if settings.OpenAISettings.Proxy != "" {
56+
proxyUrl, err := url.Parse(settings.OpenAISettings.Proxy)
57+
if err != nil {
58+
c.Stream(func(w io.Writer) bool {
59+
c.SSEvent("message", gin.H{
60+
"type": "error",
61+
"content": err.Error(),
62+
})
63+
return false
64+
})
65+
return
66+
}
67+
transport := &http.Transport{
68+
Proxy: http.ProxyURL(proxyUrl),
69+
TLSClientConfig: &tls.Config{InsecureSkipVerify: settings.ServerSettings.InsecureSkipVerify},
70+
}
71+
config.HTTPClient = &http.Client{
72+
Transport: transport,
73+
}
74+
}
75+
76+
if settings.OpenAISettings.BaseUrl != "" {
77+
config.BaseURL = settings.OpenAISettings.BaseUrl
78+
}
79+
80+
openaiClient := openai.NewClientWithConfig(config)
81+
ctx := context.Background()
82+
83+
req := openai.ChatCompletionRequest{
84+
Model: settings.OpenAISettings.Model,
85+
Messages: messages,
86+
Stream: true,
87+
}
88+
stream, err := openaiClient.CreateChatCompletionStream(ctx, req)
89+
if err != nil {
90+
fmt.Printf("CompletionStream error: %v\n", err)
91+
c.Stream(func(w io.Writer) bool {
92+
c.SSEvent("message", gin.H{
93+
"type": "error",
94+
"content": err.Error(),
95+
})
96+
return false
97+
})
98+
return
99+
}
100+
defer stream.Close()
101+
msgChan := make(chan string)
102+
go func() {
103+
defer close(msgChan)
104+
for {
105+
response, err := stream.Recv()
106+
if errors.Is(err, io.EOF) {
107+
fmt.Println()
108+
return
109+
}
110+
111+
if err != nil {
112+
fmt.Printf("Stream error: %v\n", err)
113+
return
114+
}
115+
116+
message := fmt.Sprintf("%s", response.Choices[0].Delta.Content)
117+
118+
msgChan <- message
119+
}
120+
}()
121+
122+
c.Stream(func(w io.Writer) bool {
123+
if m, ok := <-msgChan; ok {
124+
c.SSEvent("message", gin.H{
125+
"type": "message",
126+
"content": m,
127+
})
128+
return true
129+
}
130+
return false
131+
})
132132
}

docs/guide/config-server.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,10 @@ Nginx UI will not create a system initial acme user, this means you can't apply
145145
- Type: `string`
146146

147147
Use this option to customize the name of local server to be displayed in the environment indicator.
148+
149+
## InsecureSkipVerify
150+
151+
- Version:`>= v2.0.0-beta.30`
152+
- Type: `bool`
153+
154+
This option is used to skip the verification of the certificate of servers when Nginx UI sends requests to them.

docs/guide/env.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,25 @@ Applicable for version v2.0.0-beta.23 and above.
33

44
## Server
55

6-
| Configuration Setting | Environment Variable |
7-
| ----------------------------- | ------------------------------------- |
8-
| HttpPort | NGINX_UI_SERVER_HTTP_PORT |
9-
| RunMode | NGINX_UI_SERVER_RUN_MODE |
10-
| JwtSecret | NGINX_UI_SERVER_JWT_SECRET |
11-
| HTTPChallengePort | NGINX_UI_SERVER_HTTP_CHALLENGE_PORT |
12-
| StartCmd | NGINX_UI_SERVER_START_CMD |
13-
| Database | NGINX_UI_SERVER_DATABASE |
14-
| CADir | NGINX_UI_SERVER_CA_DIR |
15-
| GithubProxy | NGINX_UI_SERVER_GITHUB_PROXY |
16-
| NodeSecret | NGINX_UI_SERVER_NODE_SECRET |
17-
| Demo | NGINX_UI_SERVER_DEMO |
18-
| PageSize | NGINX_UI_SERVER_PAGE_SIZE |
19-
| HttpHost | NGINX_UI_SERVER_HTTP_HOST |
20-
| CertRenewalInterval | NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL |
21-
| RecursiveNameservers | NGINX_UI_SERVER_RECURSIVE_NAMESERVERS |
22-
| SkipInstallation | NGINX_UI_SERVER_SKIP_INSTALLATION |
23-
| Name | NGINX_UI_SERVER_NAME |
6+
| Configuration Setting | Environment Variable |
7+
|-----------------------|---------------------------------------|
8+
| HttpPort | NGINX_UI_SERVER_HTTP_PORT |
9+
| RunMode | NGINX_UI_SERVER_RUN_MODE |
10+
| JwtSecret | NGINX_UI_SERVER_JWT_SECRET |
11+
| HTTPChallengePort | NGINX_UI_SERVER_HTTP_CHALLENGE_PORT |
12+
| StartCmd | NGINX_UI_SERVER_START_CMD |
13+
| Database | NGINX_UI_SERVER_DATABASE |
14+
| CADir | NGINX_UI_SERVER_CA_DIR |
15+
| GithubProxy | NGINX_UI_SERVER_GITHUB_PROXY |
16+
| NodeSecret | NGINX_UI_SERVER_NODE_SECRET |
17+
| Demo | NGINX_UI_SERVER_DEMO |
18+
| PageSize | NGINX_UI_SERVER_PAGE_SIZE |
19+
| HttpHost | NGINX_UI_SERVER_HTTP_HOST |
20+
| CertRenewalInterval | NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL |
21+
| RecursiveNameservers | NGINX_UI_SERVER_RECURSIVE_NAMESERVERS |
22+
| SkipInstallation | NGINX_UI_SERVER_SKIP_INSTALLATION |
23+
| Name | NGINX_UI_SERVER_NAME |
24+
| InsecureSkipVerify | NGINX_UI_SERVER_INSECURE_SKIP_VERIFY |
2425

2526
## Nginx
2627

docs/zh_CN/guide/config-server.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,10 @@ Nginx UI 将不会创建系统初始的 acme 用户,这意味着您无法在
132132
- 类型:`string`
133133

134134
使用此选项自定义本地服务器的名称,以在环境指示器中显示。
135+
136+
## InsecureSkipVerify
137+
138+
- 版本:`>= v2.0.0-beta.30`
139+
- 类型: `bool`
140+
141+
此选项用于配置 Nginx UI 服务器在与其他服务器建立 TLS 连接时是否跳过证书验证。

docs/zh_CN/guide/env.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,25 @@
33

44
## Server
55

6-
| Configuration Setting | Environment Variable |
7-
| ----------------------------- | ------------------------------------- |
8-
| HttpPort | NGINX_UI_SERVER_HTTP_PORT |
9-
| RunMode | NGINX_UI_SERVER_RUN_MODE |
10-
| JwtSecret | NGINX_UI_SERVER_JWT_SECRET |
11-
| HTTPChallengePort | NGINX_UI_SERVER_HTTP_CHALLENGE_PORT |
12-
| StartCmd | NGINX_UI_SERVER_START_CMD |
13-
| Database | NGINX_UI_SERVER_DATABASE |
14-
| CADir | NGINX_UI_SERVER_CA_DIR |
15-
| GithubProxy | NGINX_UI_SERVER_GITHUB_PROXY |
16-
| NodeSecret | NGINX_UI_SERVER_NODE_SECRET |
17-
| Demo | NGINX_UI_SERVER_DEMO |
18-
| PageSize | NGINX_UI_SERVER_PAGE_SIZE |
19-
| HttpHost | NGINX_UI_SERVER_HTTP_HOST |
20-
| CertRenewalInterval | NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL |
21-
| RecursiveNameservers | NGINX_UI_SERVER_RECURSIVE_NAMESERVERS |
22-
| SkipInstallation | NGINX_UI_SERVER_SKIP_INSTALLATION |
23-
| Name | NGINX_UI_SERVER_NAME |
6+
| Configuration Setting | Environment Variable |
7+
|-------------------------| ------------------------------------- |
8+
| HttpPort | NGINX_UI_SERVER_HTTP_PORT |
9+
| RunMode | NGINX_UI_SERVER_RUN_MODE |
10+
| JwtSecret | NGINX_UI_SERVER_JWT_SECRET |
11+
| HTTPChallengePort | NGINX_UI_SERVER_HTTP_CHALLENGE_PORT |
12+
| StartCmd | NGINX_UI_SERVER_START_CMD |
13+
| Database | NGINX_UI_SERVER_DATABASE |
14+
| CADir | NGINX_UI_SERVER_CA_DIR |
15+
| GithubProxy | NGINX_UI_SERVER_GITHUB_PROXY |
16+
| NodeSecret | NGINX_UI_SERVER_NODE_SECRET |
17+
| Demo | NGINX_UI_SERVER_DEMO |
18+
| PageSize | NGINX_UI_SERVER_PAGE_SIZE |
19+
| HttpHost | NGINX_UI_SERVER_HTTP_HOST |
20+
| CertRenewalInterval | NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL |
21+
| RecursiveNameservers | NGINX_UI_SERVER_RECURSIVE_NAMESERVERS |
22+
| SkipInstallation | NGINX_UI_SERVER_SKIP_INSTALLATION |
23+
| Name | NGINX_UI_SERVER_NAME |
24+
| InsecureSkipVerify | NGINX_UI_SERVER_INSECURE_SKIP_VERIFY |
2425

2526
## Nginx
2627

docs/zh_TW/guide/config-server.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,10 @@ Nginx UI 將不會創建系統初始的 acme 使用者,這意味著您無法
133133
- 類型:`string`
134134

135135
使用此選項自定義本地伺服器的名稱,以在環境指示器中顯示。
136+
137+
## InsecureSkipVerify
138+
139+
- 版本:`>= v2.0.0-beta.30`
140+
- 類型: `bool`
141+
142+
此選項用於配置 Nginx UI 伺服器在與其他伺服器建立 TLS 連接時是否跳過證書驗證。

0 commit comments

Comments
 (0)