commit 537b0063f7c46af20fba26e552c90587c93836c4
parent cb6f6204cba443e81c051d173f8d202091ece12a
Author: Jackson G. Kaindume <seestem@merely.tech>
Date: Wed, 24 Aug 2022 21:47:36 +0200
[cyrto] add user input validation
Diffstat:
3 files changed, 146 insertions(+), 0 deletions(-)
diff --git a/cyrto/lib/cyrtophora.dart b/cyrto/lib/cyrtophora.dart
@@ -4,3 +4,4 @@ library cyrtophora;
export 'src/cyrtophora_base.dart';
export 'src/utils.dart';
+export 'src/validate.dart';
diff --git a/cyrto/lib/src/validate.dart b/cyrto/lib/src/validate.dart
@@ -1 +1,80 @@
+import "package:cyrtophora/cyrtophora.dart";
+class Validate {
+ /// Validate username
+ static bool username(String username) {
+ // Username cannot be empty
+ if (username.isEmpty) {
+ return false;
+ }
+
+ // Username length cannot be greater than 15 characters
+ if (username.length > 15) {
+ return false;
+ }
+
+ final chars = username.split("");
+ var underscoreCount = 0;
+
+ for (var i = 0; i < chars.length; i++) {
+ // Username cannot start with a underscore (_)
+ if (i == 0 && chars[i] == '_') {
+ return false;
+ }
+
+ // Username can only contain letters, numbers, one dot and one underscore
+ if (chars[i] != '_') {
+ if (!isAlphanumeric(chars[i])) {
+ return false;
+ }
+ } else {
+ // Count underscores because name can have only one [ _ ] underscore
+ underscoreCount += 1;
+ }
+ }
+ // Username can have only one [ _ ] underscore
+ if (underscoreCount > 1) {
+ return false;
+ }
+ return true;
+ }
+
+ /// Validate fullname if it is provided
+ static bool fullname(String fullname) {
+ // Full Name cannot be empty
+ if (fullname.isEmpty) {
+ return false;
+ }
+
+ // Full Name cannot be more than 70 characters
+ if (fullname.length > 70) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /// Validate password
+ static bool password(String password) {
+ // Password should be at least 10 characters long
+ if (password.length < 10) {
+ return false;
+ }
+ return true;
+ }
+
+ // TODO: better email verification
+ /// Validate email address
+ static bool email(String email) {
+ // Email address cannot be empty
+ if (email.isEmpty) {
+ return false;
+ }
+
+ // Email address should contain @ and . symbols
+ if (!email.contains('@') || !email.contains('.')) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/cyrto/test/validate_test.dart b/cyrto/test/validate_test.dart
@@ -0,0 +1,66 @@
+import 'package:test/test.dart';
+import 'package:cyrtophora/cyrtophora.dart';
+
+void main() {
+ group('Test cyrtophora validator', () {
+ test('Test fullname validator', () {
+ final validName1 = "John Doe";
+ final validName2 = "Peter Bob Bunny Wailer";
+ final invalidName1 =
+ "kdfjafdjkdf dfjfdkdfjdf fdkjfdkjf dkfdfjdkfj dfdfjdfdkjf dfkjfdjdf fdkjfdjdkf fdnfdkjfd dffd dffdkfd fkdjfdj fdfdfdfdffdfdf dfkjf";
+ final invalidName2 = "";
+
+ expect(Validate.fullname(validName1), true);
+ expect(Validate.fullname(validName2), true);
+
+ // Name cannot be more than 70 characters long
+ expect(Validate.fullname(invalidName1), false);
+
+ // Name cannot be empty
+ expect(Validate.fullname(invalidName2), false);
+ });
+
+ test('Test username validator', () {
+ final validUsername1 = "cy6erlion";
+ final validUsername2 = "cy6er_lion";
+ final validUsername3 = "cy6er1ion2022";
+ final validUsername4 = "fishcanyon10";
+
+ final invalidUsername1 = "_cy6erlion";
+ final invalidUsername2 = "cy6er.lion";
+ final invalidUsername3 = "cy6er__lion";
+ final invalidUsername4 =
+ "cy6erlion1111111111111111111111111eweewewewewew";
+ final invalidUsername5 = "";
+
+ expect(Validate.username(validUsername1), true);
+ expect(Validate.username(validUsername2), true);
+ expect(Validate.username(validUsername3), true);
+ expect(Validate.username(validUsername4), true);
+
+ expect(Validate.username(invalidUsername1), false);
+ expect(Validate.username(invalidUsername2), false);
+ expect(Validate.username(invalidUsername3), false);
+ expect(Validate.username(invalidUsername4), false);
+ expect(Validate.username(invalidUsername5), false);
+ });
+
+ test('Test password validator', () {
+ final validPassword = "thisIs_a_P@ssword";
+ final invalidPassword = "short";
+
+ expect(Validate.password(validPassword), true);
+ expect(Validate.password(invalidPassword), false);
+ });
+
+ test('Test email validator', () {
+ final validEmail = "info@example.com";
+ final invalidEmail1 = "wrong";
+ final invalidEmail2 = "";
+
+ expect(Validate.email(validEmail), true);
+ expect(Validate.email(invalidEmail1), false);
+ expect(Validate.email(invalidEmail2), false);
+ });
+ });
+}