Skip to content

Commit 8ea2299

Browse files
committed
updates
1 parent 76be46a commit 8ea2299

15 files changed

+424
-73
lines changed

go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ go 1.12
44

55
require (
66
github.com/Ulbora/dbinterface v1.0.5
7-
github.com/Ulbora/dbinterface_mysql v1.0.5
8-
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.0
7+
github.com/Ulbora/dbinterface_mysql v1.0.6
8+
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.1
99
github.com/gorilla/mux v1.7.3
1010
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
11+
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c // indirect
1112
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 // indirect
12-
google.golang.org/appengine v1.6.3 // indirect
13+
google.golang.org/appengine v1.6.5 // indirect
1314
)

go.sum

+12
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,18 @@ github.com/Ulbora/dbinterface_mysql v1.0.4 h1:LlpHjiE/dL+S/tiz6ZcXsAOwE2Ef6HyGbo
1212
github.com/Ulbora/dbinterface_mysql v1.0.4/go.mod h1:8XA1eoibXMbJNIfL5mvl7b77FZPSRewInYCNFRC65AQ=
1313
github.com/Ulbora/dbinterface_mysql v1.0.5 h1:tGPEBie+u4V6ob71ocy3e9XQ+mWkCCs8NbBvN8AzjoI=
1414
github.com/Ulbora/dbinterface_mysql v1.0.5/go.mod h1:8XA1eoibXMbJNIfL5mvl7b77FZPSRewInYCNFRC65AQ=
15+
github.com/Ulbora/dbinterface_mysql v1.0.6 h1:NBWVtCmz5VwqXLHPlYSg3Um3hTu9uSVFLIU3x0yT5+8=
16+
github.com/Ulbora/dbinterface_mysql v1.0.6/go.mod h1:8XA1eoibXMbJNIfL5mvl7b77FZPSRewInYCNFRC65AQ=
1517
github.com/gbrlsnchs/jwt v1.1.0 h1:Gh2CoXcIfk8/LxV8ks0GDOmUDCpVIrw8Oa34Ozmw/10=
1618
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.0 h1:7KeiSrO5puFH1+vdAdbpiie2TrNnkvFc/eOQzT60Z2k=
1719
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.0/go.mod h1:D1+3UtCYAJ1os1PI+zhTVEj6Tb+IHJvXjXKz83OstmM=
20+
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.1 h1:/opyYiz6HZoBVAU8ypemFOTtzuKFE9kiKstP6RYE1Z4=
21+
github.com/gbrlsnchs/jwt/v3 v3.0.0-rc.1/go.mod h1:JEL7eYb4ETfz9AYni+/4BV09MrMgGwju0G/k4XF8QMg=
1822
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
1923
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
2024
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
2125
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
26+
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
2227
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
2328
github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=
2429
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
@@ -31,9 +36,11 @@ golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACk
3136
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
3237
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM=
3338
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
39+
golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
3440
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
3541
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
3642
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
43+
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
3744
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
3845
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
3946
golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -53,7 +60,10 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
5360
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
5461
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
5562
golang.org/x/tools v0.0.0-20190710153321-831012c29e42/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
63+
golang.org/x/tools v0.0.0-20190918214516-5a1a30219888/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
64+
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
5665
golang.org/x/tools/gopls v0.1.3/go.mod h1:vrCQzOKxvuiZLjCKSmbbov04oeBQQOb4VQqwYK2PWIY=
66+
golang.org/x/tools/gopls v0.1.7/go.mod h1:PE3vTwT0ejw3a2L2fFgSJkxlEbA8Slbk+Lsy9hTmbG8=
5767
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
5868
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
5969
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
@@ -64,3 +74,5 @@ google.golang.org/appengine v1.6.2 h1:j8RI1yW0SkI+paT6uGwMlrMI/6zwYA6/CFil8rxOzG
6474
google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
6575
google.golang.org/appengine v1.6.3 h1:hvZejVcIxAKHR8Pq2gXaDggf6CWT1QEqO+JEBeOKCG8=
6676
google.golang.org/appengine v1.6.3/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
77+
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
78+
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=

