Skip to content

Commit e2acfc5

Browse files
committedApr 17, 2018
Mammoth UI Cleanup. LinkedIn certifier. Identity URLs.
1 parent a2ce2ef commit e2acfc5

28 files changed

+1445
-872
lines changed
 

‎issuer-services/_linkedin.js

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// https://developer.linkedin.com/docs/oauth2
2+
3+
var OAuth = require('oauth').OAuth2
4+
var HTML = require('./html')
5+
var superagent = require('superagent')
6+
7+
const ClaimType = 9 // Has LinkedIn
8+
9+
module.exports = function facebook(app, { web3, linkedInApp, baseUrl }) {
10+
const redirect_uri = `${baseUrl}/linkedin-auth-response`
11+
12+
var linkedInOAuth = new OAuth(
13+
linkedInApp.client_id,
14+
linkedInApp.secret,
15+
'https://www.linkedin.com',
16+
'/oauth/v2/authorization',
17+
'/oauth/v2/accessToken',
18+
null
19+
)
20+
21+
app.get('/linkedin-auth', (req, res) => {
22+
if (!req.query.target) {
23+
res.send('No target identity contract provided')
24+
return
25+
}
26+
if (!req.query.issuer) {
27+
res.send('No issuer identity contract provided')
28+
return
29+
}
30+
31+
req.session.targetIdentity = req.query.target
32+
req.session.issuer = req.query.issuer
33+
req.session.state = web3.utils.randomHex(8)
34+
35+
var authURL = linkedInOAuth.getAuthorizeUrl({
36+
redirect_uri,
37+
scope: ['r_basicprofile', 'r_emailaddress'],
38+
state: req.session.state,
39+
response_type: 'code'
40+
})
41+
42+
res.redirect(authURL)
43+
})
44+
45+
app.get(
46+
'/linkedin-auth-response',
47+
(req, res, next) => {
48+
linkedInOAuth.getOAuthAccessToken(
49+
req.query.code,
50+
{
51+
redirect_uri,
52+
grant_type: 'authorization_code'
53+
},
54+
function(e, access_token, refresh_token, results) {
55+
if (e) {
56+
next(e)
57+
} else if (results.error) {
58+
next(results.error)
59+
} else {
60+
req.access_token = access_token
61+
next()
62+
}
63+
}
64+
)
65+
},
66+
(req, res, next) => {
67+
superagent
68+
.get('https://api.linkedin.com/v1/people/~')
69+
.set('Authorization', `Bearer ${req.access_token}`)
70+
.query({ format: 'json' })
71+
.then(response => {
72+
req.linkedInUser = response.body
73+
next()
74+
})
75+
},
76+
async (req, res) => {
77+
// var data = JSON.stringify({ user_id: req.githubUser.id })
78+
var rawData = 'Verified OK'
79+
var hashedData = web3.utils.soliditySha3(rawData)
80+
var hashed = web3.utils.soliditySha3(
81+
req.session.targetIdentity,
82+
ClaimType,
83+
hashedData
84+
)
85+
req.signedData = await web3.eth.accounts.sign(
86+
hashed,
87+
linkedInApp.claimSignerKey
88+
)
89+
90+
res.send(
91+
HTML(`
92+
<div class="mb-2">Successfully signed claim:</div>
93+
<div class="mb-2"><b>Issuer:</b> ${req.session.issuer}</div>
94+
<div class="mb-2"><b>Target:</b> ${req.session.targetIdentity}</div>
95+
<div class="mb-2"><b>Data:</b> ${rawData}</div>
96+
<div class="mb-2"><b>Signature:</b> ${req.signedData.signature}</div>
97+
<div class="mb-2"><b>Hash:</b> ${req.signedData.messageHash}</div>
98+
<div><button class="btn btn-primary" onclick="window.done()">OK</button></div>
99+
<script>
100+
window.done = function() {
101+
window.opener.postMessage('signed-data:${
102+
req.signedData.signature
103+
}:${req.signedData.messageHash}:${ClaimType}', '*')
104+
}
105+
</script>`)
106+
)
107+
}
108+
)
109+
}

‎issuer-services/app.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var facebook = require('./_facebook')
77
var twitter = require('./_twitter')
88
var github = require('./_github')
99
var google = require('./_google')
10+
var linkedin = require('./_linkedin')
1011

1112
try {
1213
var Config = require('./config.json')
@@ -16,7 +17,6 @@ try {
1617
}
1718

1819
Config.web3 = new Web3(Config.provider)
19-
Config.baseUrl = 'http://localhost:3001'
2020

2121
const app = express()
2222
app.use(
@@ -36,6 +36,7 @@ facebook(app, Config)
3636
twitter(app, Config)
3737
github(app, Config)
3838
google(app, Config)
39+
linkedin(app, Config)
3940

4041
const PORT = process.env.PORT || 3001
4142
app.listen(PORT, () => {

‎issuer-services/config.json.eg

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"claimSignerKey": "0x0000000000000000000000000000000000000000000000000000000000000000"
1313
},
1414
"githubApp": {
15-
"key": "00000000000000000000",
15+
"client_id": "00000000000000000000",
1616
"secret": "0000000000000000000000000000000000000000",
1717
"claimSignerKey": "0x0000000000000000000000000000000000000000000000000000000000000000"
1818
},
@@ -21,6 +21,11 @@
2121
"secret": "000000000000000000000000",
2222
"claimSignerKey": "0x0000000000000000000000000000000000000000000000000000000000000000"
2323
},
24+
"linkedInApp": {
25+
"client_id": "00000000000000",
26+
"secret": "0000000000000000",
27+
"claimSignerKey": "0x0000000000000000000000000000000000000000000000000000000000000000"
28+
},
2429
"simpleApp": {
2530
"claimSignerKey": "0x0000000000000000000000000000000000000000000000000000000000000000"
2631
}

‎issuer-services/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var google = require('./_google')
66
var github = require('./_github')
77
var simple = require('./_simple')
88
var twitter = require('./_twitter')
9+
var linkedin = require('./_linkedin')
910

1011
module.exports = function (app) {
1112
Config.web3 = new Web3()
@@ -14,4 +15,5 @@ module.exports = function (app) {
1415
github(app, Config)
1516
simple(app, Config)
1617
twitter(app, Config)
18+
linkedin(app, Config)
1719
}

‎issuer-services/standalone.js

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var facebook = require('./_facebook')
1212
var google = require('./_google')
1313
var github = require('./_github')
1414
var twitter = require('./_twitter')
15+
var linkedin = require('./_linkedin')
1516

1617
var Web3 = require('./public/vendor/web3.min')
1718

@@ -37,6 +38,7 @@ facebook(app, Config)
3738
google(app, Config)
3839
github(app, Config)
3940
twitter(app, Config)
41+
linkedin(app, Config)
4042

4143
const PORT = process.env.PORT || 3001
4244
app.listen(PORT, () => {

0 commit comments

Comments
 (0)
Please sign in to comment.