summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/integrations/node/src/http-server.ts5
-rw-r--r--packages/integrations/node/test/fixtures/well-known-locations/package.json9
-rw-r--r--packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json1
-rw-r--r--packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association3
-rw-r--r--packages/integrations/node/test/well-known-locations.test.js45
5 files changed, 61 insertions, 2 deletions
diff --git a/packages/integrations/node/src/http-server.ts b/packages/integrations/node/src/http-server.ts
index bdd628c29..19e33c84a 100644
--- a/packages/integrations/node/src/http-server.ts
+++ b/packages/integrations/node/src/http-server.ts
@@ -17,10 +17,11 @@ export function createServer(
) {
const listener: http.RequestListener = (req, res) => {
if (req.url) {
- const pathname = '/' + removeBase(req.url);
+ let pathname = removeBase(req.url);
+ pathname = pathname[0] === '/' ? pathname : '/' + pathname;
const stream = send(req, encodeURI(pathname), {
root: fileURLToPath(client),
- dotfiles: 'deny',
+ dotfiles: pathname.startsWith('/.well-known/') ? 'allow' : 'deny',
});
let forwardError = false;
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/package.json b/packages/integrations/node/test/fixtures/well-known-locations/package.json
new file mode 100644
index 000000000..f018b6ec7
--- /dev/null
+++ b/packages/integrations/node/test/fixtures/well-known-locations/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/well-known-locations",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "astro": "workspace:*",
+ "@astrojs/node": "workspace:*"
+ }
+}
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json b/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association b/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association
new file mode 100644
index 000000000..daae260f1
--- /dev/null
+++ b/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association
@@ -0,0 +1,3 @@
+{
+ "applinks": {}
+}
diff --git a/packages/integrations/node/test/well-known-locations.test.js b/packages/integrations/node/test/well-known-locations.test.js
new file mode 100644
index 000000000..31f31bacd
--- /dev/null
+++ b/packages/integrations/node/test/well-known-locations.test.js
@@ -0,0 +1,45 @@
+import nodejs from '../dist/index.js';
+import { loadFixture } from './test-utils.js';
+import { expect } from 'chai';
+
+describe('test URIs beginning with a dot', () => {
+ /** @type {import('./test-utils').Fixture} */
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/well-known-locations/',
+ output: 'server',
+ adapter: nodejs({ mode: 'standalone' }),
+ });
+ await fixture.build();
+ });
+
+ describe('can load well-known URIs', async () => {
+ let devPreview;
+
+ before(async () => {
+ devPreview = await fixture.preview();
+ });
+
+ after(async () => {
+ await devPreview.stop();
+ });
+
+ it('can load a valid well-known URI', async () => {
+ const res = await fixture.fetch('/.well-known/apple-app-site-association');
+
+ expect(res.status).to.equal(200);
+
+ const json = await res.json();
+
+ expect(json).to.deep.equal({ applinks: {} });
+ });
+
+ it('cannot load a dot folder that is not a well-known URI', async () => {
+ const res = await fixture.fetch('/.hidden/file.json');
+
+ expect(res.status).to.equal(404);
+ });
+ });
+});