managers/accessTokenManager.go

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package managers
2+
3+
/*
4+
Copyright (C) 2019 Ulbora Labs LLC. (www.ulboralabs.com)
5+
All rights reserved.
6+
7+
Copyright (C) 2019 Ken Williamson
8+
All rights reserved.
9+
10+
This program is free software: you can redistribute it and/or modify
11+
it under the terms of the GNU General Public License as published by
12+
the Free Software Foundation, either version 3 of the License, or
13+
(at your option) any later version.
14+
This program is distributed in the hope that it will be useful,
15+
but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
GNU General Public License for more details.
18+
You should have received a copy of the GNU General Public License
19+
along with this program. If not, see <http://www.gnu.org/licenses/>.
20+
21+
*/
22+
23+
//GenerateAccessToken GenerateAccessToken
24+
func (m *OauthManager) GenerateAccessToken(pl *Payload) string {
25+
var token string
26+
key := m.Db.GetAccessTokenKey()
27+
if key != "" {
28+
pl.SecretKey = key
29+
pl.Subject = pl.Grant
30+
pl.Issuer = tokenIssuer
31+
pl.Audience = tokenAudience
32+
token = m.GenerateJwtToken(pl)
33+
}
34+
return token
35+
}

managers/accessTokenManager_test.go

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package managers
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
db "github.com/Ulbora/dbinterface"
8+
mdb "github.com/Ulbora/dbinterface_mysql"
9+
10+
msdb "github.com/Ulbora/GoAuth2/mysqldb"
11+
odb "github.com/Ulbora/GoAuth2/oauth2database"
12+
)
13+
14+
func TestOauthManagerAccessToken_GenerateAccessToken(t *testing.T) {
15+
16+
var dbAu db.Database
17+
var odbAu odb.Oauth2DB
18+
var mydb mdb.MyDBMock
19+
mydb.Host = "localhost:3306"
20+
mydb.User = "admin"
21+
mydb.Password = "admin"
22+
mydb.Database = "ulbora_oauth2_server"
23+
dbAu = &mydb
24+
25+
var mTestRow db.DbRow
26+
mTestRow.Row = []string{}
27+
mydb.MockTestRow = &mTestRow
28+
29+
var mGetRow db.DbRow
30+
mGetRow.Row = []string{"2", "6g651dfg6gf6"}
31+
mydb.MockRow1 = &mGetRow
32+
33+
var moadb msdb.MySQLOauthDB
34+
moadb.DB = dbAu
35+
36+
odbAu = &moadb
37+
38+
var m OauthManager
39+
m.Db = odbAu
40+
var pl Payload
41+
pl.TokenType = codeGrantType
42+
pl.UserID = "tester1"
43+
pl.ClientID = 125
44+
pl.Subject = "code"
45+
//pl.Issuer = tokenIssuer
46+
//pl.Audience = tokenAudience
47+
pl.ExpiresInMinute = codeAccessTokenLifeInMinutes //(60 * time.Minute) => (60 * 60) => 3600 minutes => 1 hours
48+
pl.Grant = codeGrantType
49+
var ruList []RoleURI
50+
var ru1 RoleURI
51+
ru1.ClientRoleID = 1
52+
ru1.Role = "user"
53+
ru1.ClientAllowedURIID = 2
54+
ru1.ClientAllowedURI = "test.com"
55+
ru1.ClientID = 5
56+
ruList = append(ruList, ru1)
57+
58+
var ru2 RoleURI
59+
ru2.ClientRoleID = 12
60+
ru2.Role = "user"
61+
ru2.ClientAllowedURIID = 21
62+
ru2.ClientAllowedURI = "test2.com"
63+
ru2.ClientID = 5
64+
ruList = append(ruList, ru2)
65+
66+
pl.RoleURIs = ruList
67+
68+
pl.ScopeList = []string{"web", "rest"}
69+
//pl.SecretKey = rtk
70+
token := m.GenerateAccessToken(&pl)
71+
if token == "" {
72+
t.Fail()
73+
} else {
74+
fmt.Println("accessToken in test: ", token)
75+
}
76+
77+
valid, val := m.Validate(token, "6g651dfg6gf6")
78+
if !valid || val.UserID != "tester1" {
79+
t.Fail()
80+
}
81+
}

managers/authorizationManager.go

+61-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package managers
22

3-
import "fmt"
3+
import (
4+
"fmt"
5+
"time"
6+
7+
"github.com/Ulbora/GoAuth2/oauth2database"
8+
odb "github.com/Ulbora/GoAuth2/oauth2database"
9+
)
410

