diff --git a/auth/lib/services/auth_feature_flag.dart b/auth/lib/services/auth_feature_flag.dart new file mode 100644 index 000000000..92a1c540d --- /dev/null +++ b/auth/lib/services/auth_feature_flag.dart @@ -0,0 +1,23 @@ +import 'package:ente_auth/core/configuration.dart'; +import 'package:flutter/foundation.dart'; + +class FeatureFlagService { + FeatureFlagService._privateConstructor(); + static final FeatureFlagService instance = + FeatureFlagService._privateConstructor(); + + static final _internalUserIDs = const String.fromEnvironment( + "internal_user_ids", + defaultValue: "1,2,3,4,191,125,1580559962388044,1580559962392434,10000025", + ).split(",").map((element) { + return int.parse(element); + }).toSet(); + + bool isInternalUserOrDebugBuild() { + final String? email = Configuration.instance.getEmail(); + final userID = Configuration.instance.getUserID(); + return (email != null && email.endsWith("@ente.io")) || + _internalUserIDs.contains(userID) || + kDebugMode; + } +} diff --git a/auth/lib/ui/settings/security_section_widget.dart b/auth/lib/ui/settings/security_section_widget.dart index 803ae9b2d..2bc380b96 100644 --- a/auth/lib/ui/settings/security_section_widget.dart +++ b/auth/lib/ui/settings/security_section_widget.dart @@ -4,6 +4,7 @@ import 'dart:typed_data'; import 'package:ente_auth/core/configuration.dart'; import 'package:ente_auth/l10n/l10n.dart'; import 'package:ente_auth/models/user_details.dart'; +import 'package:ente_auth/services/auth_feature_flag.dart'; import 'package:ente_auth/services/local_authentication_service.dart'; import 'package:ente_auth/services/passkey_service.dart'; import 'package:ente_auth/services/user_service.dart'; @@ -62,17 +63,20 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> { // We don't know if the user can disable MFA yet, so we fetch the info UserService.instance.getUserDetailsV2().ignore(); } + final bool isInternalUser = + FeatureFlagService.instance.isInternalUserOrDebugBuild(); children.addAll([ - sectionOptionSpacing, - MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: l10n.passkey, + if (isInternalUser) sectionOptionSpacing, + if (isInternalUser) + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: l10n.passkey, + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () => PasskeyService.instance.openPasskeyPage(context), ), - pressedColor: getEnteColorScheme(context).fillFaint, - trailingIcon: Icons.chevron_right_outlined, - trailingIconIsMuted: true, - onTap: () => PasskeyService.instance.openPasskeyPage(context), - ), sectionOptionSpacing, MenuItemWidget( captionedTextWidget: CaptionedTextWidget(