Skip to content
This repository was archived by the owner on Mar 31, 2025. It is now read-only.

Commit 10db2ed

Browse files
committed
fix: disable sending token when auth is disabled
1 parent 1e36be1 commit 10db2ed

File tree

7 files changed

+140
-48
lines changed

7 files changed

+140
-48
lines changed

.prettierrc

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"semi": true,
3+
"singleQuote": true,
4+
"trailingComma": "none",
5+
"printWidth": 80,
6+
"quoteProps": "as-needed",
7+
"arrowParens": "always",
8+
"tabWidth": 2,
9+
"overrides": [
10+
{
11+
"files": "*.sol",
12+
"options": {
13+
"printWidth": 120,
14+
"tabWidth": 2,
15+
"useTabs": false,
16+
"singleQuote": false,
17+
"explicitTypes": "always"
18+
}
19+
},
20+
{
21+
"files": "*.json",
22+
"options": {
23+
"trailingComma": "none"
24+
}
25+
},
26+
{
27+
"files": "*.babelrc",
28+
"options": {
29+
"trailingComma": "none"
30+
}
31+
},
32+
{
33+
"files": "*.yaml",
34+
"options": {
35+
"singleQuote": false,
36+
"tabWidth": 2
37+
}
38+
}
39+
]
40+
}

app/Explorer.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { authroutes } from './rest/authroutes';
2020
import { dbroutes } from './rest/dbroutes';
2121
import { platformroutes } from './rest/platformroutes';
2222
import swaggerDocument from './swagger.json';
23+
import { authCheckMiddleware } from './middleware/auth-check';
2324

