// This script configures the .env.development.local file with additional environment variables to configure HTTPS using the ASP.NET Core // development certificate in the webpack development proxy. const fs = require('fs'); const path = require('path'); const baseFolder = process.env.APPDATA !== undefined && process.env.APPDATA !== '' ? `${process.env.APPDATA}/ASP.NET/https` : `${process.env.HOME}/.aspnet/https`; const certificateArg = process.argv.map(arg => arg.match(/--name=(?.+)/i)).filter(Boolean)[0]; const certificateName = certificateArg ? certificateArg.groups.value : process.env.npm_package_name; if (!certificateName) { console.error('Invalid certificate name. Run this script in the context of an npm/yarn script or pass --name=<> explicitly.') process.exit(-1); } const certFilePath = path.join(baseFolder, `${certificateName}.pem`); const keyFilePath = path.join(baseFolder, `${certificateName}.key`); if (!fs.existsSync('.env.development.local')) { fs.writeFileSync( '.env.development.local', `SSL_CRT_FILE=${certFilePath} SSL_KEY_FILE=${keyFilePath}` ); } else { let lines = fs.readFileSync('.env.development.local') .toString() .split('\n'); let hasCert, hasCertKey = false; for (const line of lines) { if (/SSL_CRT_FILE=.*/i.test(line)) { hasCert = true; } if (/SSL_KEY_FILE=.*/i.test(line)) { hasCertKey = true; } } if (!hasCert) { fs.appendFileSync( '.env.development.local', `\nSSL_CRT_FILE=${certFilePath}` ); } if (!hasCertKey) { fs.appendFileSync( '.env.development.local', `\nSSL_KEY_FILE=${keyFilePath}` ); } }