diff options
author | hunteraraujo <hunter_araujo@msn.com> | 2023-10-04 11:32:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-04 11:32:45 -0700 |
commit | f97fc0dd3d4bd3ae2470b23d4e98348b871bf8cc (patch) | |
tree | 8852ee3b1af0d8ba6cc79793c05a15ab5dda59a0 /frontend | |
parent | Update frontend build (#5522) (diff) | |
download | Auto-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.dart | 28 | ||||
-rw-r--r-- | frontend/lib/views/task_queue/leaderboard_submission_dialog.dart | 20 |
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(); |