2425
/**
2526
*
@@ -57,7 +58,11 @@ export class Explorer {
5758

5859
this.app.use(passport.initialize());
5960
if (process.env.NODE_ENV !== 'production') {
60-
this.app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
61+
this.app.use(
62+
'/api-docs',
63+
swaggerUi.serve,
64+
swaggerUi.setup(swaggerDocument)
65+
);
6166
}
6267
this.app.use(compression());
6368
this.persistence = null;
@@ -110,7 +115,7 @@ export class Explorer {
110115
// Make sure that platform instance will be referred after its initialization
111116
passport.use('local-login', localLoginStrategy(platform));
112117

113-
// this.app.use('/api', authCheckMiddleware);
118+
this.app.use('/api', authCheckMiddleware(platform));
114119

115120
const authrouter = Express.Router();
116121

app/middleware/auth-check.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,25 @@
44

55
import * as jwt from 'jsonwebtoken';
66
import config from '../explorerconfig.json';
7+
import { Platform } from '../platform/fabric/Platform';
78

89
/**
910
* The Auth Checker middleware function.
1011
*/
11-
export const authCheckMiddleware = (req, res, next) => {
12+
export const authCheckMiddleware = (platform: Platform) => (req, res, next) => {
13+
const networkId = req.headers['X-Network-ID'];
14+
if (
15+
networkId &&
16+
!platform
17+
.getClient(networkId)
18+
.instance.fabricGateway.fabricConfig.getEnableAuthentication()
19+
) {
20+
req.requestUserId = 'dummy-user';
21+
req.network = networkId;
22+
23+
return next();
24+
}
25+
1226
if (!req.headers.authorization) {
1327
return res.status(401).end();
1428
}

client/src/components/Login/Login.js

+16-12
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { shape, string } from 'prop-types';
2626

2727
import { authSelectors, authOperations } from '../../state/redux/auth';
2828

29-
const styles = theme => ({
29+
const styles = (theme) => ({
3030
container: {
3131
width: 'auto',
3232
display: 'block', // Fix IE 11 issue.
@@ -114,7 +114,7 @@ export class Login extends Component {
114114
}));
115115
}
116116

117-
handleChange = event => {
117+
handleChange = (event) => {
118118
const { target } = event;
119119
const value = target.type === 'checkbox' ? target.checked : target.value;
120120
const { name } = target;
@@ -125,9 +125,9 @@ export class Login extends Component {
125125
if (name === 'network') {
126126
const { networks } = this.state;
127127
newState.authEnabled = (
128-
networks.find(n => n.name === value) || {}
128+
networks.find((n) => n.name === value) || {}
129129
).authEnabled;
130-
newState.network.id = (networks.find(n => n.name === value) || {}).id;
130+
newState.network.id = (networks.find((n) => n.name === value) || {}).id;
131131
}
132132

133133
this.setState(newState);
@@ -142,7 +142,8 @@ export class Login extends Component {
142142
user: authEnabled ? user : 'dummy-user',
143143
password: authEnabled ? password : 'dummy-password'
144144
},
145-
network
145+
network,
146+
authEnabled
146147
);
147148

148149
this.setState(() => ({ info }));
@@ -153,7 +154,7 @@ export class Login extends Component {
153154
}
154155
}
155156

156-
submitForm = async e => {
157+
submitForm = async (e) => {
157158
e.preventDefault();
158159

159160
const { user, password, network } = this.state;
@@ -217,7 +218,7 @@ export class Login extends Component {
217218
label="Network"
218219
disabled={isLoading}
219220
value={network.value}
220-
onChange={e => this.handleChange(e)}
221+
onChange={(e) => this.handleChange(e)}
221222
margin="normal"
222223
InputProps={{
223224
startAdornment: (
@@ -228,7 +229,7 @@ export class Login extends Component {
228229
shrink: 'true'
229230
}}
230231
>
231-
{networks.map(item => (
232+
{networks.map((item) => (
232233
<MenuItem key={item.name} value={item.name}>
233234
{item.name}
234235
</MenuItem>
@@ -251,7 +252,7 @@ export class Login extends Component {
251252
label="User"
252253
disabled={isLoading}
253254
value={user.value}
254-
onChange={e => this.handleChange(e)}
255+
onChange={(e) => this.handleChange(e)}
255256
margin="normal"
256257
InputProps={{
257258
startAdornment: (
@@ -281,7 +282,7 @@ export class Login extends Component {
281282
label="Password"
282283
disabled={isLoading}
283284
value={password.value}
284-
onChange={e => this.handleChange(e)}
285+
onChange={(e) => this.handleChange(e)}
285286
margin="normal"
286287
InputProps={{
287288
startAdornment: (
@@ -305,7 +306,10 @@ export class Login extends Component {
305306
</FormHelperText>
306307
)}
307308
{info && (
308-
<FormHelperText id="component-error-text" className={classes.errortext}>
309+
<FormHelperText
310+
id="component-error-text"
311+
className={classes.errortext}
312+
>
309313
{info.message}
310314
</FormHelperText>
311315
)}
@@ -327,7 +331,7 @@ export class Login extends Component {
327331

328332
const { authSelector, errorSelector, networkSelector } = authSelectors;
329333

330-
const mapStateToProps = state => {
334+
const mapStateToProps = (state) => {
331335
return {
332336
auth: authSelector(state),
333337
error: errorSelector(state),

client/src/services/request.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@ export const post = (uri, payload) =>
1717
if (token != null) {
1818
request = request.set('Authorization', `bearer ${token}`);
1919
}
20+
const networkId = Auth.getNetworkId();
21+
if (token != null) {
22+
request = request.set('X-Network-ID', networkId);
23+
}
2024

2125
request.end(withPromiseCallback(resolve, reject));
2226
});
23-
export const get = uri =>
27+
export const get = (uri) =>
2428
new Promise((resolve, reject) => {
2529
let request = agent
2630
.get(uri)
@@ -31,6 +35,10 @@ export const get = uri =>
3135
if (token != null) {
3236
request = request.set('Authorization', `bearer ${token}`);
3337
}
38+
const networkId = Auth.getNetworkId();
39+
if (token != null) {
40+
request = request.set('X-Network-ID', networkId);
41+
}
3442

3543
request.end(withPromiseCallback(resolve, reject));
3644
});
@@ -45,6 +53,10 @@ export const put = (uri, payload) =>
4553
if (token != null) {
4654
request = request.set('Authorization', `bearer ${token}`);
4755
}
56+
const networkId = Auth.getNetworkId();
57+
if (token != null) {
58+
request = request.set('X-Network-ID', networkId);
59+
}
4860

4961
request.end(withPromiseCallback(resolve, reject));
5062
});
@@ -59,6 +71,10 @@ export const deleteRequest = (uri, payload) =>
5971
if (token != null) {
6072
request = request.set('Authorization', `bearer ${token}`);
6173
}
74+
const networkId = Auth.getNetworkId();
75+
if (token != null) {
76+
request = request.set('X-Network-ID', networkId);
77+
}
6278

6379
request.end(withPromiseCallback(resolve, reject));
6480
});

client/src/state/Auth.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ export default class Auth {
55
*
66
* @param {string} token
77
*/
8-
static authenticateUser(token) {
8+
static authenticateUser(token, networkId) {
99
localStorage.setItem('token', token);
10+
localStorage.setItem('networkId', networkId);
1011
}
1112

1213
/**
@@ -15,7 +16,7 @@ export default class Auth {
1516
* @returns {boolean}
1617
*/
1718
static isUserAuthenticated() {
18-
return localStorage.getItem('token') !== null;
19+
return localStorage.getItem('networkId') !== null; // token can be null if auth is disabled
1920
}
2021

2122
/**
@@ -24,6 +25,7 @@ export default class Auth {
2425
*/
2526
static deauthenticateUser() {
2627
localStorage.removeItem('token');
28+
localStorage.removeItem('networkId');
2729
}
2830

2931
/**
@@ -33,7 +35,10 @@ export default class Auth {
3335
*/
3436

3537
static getToken() {
36-
return null;
37-
//return localStorage.getItem('token');
38+
return localStorage.getItem('token');
39+
}
40+
41+
static getNetworkId() {
42+
return localStorage.getItem('networkId');
3843
}
3944
}

0 commit comments

Comments
 (0)