Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
28b1a56
Merge pull request #18 from ablecloud-team/master
gigs4014 Apr 12, 2022
610a6b5
컨테이너 생서용 도커파일 추가
gigs4014 May 19, 2022
bc429c5
Merge branch 'master' of https://github.com/gigs4014/ablestack-desktop
gigs4014 May 19, 2022
57f9401
정책 부분 개발
gigs4014 Jun 10, 2022
b027175
Merge branch '#179' of https://github.com/gigs4014/ablestack-desktop …
gigs4014 Jun 10, 2022
396deeb
Merge branch '#179'
gigs4014 Jun 10, 2022
3282a38
Update main.go
gigs4014 Jul 19, 2022
412ed40
필요없는 스키마 파일 삭제
gigs4014 Jul 20, 2022
0759dfd
works-db 스키마 최신 버전 적용
gigs4014 Jul 20, 2022
05e4526
기본 가상머신에 works-api 구성하는 shell 파일 최초 작성
gigs4014 Jul 20, 2022
7fbdc26
사용자 인증 기능 추가
gigs4014 Jul 20, 2022
97535a9
정책을 AD 서버에 등록 하는 기능 개발
gigs4014 Jul 20, 2022
bd12fdf
비밀번호 변경 라우터 추가
gigs4014 Jul 20, 2022
0e3a9b6
데이터 베이스 구조 생성
gigs4014 Jul 20, 2022
462f707
워크스페이스 정책 설정 변경
gigs4014 Jul 20, 2022
2e204ed
정책 설정 변경
gigs4014 Jul 20, 2022
5298bf0
jenkins 컨테이너 생성용 파일 추가
gigs4014 Jul 20, 2022
8d2fade
스웨거 관련 파일 삭제
gigs4014 Jul 20, 2022
7b48894
gitignore 파일 수정
gigs4014 Jul 20, 2022
42d13a8
정책 서비스 수정
gigs4014 Jul 26, 2022
72efb15
소스코드 정리
gigs4014 Jul 26, 2022
74299fa
핸드쉐이크시 gpupdate 방식 변경
gigs4014 Jul 26, 2022
4860ced
핸드쉐이커 도중 에러 발생 수정
gigs4014 Jul 26, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
works-api/works-api
works-shell/works-shell.exe
works-shell/works-shell
.idea/
works-api/docs/docs.go
works-api/docs/swagger.json
works-api/docs/swagger.yaml
works-api/docs/*
Works-ui/node_modules/*
works-api/.idea/*.xml
works-api/.idea/**/*.xml
samba-ad.zip
*.exe
*.log
*.msi
*.zip
works-api/docs/docs.go
75 changes: 75 additions & 0 deletions works-api/authController.go
Original file line number Diff line number Diff line change
Expand Up @@ -500,3 +500,78 @@ func delDeleteUserToGroup(c *gin.Context) {
"result": result,
})
}

// patchPasswordUser godoc
// @Summary 사용자 비밀번호를 변경 하는 API
// @Description 사용자 비밀번호를 변경하는 API 입니다.
// @Accept json
// @Tags User
// @Produce json
// @Param userName path string true "사용자 계정"
// @Param oldPassword path string true "기존 비밀번호"
// @Param userName path string true "새로운 비밀번호"
// @Router /api/v1/passwordUser/:userName [patch]
// @Success 200 {object} map[string]interface{}
func patchPasswordUser(c *gin.Context) {
userName := c.Param("userName")
oldPassword := c.PostForm("oldPassword")
newPassword := c.PostForm("newPassword")
//log.Infof("deleteDCUserResult [%v], err [%v]", deleteDCUserResult, err)
//result["status"] = http.StatusOK
resultLogin, err := postLogin(userName, oldPassword)
result := map[string]interface{}{}
if err != nil {
log.Errorf("result [%v], error [%v]", result, err)
result["message"] = "Communication with the DC server failed."
c.JSON(http.StatusBadRequest, gin.H{
"result": result,
})
return
} else {

var res map[string]interface{}
json.NewDecoder(resultLogin.Body).Decode(&res)

user := User{}
userInfo, _ := json.Marshal(res)
json.Unmarshal(userInfo, &user)
loginBool := user.Login
if loginBool == false {
result["message"] = " "
c.JSON(http.StatusNotFound, gin.H{
"result": result,
})
return
} else if loginBool == true {
userPasswordChange(userName, newPassword)
user.ClusterName = os.Getenv("ClusterName")
user.DomainName = os.Getenv("SambaDomain")
c.JSON(http.StatusOK, gin.H{
"result": user,
})
return
}
}
c.JSON(http.StatusNoContent, gin.H{
"result": "user password change failure",
})
}

