cyrtophora

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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:
Mcyrto/lib/cyrtophora.dart | 1+
Mcyrto/lib/src/validate.dart | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acyrto/test/validate_test.dart | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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); + }); + }); +}