blob: 1b08127bb76fc07f664be66fee36f6ee34ef9efc [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import '../command.dart';
import '../exceptions.dart';
import '../log.dart' as log;
import '../source/hosted.dart';
/// Handles the `token remove` pub command.
class TokenRemoveCommand extends PubCommand {
@override
String get name => 'remove';
@override
String get description => 'Remove secret token for package repository.';
@override
String get invocation => 'pub token remove';
@override
String get argumentsDescription => '[hosted-url]';
bool get isAll => argResults['all'];
TokenRemoveCommand() {
argParser.addFlag(
'all',
negatable: false,
help: 'Remove all secret tokens.',
);
}
@override
Future<void> runProtected() async {
if (isAll) {
final count = tokenStore.credentials.length;
tokenStore.deleteTokensFile();
log.message('Removed $count secret tokens.');
return;
}
if (argResults.rest.isEmpty) {
usageException(
'The [hosted-url] for a package repository must be specified.');
} else if (argResults.rest.length > 1) {
usageException('Takes only a single argument.');
}
try {
final hostedUrl = validateAndNormalizeHostedUrl(argResults.rest.first);
final found = tokenStore.removeCredential(hostedUrl);
if (found) {
log.message('Removed secret token for package repository: $hostedUrl');
} else {
throw DataException(
'No secret token for package repository "$hostedUrl" was found.');
}
} on FormatException catch (e) {
usageException('Invalid [hosted-url]: "${argResults.rest.first}"\n'
'${e.message}');
}
}
}