mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
100 lines
3.0 KiB
JavaScript
100 lines
3.0 KiB
JavaScript
'use strict';
|
|
|
|
const _ = require('lodash');
|
|
const { ServerlessSDK } = require('@serverless/platform-client');
|
|
const configUtils = require('@serverless/utils/config');
|
|
const promptWithHistory = require('@serverless/utils/inquirer/prompt-with-history');
|
|
const log = require('@serverless/utils/log').log.get('onboarding');
|
|
const login = require('../../commands/login/dashboard');
|
|
const { showOnboardingWelcome } = require('./utils');
|
|
|
|
const loginOrRegisterQuestion = async ({ stepHistory }) =>
|
|
promptWithHistory({
|
|
message: 'Do you want to login/register to Serverless Dashboard?',
|
|
type: 'confirm',
|
|
name: 'shouldLoginOrRegister',
|
|
stepHistory,
|
|
});
|
|
|
|
const steps = {
|
|
loginOrRegister: async (context) => {
|
|
const shouldLoginOrRegister =
|
|
context.options.org || context.configuration.org || (await loginOrRegisterQuestion(context));
|
|
if (shouldLoginOrRegister) await login(context.options);
|
|
},
|
|
};
|
|
|
|
module.exports = {
|
|
async isApplicable(context) {
|
|
const { isDashboard, configuration, options, serviceDir } = context;
|
|
|
|
if (!isDashboard) {
|
|
context.inapplicabilityReasonCode = 'CONSOLE_CONTEXT';
|
|
return false;
|
|
}
|
|
|
|
if (!serviceDir) {
|
|
context.inapplicabilityReasonCode = 'NOT_IN_SERVICE_DIRECTORY';
|
|
return false;
|
|
}
|
|
|
|
if (
|
|
_.get(configuration, 'provider') !== 'aws' &&
|
|
_.get(configuration, 'provider.name') !== 'aws'
|
|
) {
|
|
context.inapplicabilityReasonCode = 'NON_AWS_PROVIDER';
|
|
return false;
|
|
}
|
|
|
|
if (process.env.SERVERLESS_ACCESS_KEY) {
|
|
context.inapplicabilityReasonCode = 'SERVERLESS_ACCESS_KEY_PROVIDED';
|
|
return false;
|
|
}
|
|
|
|
const sdk = new ServerlessSDK();
|
|
const sdkMetadata = await (async () => {
|
|
try {
|
|
return await sdk.metadata.get();
|
|
} catch (error) {
|
|
log.info("Cannot connect to Serverless Platform. Skipping 'dashboard-login' step", error);
|
|
return null;
|
|
}
|
|
})();
|
|
if (!sdkMetadata) {
|
|
context.inapplicabilityReasonCode = 'SERVER_UNAVAILABLE';
|
|
return false;
|
|
}
|
|
const { supportedRegions, supportedRuntimes } = sdkMetadata;
|
|
if (!supportedRuntimes.includes(_.get(configuration.provider, 'runtime') || 'nodejs12.x')) {
|
|
context.inapplicabilityReasonCode = 'UNSUPPORTED_RUNTIME';
|
|
return false;
|
|
}
|
|
if (
|
|
!supportedRegions.includes(options.region || configuration.provider.region || 'us-east-1')
|
|
) {
|
|
context.inapplicabilityReasonCode = 'UNSUPPORTED_REGION';
|
|
return false;
|
|
}
|
|
const isLoggedIn = Boolean(configUtils.getLoggedInUser());
|
|
if (isLoggedIn) {
|
|
context.inapplicabilityReasonCode = 'ALREADY_LOGGED_IN';
|
|
}
|
|
return !isLoggedIn;
|
|
},
|
|
async run(context) {
|
|
const isOrgProvided = context.options.org || context.configuration.org;
|
|
|
|
if (
|
|
context.initial.isInServiceContext &&
|
|
!context.initial.isDashboardEnabled &&
|
|
!isOrgProvided
|
|
) {
|
|
showOnboardingWelcome(context);
|
|
}
|
|
|
|
return steps.loginOrRegister(context);
|
|
},
|
|
steps,
|
|
configuredQuestions: ['shouldLoginOrRegister'],
|
|
};
|