Skip to content

Commit 3270011

Browse files
committed
Refactoring and fixed admin making admin request
1 parent b275ad5 commit 3270011

File tree

3 files changed

+99
-75
lines changed

3 files changed

+99
-75
lines changed

app/adminHandlers.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func IsAdmin(w http.ResponseWriter, r *http.Request) (isAdminFlag bool) {
1919

2020
var admin Admin
2121

22-
if DB.db.Debug().Where("email = ?", googTok.Email).First(&admin).RecordNotFound() {
22+
if DB.db.Where("email = ?", googTok.Email).First(&admin).RecordNotFound() {
2323
return false
2424
} else {
2525
return true
@@ -50,13 +50,13 @@ func AcceptAdminRequest(w http.ResponseWriter, r *http.Request, ps httprouter.Pa
5050

5151
// gives admin privilege to user by adding entry to admins table
5252
// while deleting entry from admin_requests table
53-
if DB.db.Debug().Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request).RecordNotFound() {
53+
if DB.db.Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request).RecordNotFound() {
5454
response = Response{
5555
false,
5656
"Unable to accept, request does not exists",
5757
}
5858
} else {
59-
DB.db.Debug().Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request)
59+
DB.db.Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request)
6060
admin = Admin{
6161
Name: admin_request.Name,
6262
Email: admin_request.Email,
@@ -68,6 +68,7 @@ func AcceptAdminRequest(w http.ResponseWriter, r *http.Request, ps httprouter.Pa
6868
true,
6969
"Request accepted, new admin created",
7070
}
71+
log.Printf("New admin created. Name: %v | Email: %v", admin.Name, admin.Email)
7172
}
7273

7374
} else {
@@ -98,13 +99,13 @@ func RejectAdminRequest(w http.ResponseWriter, r *http.Request, ps httprouter.Pa
9899
if IsAdmin(w, r) == true {
99100

100101
// deletes entry from admin_requests table
101-
if DB.db.Debug().Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request).RecordNotFound() {
102+
if DB.db.Where("admin_request_id = ?", ps.ByName("id")).First(&admin_request).RecordNotFound() {
102103
response = Response{
103104
false,
104105
"Unable to delete, request does not exists",
105106
}
106107
} else {
107-
DB.db.Debug().Where("admin_request_id = ?", ps.ByName("id")).Delete(&admin_request)
108+
DB.db.Where("admin_request_id = ?", ps.ByName("id")).Delete(&admin_request)
108109
response = Response{
109110
true,
110111
"Admin request successfully rejected",
@@ -139,13 +140,14 @@ func RevokeAdminPrivilege(w http.ResponseWriter, r *http.Request, ps httprouter.
139140
if IsAdmin(w, r) == true {
140141

141142
// deletes entry from admins table
142-
if DB.db.Debug().Where("admin_id = ?", ps.ByName("id")).First(&admin).RecordNotFound() {
143+
if DB.db.Where("admin_id = ?", ps.ByName("id")).First(&admin).RecordNotFound() {
143144
response = Response{
144145
false,
145146
"Unable to delete, admin does not exists",
146147
}
147148
} else {
148-
DB.db.Debug().Where("admin_id = ?", ps.ByName("id")).Delete(&admin)
149+
log.Printf("An admin's privileges revoked. Name: %v | Email: %v", admin.Name, admin.Email)
150+
DB.db.Where("admin_id = ?", ps.ByName("id")).Delete(&admin)
149151
response = Response{
150152
true,
151153
"Admin privileges successfully revoked",
@@ -197,7 +199,7 @@ func AcceptAccessRequest(w http.ResponseWriter, r *http.Request, ps httprouter.P
197199
// gives access privilege to user by adding entry to accesses table
198200
// executes shell script which copies user's ssh key to desired dest server over ssh
199201
// while deleting entry from access_requests table
200-
if DB.db.Debug().Where("access_request_id = ?", ps.ByName("id")).First(&access_request).RecordNotFound() {
202+
if DB.db.Where("access_request_id = ?", ps.ByName("id")).First(&access_request).RecordNotFound() {
201203
response = Response{
202204
false,
203205
"Unable to accept, request does not exists",
@@ -215,7 +217,7 @@ func AcceptAccessRequest(w http.ResponseWriter, r *http.Request, ps httprouter.P
215217

216218
} else {
217219

218-
DB.db.Debug().Where("access_request_id = ?", ps.ByName("id")).First(&access_request)
220+
DB.db.Where("access_request_id = ?", ps.ByName("id")).First(&access_request)
219221

220222
// execute shell script to copy ssh key to specified server over ssh
221223
sh.Command("./scripts/copy_key_to_server.sh", receive.IP, access_request.SshKey).Run()
@@ -234,6 +236,8 @@ func AcceptAccessRequest(w http.ResponseWriter, r *http.Request, ps httprouter.P
234236
"Request accepted, new access created",
235237
}
236238

239+
log.Printf("New access granted. Name: %v | Email: %v | To: %v", access.Name, access.Email, access.IP)
240+
237241
}
238242

239243
}
@@ -266,13 +270,13 @@ func RejectAccessRequest(w http.ResponseWriter, r *http.Request, ps httprouter.P
266270
if IsAdmin(w, r) == true {
267271

268272
// deletes entry from access_requests table
269-
if DB.db.Debug().Where("access_request_id = ?", ps.ByName("id")).First(&access_request).RecordNotFound() {
273+
if DB.db.Where("access_request_id = ?", ps.ByName("id")).First(&access_request).RecordNotFound() {
270274
response = Response{
271275
false,
272276
"Unable to delete, request does not exists",
273277
}
274278
} else {
275-
DB.db.Debug().Where("access_request_id = ?", ps.ByName("id")).Delete(&access_request)
279+
DB.db.Where("access_request_id = ?", ps.ByName("id")).Delete(&access_request)
276280
response = Response{
277281
true,
278282
"Access request successfully rejected",
@@ -308,7 +312,7 @@ func RevokeAccessPrivilege(w http.ResponseWriter, r *http.Request, ps httprouter
308312

309313
// revokes access privilege to user by deleting entry from accesses table
310314
// executes shell script which removes user's ssh key from intended dest server over ssh
311-
if DB.db.Debug().Where("access_id = ?", ps.ByName("id")).First(&access).RecordNotFound() {
315+
if DB.db.Where("access_id = ?", ps.ByName("id")).First(&access).RecordNotFound() {
312316
response = Response{
313317
false,
314318
"Unable to delete, access does not exists",
@@ -326,7 +330,9 @@ func RevokeAccessPrivilege(w http.ResponseWriter, r *http.Request, ps httprouter
326330

327331
} else {
328332

329-
DB.db.Debug().Where("access_id = ?", ps.ByName("id")).Delete(&access)
333+
log.Printf("Access privilege revoked. Name: %v | Email: %v | From: %v", access.Name, access.Email, access.IP)
334+
335+
DB.db.Where("access_id = ?", ps.ByName("id")).Delete(&access)
330336

331337
// execute shell script to remove ssh key from the specified server
332338
sh.Command("./scripts/remove_key_from_server.sh", access.IP, access.SshKey).Run()

app/config.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package app
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"github.com/jinzhu/gorm"
7+
_ "github.com/jinzhu/gorm/dialects/sqlite"
8+
"golang.org/x/oauth2"
9+
"golang.org/x/oauth2/google"
10+
"io/ioutil"
11+
"log"
12+
)
13+
14+
/*
15+
** contains init function to cofigure OAuth2 and Mysql
16+
*/
17+
18+
var confOAuth2 *oauth2.Config
19+
20+
func init() {
21+
22+
// doesen't needs to be called explicitly
23+
// configures OAuth2 and Mysql
24+
25+
var credOAuth2 CredentialOAuth2
26+
var credMysql CredentialMysql
27+
28+
fileOAuth2, err := ioutil.ReadFile("./credOAuth2.json")
29+
if err != nil {
30+
log.Fatalf("Error while reading oauth2 config file.\nError: %v\n", err.Error())
31+
}
32+
json.Unmarshal(fileOAuth2, &credOAuth2)
33+
34+
confOAuth2 = &oauth2.Config{
35+
36+
// presently set through account [email protected]
37+
ClientID: credOAuth2.Cid,
38+
ClientSecret: credOAuth2.Csecret,
39+
40+
// change redirect on production server
41+
RedirectURL: "http://127.0.0.1:8080/options",
42+
43+
Scopes: []string{
44+
"https://www.googleapis.com/auth/userinfo.email",
45+
},
46+
Endpoint: google.Endpoint,
47+
}
48+
49+
fileMysql, err := ioutil.ReadFile("./credMysql.json")
50+
if err != nil {
51+
log.Fatalf("Error while reading oauth2 config file.\nError: %v\n", err.Error())
52+
}
53+
json.Unmarshal(fileMysql, &credMysql)
54+
55+
connectionString := fmt.Sprintf("%s:%s@/%s?charset=utf8&parseTime=True&loc=Local",
56+
credMysql.DBUsername,
57+
credMysql.DBPassword,
58+
credMysql.DBName)
59+
60+
DB.db, err = gorm.Open("mysql", connectionString)
61+
if err != nil {
62+
log.Fatal("Could not open database : ", err.Error())
63+
}
64+
65+
state = randState()
66+
67+
}

app/handlers.go

Lines changed: 13 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@ import (
44
"crypto/rand"
55
"encoding/base64"
66
"encoding/json"
7-
"fmt"
8-
"github.com/jinzhu/gorm"
97
_ "github.com/jinzhu/gorm/dialects/sqlite"
108
"github.com/julienschmidt/httprouter"
119
"golang.org/x/oauth2"
12-
"golang.org/x/oauth2/google"
1310
"html/template"
1411
"io/ioutil"
1512
"log"
@@ -21,59 +18,8 @@ import (
2118
** contains fuctions to interact with OAuth2
2219
*/
2320

24-
var confOAuth2 *oauth2.Config
25-
2621
var state string
2722

28-
func init() {
29-
30-
// doesen't needs to be called explicitly
31-
// configures OAuth2 and Mysql
32-
33-
var credOAuth2 CredentialOAuth2
34-
var credMysql CredentialMysql
35-
36-
fileOAuth2, err := ioutil.ReadFile("./credOAuth2.json")
37-
if err != nil {
38-
log.Fatalf("Error while reading oauth2 config file.\nError: %v\n", err.Error())
39-
}
40-
json.Unmarshal(fileOAuth2, &credOAuth2)
41-
42-
confOAuth2 = &oauth2.Config{
43-
44-
// presently set through account [email protected]
45-
ClientID: credOAuth2.Cid,
46-
ClientSecret: credOAuth2.Csecret,
47-
48-
// change redirect on production server
49-
RedirectURL: "http://127.0.0.1:8080/options",
50-
51-
Scopes: []string{
52-
"https://www.googleapis.com/auth/userinfo.email",
53-
},
54-
Endpoint: google.Endpoint,
55-
}
56-
57-
fileMysql, err := ioutil.ReadFile("./credMysql.json")
58-
if err != nil {
59-
log.Fatalf("Error while reading oauth2 config file.\nError: %v\n", err.Error())
60-
}
61-
json.Unmarshal(fileMysql, &credMysql)
62-
63-
connectionString := fmt.Sprintf("%s:%s@/%s?charset=utf8&parseTime=True&loc=Local",
64-
credMysql.DBUsername,
65-
credMysql.DBPassword,
66-
credMysql.DBName)
67-
68-
DB.db, err = gorm.Open("mysql", connectionString)
69-
if err != nil {
70-
log.Fatal("Could not open database : ", err.Error())
71-
}
72-
73-
state = randState()
74-
75-
}
76-
7723
func randState() string {
7824

7925
// generates random string
@@ -202,7 +148,7 @@ func MakeAccessRequest(w http.ResponseWriter, r *http.Request, _ httprouter.Para
202148
var accessRequest AccessRequest
203149

204150
// register new request if it does not already exists
205-
notFoundErr := DB.db.Debug().Where("email = ?", googTok.Email).First(&accessRequest).Error
151+
notFoundErr := DB.db.Where("email = ?", googTok.Email).First(&accessRequest).Error
206152
if notFoundErr != nil {
207153
accessRequest = AccessRequest{
208154
Name: googTok.Name,
@@ -253,10 +199,20 @@ func MakeAdminRequest(w http.ResponseWriter, r *http.Request, _ httprouter.Param
253199
} else {
254200

255201
var adminRequest AdminRequest
202+
var admin Admin
256203

257204
// register new request if it does not already exists
258-
notFoundErr := DB.db.Debug().Where("email = ?", googTok.Email).First(&adminRequest).Error
259-
if notFoundErr != nil {
205+
if DB.db.Where("email = ?", googTok.Email).First(&adminRequest).RecordNotFound() == false {
206+
response = Response{
207+
false,
208+
"Request already exists",
209+
}
210+
} else if DB.db.Where("email = ?", googTok.Email).First(&admin).RecordNotFound() == false {
211+
response = Response{
212+
false,
213+
"User is already an admin",
214+
}
215+
} else {
260216
adminRequest = AdminRequest{
261217
Name: googTok.Name,
262218
Email: googTok.Email,
@@ -268,11 +224,6 @@ func MakeAdminRequest(w http.ResponseWriter, r *http.Request, _ httprouter.Param
268224
true,
269225
"New request sent",
270226
}
271-
} else {
272-
response = Response{
273-
false,
274-
"Request already exists",
275-
}
276227
}
277228

278229
}

0 commit comments

Comments
 (0)