aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorGravatar hunteraraujo <hunter_araujo@msn.com> 2023-10-04 11:32:45 -0700
committerGravatar GitHub <noreply@github.com> 2023-10-04 11:32:45 -0700
commitf97fc0dd3d4bd3ae2470b23d4e98348b871bf8cc (patch)
tree8852ee3b1af0d8ba6cc79793c05a15ab5dda59a0 /frontend
parentUpdate frontend build (#5522) (diff)
downloadAuto-GPT-f97fc0dd3d4bd3ae2470b23d4e98348b871bf8cc.tar.gz
Auto-GPT-f97fc0dd3d4bd3ae2470b23d4e98348b871bf8cc.tar.bz2
Auto-GPT-f97fc0dd3d4bd3ae2470b23d4e98348b871bf8cc.zip
Add GitHub Repository Validation to Leaderboard Submission Dialog (#5539)
Diffstat (limited to 'frontend')
-rw-r--r--frontend/lib/utils/uri_utility.dart28
-rw-r--r--frontend/lib/views/task_queue/leaderboard_submission_dialog.dart20
2 files changed, 40 insertions, 8 deletions
diff --git a/frontend/lib/utils/uri_utility.dart b/frontend/lib/utils/uri_utility.dart
index 592bacbdc..ace65f082 100644
--- a/frontend/lib/utils/uri_utility.dart
+++ b/frontend/lib/utils/uri_utility.dart
@@ -1,3 +1,6 @@
+import 'package:http/http.dart' as http;
+import 'dart:convert';
+
class UriUtility {
static bool isURL(String url) {
// Validate if the URL string is empty, or contains spaces or invalid characters
@@ -44,4 +47,29 @@ class UriUtility {
print('URL is valid.');
return true;
}
+
+ Future<bool> isValidGitHubRepo(String repoUrl) async {
+ var uri = Uri.parse(repoUrl);
+ if (uri.host != 'github.com') {
+ return false;
+ }
+
+ var segments = uri.pathSegments;
+ if (segments.length < 2) {
+ return false;
+ }
+
+ var user = segments[0];
+ var repo = segments[1];
+
+ var apiUri = Uri.https('api.github.com', '/repos/$user/$repo');
+
+ var response = await http.get(apiUri);
+ if (response.statusCode != 200) {
+ return false;
+ }
+
+ var data = json.decode(response.body);
+ return data is Map && data['full_name'] == '$user/$repo';
+ }
}
diff --git a/frontend/lib/views/task_queue/leaderboard_submission_dialog.dart b/frontend/lib/views/task_queue/leaderboard_submission_dialog.dart
index a0fd980e4..add0fba9b 100644
--- a/frontend/lib/views/task_queue/leaderboard_submission_dialog.dart
+++ b/frontend/lib/views/task_queue/leaderboard_submission_dialog.dart
@@ -44,14 +44,18 @@ class _LeaderboardSubmissionDialogState
});
}
- void _validateAndSubmit() {
+ void _validateAndSubmit() async {
+ setState(() {
+ _teamNameError = null;
+ _repoUrlError = null;
+ _commitShaError = null;
+ });
+
bool isValid = true;
if (_teamNameController.text.isEmpty) {
isValid = false;
_teamNameError = 'Team Name is required';
- } else {
- _teamNameError = null;
}
if (_repoUrlController.text.isEmpty) {
@@ -60,20 +64,20 @@ class _LeaderboardSubmissionDialogState
} else if (!UriUtility.isURL(_repoUrlController.text)) {
isValid = false;
_repoUrlError = 'Invalid URL format';
- } else {
- _repoUrlError = null;
+ } else if (!(await UriUtility()
+ .isValidGitHubRepo(_repoUrlController.text))) {
+ isValid = false;
+ _repoUrlError = 'Not a valid GitHub repository';
}
if (_commitShaController.text.isEmpty) {
isValid = false;
_commitShaError = 'Commit SHA is required';
- } else {
- _commitShaError = null;
}
if (isValid) {
print('Valid leaderboard submission parameters!');
- _saveToSharedPreferences();
+ await _saveToSharedPreferences();
widget.onSubmit?.call(_teamNameController.text, _repoUrlController.text,
_commitShaController.text);
Navigator.of(context).pop();