511
/*
612
Copyright (C) 2019 Ulbora Labs LLC. (www.ulboralabs.com)
@@ -63,14 +69,54 @@ func (m *OauthManager) AuthorizeAuthCode(ac *AuthCode) (success bool, authCode i
6369
break
6470
}
6571
}
72+
var scopeStrList []string
6673
fmt.Println("scopeFound: ", scopeFound)
74+
for _, s := range *scopeList {
75+
scopeStrList = append(scopeStrList, s.Scope)
76+
}
6777
if scopeFound {
6878
acdel := m.Db.DeleteAuthorizationCode(ac.ClientID, ac.UserID)
6979
fmt.Println("acdel: ", acdel)
7080
if acdel {
7181
//start here
7282
//generate refresh token
7383
//reKey := m.Db.GetRefreshTokenKey()
84+
refToken := m.GenerateRefreshToken(ac.ClientID, ac.UserID, codeGrantType)
85+
fmt.Println("refToken:", refToken)
86+
if refToken != "" {
87+
roleURIList := m.Db.GetClientRoleAllowedURIListByClientID(ac.ClientID)
88+
fmt.Println("roleURIList", roleURIList)
89+
var pl Payload
90+
pl.TokenType = accessTokenType
91+
pl.UserID = hashUser(ac.UserID)
92+
pl.ClientID = ac.ClientID
93+
pl.Subject = codeGrantType
94+
pl.ExpiresInMinute = codeAccessTokenLifeInMinutes //(60 * time.Minute) => (60 * 60) => 3600 minutes => 1 hours
95+
pl.Grant = codeGrantType
96+
pl.RoleURIs = *m.populateRoleURLList(roleURIList)
97+
pl.ScopeList = scopeStrList
98+
accessToken := m.GenerateAccessToken(&pl)
99+
fmt.Println("accessToken: ", accessToken)
100+
if accessToken != "" {
101+
var code odb.AuthorizationCode
102+
code.ClientID = ac.ClientID
103+
code.UserID = ac.UserID
104+
code.RandonAuthCode = generateRandonAuthCode()
105+
now := time.Now()
106+
code.Expires = now.Add(time.Minute * authCodeLifeInMinutes)
107+
108+
var aToken odb.AccessToken
109+
aToken.Token = accessToken
110+
aToken.Expires = now.Add(time.Minute * codeAccessTokenLifeInMinutes)
111+
112+
var rToken odb.RefreshToken
113+
rToken.Token = refToken
114+
acSuc, acID := m.Db.AddAuthorizationCode(&code, &aToken, &rToken, &scopeStrList)
115+
fmt.Println("acSuc: ", acSuc)
116+
fmt.Println("acID: ", acID)
117+
118+
}
119+
}
74120
}
75121
} else {
76122

@@ -83,3 +129,17 @@ func (m *OauthManager) AuthorizeAuthCode(ac *AuthCode) (success bool, authCode i
83129

84130
return success, authCode, authCodeString
85131
}
132+
133+
func (m *OauthManager) populateRoleURLList(rl *[]oauth2database.RoleURI) *[]RoleURI {
134+
var rtn []RoleURI
135+
for _, r := range *rl {
136+
var ru RoleURI
137+
ru.ClientRoleID = r.ClientRoleID
138+
ru.Role = r.Role
139+
ru.ClientAllowedURIID = r.ClientAllowedURIID
140+
ru.ClientAllowedURI = r.ClientAllowedURI
141+
ru.ClientID = r.ClientID
142+
rtn = append(rtn, ru)
143+
}
144+
return &rtn
145+
}

managers/authorizationManager_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,41 @@ func TestOauthManagerAuthCode_AuthorizeAuthCode(t *testing.T) {
7474
mGetRow4.Row = []string{"2", "testUri"}
7575
mydb.MockRow4 = &mGetRow4
7676

77+
var mGetRow5 db.DbRow
78+
mGetRow5.Row = []string{"2", "6g651dfg6gf6"}
79+
mydb.MockRow5 = &mGetRow5
80+
81+
var mGetRow6 db.DbRow
82+
mGetRow6.Row = []string{"2", "6g651dfg6gf6"}
83+
mydb.MockRow6 = &mGetRow6
84+
7785
mydb.MockDeleteSuccess1 = true
7886
mydb.MockDeleteSuccess2 = true
7987
mydb.MockDeleteSuccess3 = true
8088
mydb.MockDeleteSuccess4 = true
8189
mydb.MockDeleteSuccess5 = true
8290

91+
var rows5 [][]string
92+
row5 := []string{"4", "somerole", "1", "someurl", "2"}
93+
rows5 = append(rows5, row5)
94+
var dbrows5 db.DbRows
95+
dbrows5.Rows = rows5
96+
mydb.MockRows5 = &dbrows5
97+
98+
99+
mydb.MockInsertSuccess1 = true
100+
mydb.MockInsertID1 = 2
101+
102+
mydb.MockInsertSuccess2 = true
103+
mydb.MockInsertID2 = 2
104+
105+
mydb.MockInsertSuccess3 = true
106+
mydb.MockInsertID3 = 2
107+
108+
mydb.MockInsertSuccess4 = true
109+
mydb.MockInsertID4 = 22
110+
111+
83112
var moadb msdb.MySQLOauthDB
84113
moadb.DB = dbAu
85114

0 commit comments

Comments
 (0)