[gnome-builder/wip/gtk4-port: 1251/1774] libide/vcs: add basic input validation to form




commit dcf5287a8385f1905ef60c978fa95ec60cc5c9ed
Author: Christian Hergert <chergert redhat com>
Date:   Tue May 31 21:59:52 2022 -0700

    libide/vcs: add basic input validation to form

 src/libide/vcs/ide-vcs-clone-request.c | 36 ++++++++++++++++++++++++++++++++++
 src/libide/vcs/ide-vcs-clone-request.h | 11 +++++++++++
 2 files changed, 47 insertions(+)
---
diff --git a/src/libide/vcs/ide-vcs-clone-request.c b/src/libide/vcs/ide-vcs-clone-request.c
index a71741b38..4fc3e1463 100644
--- a/src/libide/vcs/ide-vcs-clone-request.c
+++ b/src/libide/vcs/ide-vcs-clone-request.c
@@ -524,3 +524,39 @@ ide_vcs_clone_request_populate_branches (IdeVcsCloneRequest *self)
 
   IDE_EXIT;
 }
+
+IdeVcsCloneRequestValidation
+ide_vcs_clone_request_validate (IdeVcsCloneRequest *self)
+{
+  IdeVcsCloneRequestValidation flags = 0;
+  g_autoptr(IdeVcsUri) uri = NULL;
+
+  g_return_val_if_fail (IDE_IS_VCS_CLONE_REQUEST (self), 0);
+  g_return_val_if_fail (IDE_IS_VCS_CLONER (self->cloner), 0);
+
+  if (ide_str_empty0 (self->uri) || !ide_vcs_uri_is_valid (self->uri))
+    flags |= IDE_VCS_CLONE_REQUEST_INVAL_URI;
+  else
+    uri = ide_vcs_uri_new (self->uri);
+
+  if (uri != NULL)
+    {
+      const char *path;
+
+      if ((path = ide_vcs_uri_get_path (uri)))
+        {
+          g_autofree char *name = ide_vcs_cloner_get_directory_name (self->cloner, uri);
+          g_autoptr(GFile) new_directory = g_file_get_child (self->directory, name);
+
+          if (g_file_query_exists (new_directory, NULL))
+            flags |= IDE_VCS_CLONE_REQUEST_INVAL_DIRECTORY;
+        }
+    }
+
+  /* I mean, who really wants to validate email anyway */
+  if (!ide_str_empty0 (self->author_email) &&
+      strchr (self->author_email, '@') == NULL)
+    flags |= IDE_VCS_CLONE_REQUEST_INVAL_EMAIL;
+
+  return flags;
+}
diff --git a/src/libide/vcs/ide-vcs-clone-request.h b/src/libide/vcs/ide-vcs-clone-request.h
index 839fbc2d9..60c1802ba 100644
--- a/src/libide/vcs/ide-vcs-clone-request.h
+++ b/src/libide/vcs/ide-vcs-clone-request.h
@@ -30,6 +30,14 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_VCS_CLONE_REQUEST (ide_vcs_clone_request_get_type())
 
+typedef enum
+{
+  IDE_VCS_CLONE_REQUEST_VALID           = 0,
+  IDE_VCS_CLONE_REQUEST_INVAL_URI       = 1 << 0,
+  IDE_VCS_CLONE_REQUEST_INVAL_DIRECTORY = 1 << 1,
+  IDE_VCS_CLONE_REQUEST_INVAL_EMAIL     = 1 << 2,
+} IdeVcsCloneRequestValidation;
+
 IDE_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE (IdeVcsCloneRequest, ide_vcs_clone_request, IDE, VCS_CLONE_REQUEST, IdeObject)
 
@@ -68,5 +76,8 @@ void                ide_vcs_clone_request_set_directory     (IdeVcsCloneRequest
                                                              GFile              *directory);
 IDE_AVAILABLE_IN_ALL
 void                ide_vcs_clone_request_populate_branches (IdeVcsCloneRequest *self);
+IDE_AVAILABLE_IN_ALL
+IdeVcsCloneRequestValidation
+                    ide_vcs_clone_request_validate          (IdeVcsCloneRequest *self);
 
 G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]