// patchPasswordAdmin godoc
// @Summary 사용자 비밀번호를 변경 하는 API
// @Description 사용자 비밀번호를 변경하는 API 입니다.
// @Accept json
// @Tags User
// @Produce json
// @Param userName path string true "사용자 계정"
// @Param userName path string true "새로운 비밀번호"
// @Router /api/v1/passwordAdmin/:userName [patch]
// @Success 200 {object} map[string]interface{}
func patchPasswordAdmin(c *gin.Context) {
userName := c.Param("userName")
newPassword := c.PostForm("newPassword")
userPasswordChange(userName, newPassword)
c.JSON(http.StatusOK, gin.H{
"result": "password change result",
})
}
135 changes: 135 additions & 0 deletions works-api/authDao.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
package main

import (
"database/sql"
"net/http"
"os"
)

type User struct {
Id string `json:"id"`
Uuid string `json:"uuid"`
UserName string `json:"user_name"`
CreateDate string `json:"create_date"`
Password string `json:"password"`
Removed string `json:"removed"`
C string `json:"c"` // 국가코드 영문
Cn string `json:"cn"` // 유저아이디
Co string `json:"co"` // 국가코드 영문
CountryCode string `json:"countryCode"` // 국가코드 숫자
DistinguishedName string `json:"distinguishedName"` // 고유이름
GivenName string `json:"givenName"` // 사용자 이름
Mail string `json:"mail"` // e-mail
MemberOf string `json:"memberOf"` // 소속 그룹
Name string `json:"name"` // 사용자 계정
SAMAccountName string `json:"sAMAccountName"` // 사용자 계정
Sn string `json:"sn"` // 사용자 성
TelephoneNumber string `json:"telephoneNumber"` // 전화번호
Title string `json:"title"` // 직책
UserPrincipalName string `json:"userPrincipalName"` // 사용자 도메인 계정정보
Department string `json:"department"` // 사용자 부서
ClusterName string `json:"clusterName"`
DomainName string `json:"domainName"`
Login bool `json:"login"`
UserNameDc string `json:"username"`
Groups []string `json:"groups"`
IsAdmin bool `json:"isAdmin"`
Token string `json:"token"`
}

func insertUserDB(user User) map[string]interface{} {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
resultReturn := map[string]interface{}{}
if err != nil {
log.Error("DB connect error")
log.Error(err)
resultReturn["message"] = "DB connect error"
}
defer db.Close()
result, err := db.Exec("INSERT INTO users(uuid, user_name, password, create_date) VALUES (?, ?, ?, now())", getUuid(), user.Cn, user.Password)
if err != nil {
log.Errorf("유저를 DB 등록중에러가 발생했습니다. [%v]", err)
resultReturn["message"] = "An error occurred while registering Async Job."
resultReturn["status"] = SQLQueryError
}
n, _ := result.RowsAffected()
if n == 1 {
log.Info("유저가 정상적으로 등록되었습니다.")
resultReturn["status"] = http.StatusOK
resultReturn["message"] = "The async job has been successfully registered."
}
return resultReturn
}

func selectUserDBDetail(userName string) User {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
if err != nil {
log.Error("DB connect error")
log.Error(err)
}
defer db.Close()
log.Info("DB connect success")
user := User{}
err = db.QueryRow("SELECT uuid, user_name, create_date, password FROM users WHERE removed IS NULL AND user_name = ? ORDER BY id DESC ", userName).Scan(
&user.Uuid, &user.UserName, &user.CreateDate, &user.Password)
if err != nil {
log.Error("user select query FAILED")
log.Error(err.Error())
}

return user
}

func deleteUserDB(userName string) map[string]interface{} {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
if err != nil {
log.Error("DB connect error")
log.Error(err)
}
defer db.Close()
log.Info("DB connect success")
returnValue := map[string]interface{}{}
result, err := db.Exec("UPDATE users SET removed=NOW() WHERE user_name=? ", userName)
if err != nil {
log.Errorf("유저 삭제중 에러가 발생했습니다.\n")
log.Errorf("%v\n", err)
returnValue["status"] = BaseErrorCode
returnValue["message"] = "An error occurred while registering Async Job."
}
n, _ := result.RowsAffected()
if n == 1 {
log.Infof("%v\n", result)
log.Infof("유저가 정상적으로 삭제 되였습니다.\n")
returnValue["status"] = http.StatusOK
returnValue["message"] = "async job has been updated normally."
}

return returnValue
}

