mirror of
https://github.com/nezhahq/nezha.git
synced 2025-02-02 01:28:13 -05:00
🐛 修复修改配置后重置为GitHub登录的问题
This commit is contained in:
parent
2adcc9cbc1
commit
fc0aee7c49
@ -1,7 +1,7 @@
|
|||||||
<div align="center" style="background-color: white">
|
<div align="center" style="background-color: white">
|
||||||
<img width="500" style="max-width:100%" src="https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.png" title="哪吒监控">
|
<img width="500" style="max-width:100%" src="https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.png" title="哪吒监控">
|
||||||
<br><br>
|
<br><br>
|
||||||
<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.6.6&logo=github&style=for-the-badge"> <img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github"> <img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge"> <img src="https://img.shields.io/badge/Installer-v0.5.0-brightgreen?style=for-the-badge&logo=linux">
|
<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.6.7&logo=github&style=for-the-badge"> <img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github"> <img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge"> <img src="https://img.shields.io/badge/Installer-v0.5.0-brightgreen?style=for-the-badge&logo=linux">
|
||||||
<br>
|
<br>
|
||||||
<p>:trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。</p>
|
<p>:trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,8 +7,6 @@ import (
|
|||||||
"github.com/naiba/nezha/model"
|
"github.com/naiba/nezha/model"
|
||||||
"github.com/naiba/nezha/pkg/mygin"
|
"github.com/naiba/nezha/pkg/mygin"
|
||||||
"github.com/naiba/nezha/service/dao"
|
"github.com/naiba/nezha/service/dao"
|
||||||
"golang.org/x/oauth2"
|
|
||||||
"golang.org/x/oauth2/github"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type guestPage struct {
|
type guestPage struct {
|
||||||
@ -27,24 +25,7 @@ func (gp *guestPage) serve() {
|
|||||||
|
|
||||||
gr.GET("/login", gp.login)
|
gr.GET("/login", gp.login)
|
||||||
|
|
||||||
var endPoint oauth2.Endpoint
|
|
||||||
|
|
||||||
if dao.Conf.Oauth2.Type == model.ConfigTypeGitee {
|
|
||||||
endPoint = oauth2.Endpoint{
|
|
||||||
AuthURL: "https://gitee.com/oauth/authorize",
|
|
||||||
TokenURL: "https://gitee.com/oauth/token",
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
endPoint = github.Endpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
oauth := &oauth2controller{
|
oauth := &oauth2controller{
|
||||||
oauth2Config: &oauth2.Config{
|
|
||||||
ClientID: dao.Conf.Oauth2.ClientID,
|
|
||||||
ClientSecret: dao.Conf.Oauth2.ClientSecret,
|
|
||||||
Scopes: []string{},
|
|
||||||
Endpoint: endPoint,
|
|
||||||
},
|
|
||||||
r: gr,
|
r: gr,
|
||||||
}
|
}
|
||||||
oauth.serve()
|
oauth.serve()
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/google/go-github/github"
|
"github.com/google/go-github/github"
|
||||||
GitHubAPI "github.com/google/go-github/github"
|
GitHubAPI "github.com/google/go-github/github"
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
|
GitHubOauth2 "golang.org/x/oauth2/github"
|
||||||
|
|
||||||
"github.com/naiba/nezha/model"
|
"github.com/naiba/nezha/model"
|
||||||
"github.com/naiba/nezha/pkg/mygin"
|
"github.com/naiba/nezha/pkg/mygin"
|
||||||
@ -19,8 +20,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type oauth2controller struct {
|
type oauth2controller struct {
|
||||||
oauth2Config *oauth2.Config
|
r gin.IRoutes
|
||||||
r gin.IRoutes
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (oa *oauth2controller) serve() {
|
func (oa *oauth2controller) serve() {
|
||||||
@ -28,38 +28,57 @@ func (oa *oauth2controller) serve() {
|
|||||||
oa.r.GET("/oauth2/callback", oa.callback)
|
oa.r.GET("/oauth2/callback", oa.callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (oa *oauth2controller) fillRedirectURL(c *gin.Context) {
|
func (oa *oauth2controller) getCommonOauth2Config(c *gin.Context) *oauth2.Config {
|
||||||
|
var endPoint oauth2.Endpoint
|
||||||
|
if dao.Conf.Oauth2.Type == model.ConfigTypeGitee {
|
||||||
|
endPoint = oauth2.Endpoint{
|
||||||
|
AuthURL: "https://gitee.com/oauth/authorize",
|
||||||
|
TokenURL: "https://gitee.com/oauth/token",
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
endPoint = GitHubOauth2.Endpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
return &oauth2.Config{
|
||||||
|
ClientID: dao.Conf.Oauth2.ClientID,
|
||||||
|
ClientSecret: dao.Conf.Oauth2.ClientSecret,
|
||||||
|
Scopes: []string{},
|
||||||
|
Endpoint: endPoint,
|
||||||
|
RedirectURL: oa.getRedirectURL(c),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (oa *oauth2controller) getRedirectURL(c *gin.Context) string {
|
||||||
schame := "http://"
|
schame := "http://"
|
||||||
if strings.HasPrefix(c.Request.Referer(), "https://") {
|
if strings.HasPrefix(c.Request.Referer(), "https://") {
|
||||||
schame = "https://"
|
schame = "https://"
|
||||||
}
|
}
|
||||||
oa.oauth2Config.RedirectURL = schame + c.Request.Host + "/oauth2/callback"
|
return schame + c.Request.Host + "/oauth2/callback"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (oa *oauth2controller) login(c *gin.Context) {
|
func (oa *oauth2controller) login(c *gin.Context) {
|
||||||
oa.fillRedirectURL(c)
|
|
||||||
state := utils.RandStringBytesMaskImprSrcUnsafe(6)
|
state := utils.RandStringBytesMaskImprSrcUnsafe(6)
|
||||||
dao.Cache.Set(fmt.Sprintf("%s%s", model.CacheKeyOauth2State, c.ClientIP()), state, 0)
|
dao.Cache.Set(fmt.Sprintf("%s%s", model.CacheKeyOauth2State, c.ClientIP()), state, 0)
|
||||||
url := oa.oauth2Config.AuthCodeURL(state, oauth2.AccessTypeOnline)
|
url := oa.getCommonOauth2Config(c).AuthCodeURL(state, oauth2.AccessTypeOnline)
|
||||||
c.Redirect(http.StatusFound, url)
|
c.Redirect(http.StatusFound, url)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (oa *oauth2controller) callback(c *gin.Context) {
|
func (oa *oauth2controller) callback(c *gin.Context) {
|
||||||
oa.fillRedirectURL(c)
|
|
||||||
var err error
|
var err error
|
||||||
// 验证登录跳转时的 State
|
// 验证登录跳转时的 State
|
||||||
state, ok := dao.Cache.Get(fmt.Sprintf("%s%s", model.CacheKeyOauth2State, c.ClientIP()))
|
state, ok := dao.Cache.Get(fmt.Sprintf("%s%s", model.CacheKeyOauth2State, c.ClientIP()))
|
||||||
if !ok || state.(string) != c.Query("state") {
|
if !ok || state.(string) != c.Query("state") {
|
||||||
err = errors.New("非法的登录方式")
|
err = errors.New("非法的登录方式")
|
||||||
}
|
}
|
||||||
|
oauth2Config := oa.getCommonOauth2Config(c)
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var otk *oauth2.Token
|
var otk *oauth2.Token
|
||||||
if err == nil {
|
if err == nil {
|
||||||
otk, err = oa.oauth2Config.Exchange(ctx, c.Query("code"))
|
otk, err = oauth2Config.Exchange(ctx, c.Query("code"))
|
||||||
}
|
}
|
||||||
var client *GitHubAPI.Client
|
var client *GitHubAPI.Client
|
||||||
if err == nil {
|
if err == nil {
|
||||||
oc := oa.oauth2Config.Client(ctx, otk)
|
oc := oauth2Config.Client(ctx, otk)
|
||||||
if dao.Conf.Oauth2.Type == "gitee" {
|
if dao.Conf.Oauth2.Type == "gitee" {
|
||||||
client, err = GitHubAPI.NewEnterpriseClient("https://gitee.com/api/v5/", "https://gitee.com/api/v5/", oc)
|
client, err = GitHubAPI.NewEnterpriseClient("https://gitee.com/api/v5/", "https://gitee.com/api/v5/", oc)
|
||||||
} else {
|
} else {
|
||||||
|
@ -8,11 +8,19 @@
|
|||||||
<label>站点标题</label>
|
<label>站点标题</label>
|
||||||
<input type="text" name="Title" placeholder="哪吒监控" value="{{.Conf.Site.Brand}}">
|
<input type="text" name="Title" placeholder="哪吒监控" value="{{.Conf.Site.Brand}}">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label>登录类型</label>
|
||||||
|
<select name="Oauth2Type">
|
||||||
|
<option value="github"{{if eq .Conf.Oauth2.Type "github"}} selected="selected"{{end}}>GitHub</option>
|
||||||
|
<option value="gitee"{{if eq .Conf.Oauth2.Type "gitee"}} selected="selected"{{end}}>Gitee</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label>管理员列表</label>
|
<label>管理员列表</label>
|
||||||
<input type="text" name="Admin" placeholder="1010,2020" value="{{.Conf.Oauth2.Admin}}">
|
<input type="text" name="Admin" placeholder="1010,2020" value="{{.Conf.Oauth2.Admin}}">
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
<label>前台主题</label>
|
||||||
<select name="Theme">
|
<select name="Theme">
|
||||||
<option value="default"{{if eq .Conf.Site.Theme "default"}} selected="selected"{{end}}>默认主题</option>
|
<option value="default"{{if eq .Conf.Site.Theme "default"}} selected="selected"{{end}}>默认主题</option>
|
||||||
<option value="daynight"{{if eq .Conf.Site.Theme "daynight"}} selected="selected"{{end}}>JackieSung DayNight</option>
|
<option value="daynight"{{if eq .Conf.Site.Theme "daynight"}} selected="selected"{{end}}>JackieSung DayNight</option>
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
pb "github.com/naiba/nezha/proto"
|
pb "github.com/naiba/nezha/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Version = "v0.6.6" // !!记得修改 README 中的 badge 版本!!
|
var Version = "v0.6.7" // !!记得修改 README 中的 badge 版本!!
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SnapshotDelay = 3
|
SnapshotDelay = 3
|
||||||
|
Loading…
Reference in New Issue
Block a user