Skip to content

Commit 214385a

Browse files
committed
add cors + add token full access option
1 parent f5bf70e commit 214385a

File tree

6 files changed

+82
-2
lines changed

6 files changed

+82
-2
lines changed

package-lock.json

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"@aps_sdk/authentication": "1.0.0-beta.3",
1414
"@aps_sdk/model-derivative": "1.0.0-beta.3",
1515
"@aps_sdk/oss": "1.0.0-beta.2",
16+
"cors": "^2.8.5",
1617
"dotenv": "^16.4.1",
1718
"express": "^4.18.2",
1819
"express-formidable": "^1.2.0"

routes/auth.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const express = require('express');
2-
const { getViewerToken } = require('../services/aps.js');
2+
const { getViewerToken,getFullAccessToken } = require('../services/aps.js');
33

44
let router = express.Router();
55

@@ -10,5 +10,12 @@ router.get('/api/auth/token', async function (req, res, next) {
1010
next(err);
1111
}
1212
});
13+
router.get('/api/auth/full_token', async function (req, res, next) {
14+
try {
15+
res.json(await getFullAccessToken());
16+
} catch (err) {
17+
next(err);
18+
}
19+
});
1320

1421
module.exports = router;

routes/models.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const express = require('express');
22
const formidable = require('express-formidable');
3-
const { listObjects, uploadObject, translateObject, getManifest, urnify,getFileUrlByUrn,uploadObjectFromBase64 } = require('../services/aps.js');
3+
const { listObjects, uploadObject, translateObject, getManifest, urnify,getFileUrlByUrn,uploadObjectFromBase64,getThumbnailByUrn } = require('../services/aps.js');
44

55
let router = express.Router();
66

@@ -90,5 +90,26 @@ router.get('/api/models/:urn/detail', async function (req, res, next) {
9090
next(err);
9191
}
9292
});
93+
router.get('/api/models/:urn/thumbnail', async function (req, res, next) {
94+
try {
95+
const urn = req.params.urn;
96+
97+
// Call the APS service function to get the thumbnail
98+
const thumbnail = await getThumbnailByUrn(urn);
99+
100+
// Send the thumbnail buffer as an image response
101+
res.set('Content-Type', 'image/png');
102+
res.send(thumbnail);
103+
} catch (err) {
104+
console.error('Error fetching thumbnail:', err.message);
105+
106+
// Handle specific errors
107+
if (err.message.includes('Thumbnail not found')) {
108+
return res.status(404).json({ error: 'Thumbnail not found for the given URN' });
109+
}
110+
111+
next(err);
112+
}
113+
});
93114

94115
module.exports = router;

server.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const express = require('express');
2+
const cors = require('cors')
23
const { PORT } = require('./config.js');
34

45
let app = express();
6+
app.use(cors())
57
app.use(express.json({ limit: '50mb' }));
68
app.use(express.static('wwwroot'));
79
app.use(require('./routes/auth.js'));

services/aps.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ async function getInternalToken() {
2323
service.getViewerToken = async () => {
2424
return await authenticationClient.getTwoLeggedToken(APS_CLIENT_ID, APS_CLIENT_SECRET, [Scopes.ViewablesRead]);
2525
};
26+
service.getFullAccessToken = async () => {
27+
return await authenticationClient.getTwoLeggedToken(APS_CLIENT_ID, APS_CLIENT_SECRET, [
28+
Scopes.DataRead,
29+
Scopes.DataCreate,
30+
Scopes.DataWrite,
31+
Scopes.BucketCreate,
32+
Scopes.BucketRead
33+
]);
34+
};
2635

2736
service.ensureBucketExists = async (bucketKey) => {
2837
const accessToken = await getInternalToken();
@@ -149,5 +158,22 @@ service.getFileUrlByUrn = async (urn) => {
149158
throw err;
150159
}
151160
};
161+
service.getThumbnailByUrn = async (urn) => {
162+
const accessToken = await getInternalToken();
163+
164+
try {
165+
// Fetch the thumbnail using ModelDerivativeClient
166+
const response = await modelDerivativeClient.getThumbnail(urn, { accessToken,width:500,height:500 });
167+
console.log(`-->${response}<--`)
168+
// Return the thumbnail as a buffer
169+
return response; // Buffer of the thumbnail
170+
} catch (err) {
171+
console.error('Error fetching thumbnail:', err.message);
172+
if (err.axiosError && err.axiosError.response.status === 404) {
173+
throw new Error('Thumbnail not found for the given URN');
174+
}
175+
throw err;
176+
}
177+
};
152178

153179
service.urnify = (id) => Buffer.from(id).toString('base64').replace(/=/g, '');

0 commit comments

Comments
 (0)