func updateUserPassword(userName string, newPassword string) DatabaseReturnValue {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
if err != nil {
log.Error("DB connect error")
log.Error(err)
}
defer db.Close()
log.Info("DB connect success")
databaseReturnValue := DatabaseReturnValue{}
result, err := db.Exec("UPDATE users SET password=? WHERE user_name=? ", newPassword, userName)
if err != nil {
log.Errorf("유저 비밀번호 업데이트 중 에러가 발생했습니다.\n")
log.Errorf("%v\n", err)
databaseReturnValue.status = BaseErrorCode
databaseReturnValue.message = "An error occurred while registering Async Job."
}
n, _ := result.RowsAffected()
if n == 1 {
log.Infof("%v\n", result)
log.Infof("유저 비밀번호 업데이트가 정상적으로 되였습니다.\n")
databaseReturnValue.status = http.StatusOK
databaseReturnValue.message = "async job has been updated normally."
}

return databaseReturnValue
}
84 changes: 5 additions & 79 deletions works-api/authService.go
Original file line number Diff line number Diff line change
@@ -1,84 +1,10 @@
package main

import (
"database/sql"
"net/http"
"os"
)
import "net/http"

type User struct {
Id string `json:"id"`
Uuid string `json:"uuid"`
UserName string `json:"user_name"`
CreateDate string `json:"create_date"`
Password string `json:"password"`
Removed string `json:"removed"`
C string `json:"c"` // 국가코드 영문
Cn string `json:"cn"` // 유저아이디
Co string `json:"co"` // 국가코드 영문
CountryCode string `json:"countryCode"` // 국가코드 숫자
DistinguishedName string `json:"distinguishedName"` // 고유이름
GivenName string `json:"givenName"` // 사용자 이름
Mail string `json:"mail"` // e-mail
MemberOf string `json:"memberOf"` // 소속 그룹
Name string `json:"name"` // 사용자 계정
SAMAccountName string `json:"sAMAccountName"` // 사용자 계정
Sn string `json:"sn"` // 사용자 성
TelephoneNumber string `json:"telephoneNumber"` // 전화번호
Title string `json:"title"` // 직책
UserPrincipalName string `json:"userPrincipalName"` // 사용자 도메인 계정정보
Department string `json:"department"` // 사용자 부서
ClusterName string `json:"clusterName"`
DomainName string `json:"domainName"`
Login bool `json:"login"`
UserNameDc string `json:"username"`
Groups []string `json:"groups"`
IsAdmin bool `json:"isAdmin"`
Token string `json:"token"`
}

func selectUserDBDetail(userName string) User {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
if err != nil {
log.Error("DB connect error")
log.Error(err)
}
defer db.Close()
log.Info("DB connect success")
user := User{}
err = db.QueryRow("SELECT uuid, user_name, create_date, password FROM users WHERE removed IS NULL AND user_name = ? ORDER BY id DESC ", userName).Scan(
&user.Uuid, &user.UserName, &user.CreateDate, &user.Password)
if err != nil {
log.Error("user select query FAILED")
log.Error(err.Error())
}

return user
}

func deleteUserDB(userName string) map[string]interface{} {
db, err := sql.Open(os.Getenv("MysqlType"), os.Getenv("DbInfo"))
if err != nil {
log.Error("DB connect error")
log.Error(err)
}
defer db.Close()
log.Info("DB connect success")
returnValue := map[string]interface{}{}
result, err := db.Exec("UPDATE users SET removed=NOW() WHERE user_name=? ", userName)
if err != nil {
log.Errorf("유저 삭제중 에러가 발생했습니다.\n")
log.Errorf("%v\n", err)
returnValue["status"] = BaseErrorCode
returnValue["message"] = "An error occurred while registering Async Job."
func userPasswordChange(userName string, newPassword string) {
databaseReturnValue := updateUserPassword(userName, newPassword)
if databaseReturnValue.status == http.StatusOK {
patchUserPassword(userName, newPassword)
}
n, _ := result.RowsAffected()
if n == 1 {
log.Infof("%v\n", result)
log.Infof("유저가 정상적으로 삭제 되였습니다.\n")
returnValue["status"] = http.StatusOK
returnValue["message"] = "async job has been updated normally."
}

return returnValue
}
Loading