From 333fc7cfc18145ac7ced3a9536aed9506832118e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez?= Date: Fri, 7 Apr 2023 14:26:41 +0200 Subject: [PATCH 1/3] Created captcha control --- .../ViewModels/MainViewModel.cs | 3 + src/AlohaKit.Gallery/Views/CaptchaView.xaml | 61 ++++++++++ .../Views/CaptchaView.xaml.cs | 42 +++++++ src/AlohaKit/Controls/Captcha/Captcha.cs | 110 ++++++++++++++++++ .../Controls/Captcha/CaptchaDrawable.cs | 102 ++++++++++++++++ src/AlohaKit/Controls/Captcha/CaptchaLevel.cs | 9 ++ 6 files changed, 327 insertions(+) create mode 100644 src/AlohaKit.Gallery/Views/CaptchaView.xaml create mode 100644 src/AlohaKit.Gallery/Views/CaptchaView.xaml.cs create mode 100644 src/AlohaKit/Controls/Captcha/Captcha.cs create mode 100644 src/AlohaKit/Controls/Captcha/CaptchaDrawable.cs create mode 100644 src/AlohaKit/Controls/Captcha/CaptchaLevel.cs diff --git a/src/AlohaKit.Gallery/ViewModels/MainViewModel.cs b/src/AlohaKit.Gallery/ViewModels/MainViewModel.cs index 3fb9752..32c9326 100644 --- a/src/AlohaKit.Gallery/ViewModels/MainViewModel.cs +++ b/src/AlohaKit.Gallery/ViewModels/MainViewModel.cs @@ -16,6 +16,9 @@ namespace AlohaKit.Gallery.ViewModels new SectionModel(typeof(ButtonView), "Button", "The Button responds to a tap or click."), + + new SectionModel(typeof(CaptchaView), "Captcha", + "Displays a distorted word."), new SectionModel(typeof(CheckBoxView), "CheckBox", "CheckBox is a type of button that can either be checked or empty."), diff --git a/src/AlohaKit.Gallery/Views/CaptchaView.xaml b/src/AlohaKit.Gallery/Views/CaptchaView.xaml new file mode 100644 index 0000000..a3e38ad --- /dev/null +++ b/src/AlohaKit.Gallery/Views/CaptchaView.xaml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AlohaKit.Gallery/Views/CaptchaView.xaml.cs b/src/AlohaKit.Gallery/Views/CaptchaView.xaml.cs new file mode 100644 index 0000000..30a19bc --- /dev/null +++ b/src/AlohaKit.Gallery/Views/CaptchaView.xaml.cs @@ -0,0 +1,42 @@ +namespace AlohaKit.Gallery.Views; + +public partial class CaptchaView : ContentPage +{ + public CaptchaView() + { + InitializeComponent(); + UpdateColors(); + } + + void OnTextColorEntryTextChanged(object sender, TextChangedEventArgs e) + { + UpdateColors(); + } + + void UpdateColors() + { + var textColor = GetColorFromString(TextColorEntry.Text); + + if (textColor != null) + { + TextColorEntry.BackgroundColor = textColor; + + Captcha.TextColor = textColor; + } + } + + Color GetColorFromString(string value) + { + if (string.IsNullOrEmpty(value)) + return null; + + try + { + return Color.FromArgb(value[0].Equals('#') ? value : $"#{value}"); + } + catch (Exception) + { + return null; + } + } +} \ No newline at end of file diff --git a/src/AlohaKit/Controls/Captcha/Captcha.cs b/src/AlohaKit/Controls/Captcha/Captcha.cs new file mode 100644 index 0000000..02af001 --- /dev/null +++ b/src/AlohaKit/Controls/Captcha/Captcha.cs @@ -0,0 +1,110 @@ +namespace AlohaKit.Controls +{ + public class Captcha : GraphicsView + { + public Captcha() + { + HeightRequest = 50; + WidthRequest = 150; + + Drawable = CaptchaDrawable = new CaptchaDrawable(); + } + + public CaptchaDrawable CaptchaDrawable { get; set; } + + public static readonly BindableProperty LevelProperty = + BindableProperty.Create(nameof(Level), typeof(CaptchaLevel), typeof(Captcha), CaptchaLevel.Normal, + propertyChanged: (bindableObject, oldValue, newValue) => + { + if (newValue != null && bindableObject is Captcha captcha) + { + captcha.UpdateLevel(); + } + }); + + public CaptchaLevel Level + { + get => (CaptchaLevel)GetValue(LevelProperty); + set => SetValue(LevelProperty, value); + } + + public static readonly BindableProperty TextColorProperty = + BindableProperty.Create(nameof(TextColor), typeof(Color), typeof(Captcha), Colors.Black, + propertyChanged: (bindableObject, oldValue, newValue) => + { + if (newValue != null && bindableObject is Captcha captcha) + { + captcha.UpdateTextColor(); + } + }); + + public Color TextColor + { + get => (Color)GetValue(TextColorProperty); + set => SetValue(TextColorProperty, value); + } + + protected override void OnParentChanged() + { + base.OnParentChanged(); + + if (Parent != null) + { + UpdateLevel(); + UpdateTextColor(); + } + } + + void UpdateLevel() + { + if (CaptchaDrawable == null) + return; + + if (CaptchaDrawable.Level != Level) + { + CaptchaDrawable.Level = Level; + + var word = GenerateRandomWord(GetWordLength(Level)); + CaptchaDrawable.Word = word; + + Invalidate(); + } + } + + void UpdateTextColor() + { + if (CaptchaDrawable == null) + return; + + CaptchaDrawable.TextColor = TextColor; + + Invalidate(); + } + + string GenerateRandomWord(int length) + { + var random = new Random(); + + const string chars = "abcdefghijklmnopqrstuvwxyz" + + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + "0123456789"; + + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + + int GetWordLength(CaptchaLevel level) + { + switch (level) + { + case CaptchaLevel.Weak: + return 4; + default: + case CaptchaLevel.Normal: + return 6; + case CaptchaLevel.Strong: + return 8; + } + } + } +} \ No newline at end of file diff --git a/src/AlohaKit/Controls/Captcha/CaptchaDrawable.cs b/src/AlohaKit/Controls/Captcha/CaptchaDrawable.cs new file mode 100644 index 0000000..a3fbded --- /dev/null +++ b/src/AlohaKit/Controls/Captcha/CaptchaDrawable.cs @@ -0,0 +1,102 @@ +namespace AlohaKit.Controls +{ + public class CaptchaDrawable : IDrawable + { + public string Word { get; set; } + public CaptchaLevel Level { get; set; } + public Color TextColor { get; set; } + + public void Draw(ICanvas canvas, RectF dirtyRect) + { + DrawText(canvas, dirtyRect); + DrawArtifacts(canvas, dirtyRect); + } + + void DrawText(ICanvas canvas, RectF dirtyRect) + { + canvas.SaveState(); + + var height = dirtyRect.Height; + var width = dirtyRect.Width; + + int minLetterDistanceY = 0; + int maxLetterDistanceY = (int)height / Word.Length; + + int minLetterDistanceX = 6; + int maxLetterDistanceX = (int)width / Word.Length; + + var coordRandom = new Random(); + + var letterPoint = new PointF(coordRandom.Next(minLetterDistanceY, maxLetterDistanceX), height / 2); + + foreach (var l in Word) + { + letterPoint.Y += coordRandom.Next(0, maxLetterDistanceY); + + canvas.FontSize = 24; + canvas.FontColor = TextColor; + + canvas.DrawString(l.ToString(), letterPoint.X, letterPoint.Y,HorizontalAlignment.Center); + + letterPoint.X += coordRandom.Next(minLetterDistanceX, maxLetterDistanceX); + } + + canvas.RestoreState(); + } + + void DrawArtifacts(ICanvas canvas, RectF dirtyRect) + { + canvas.SaveState(); + + var randomLines = new Random(); + + for (var i = 0; i < GetArtifactLength(Level); i++) + { + var x1 = randomLines.Next(0, (int)dirtyRect.Width); + var y1 = randomLines.Next(0, (int)dirtyRect.Height); + var x2 = randomLines.Next(0, (int)dirtyRect.Width); + var y2 = randomLines.Next(0, (int)dirtyRect.Height); + + canvas.StrokeColor = TextColor.WithAlpha(0.8f); + + var randomStrokeSize = new Random(); + canvas.StrokeSize = randomStrokeSize.Next(1, GetArtifactWidth(Level)); + + var p1 = new PointF(x1, y1); + var p2 = new PointF(x2, y2); + + canvas.DrawLine(p1, p2); + } + + canvas.RestoreState(); + } + + int GetArtifactLength(CaptchaLevel level) + { + switch (level) + { + case CaptchaLevel.Weak: + return 4; + default: + case CaptchaLevel.Normal: + return 6; + case CaptchaLevel.Strong: + return 8; + } + } + + int GetArtifactWidth(CaptchaLevel level) + { + switch (level) + { + case CaptchaLevel.Weak: + return 2; + default: + case CaptchaLevel.Normal: + return 3; + case CaptchaLevel.Strong: + return 4; + } + } + } +} \ No newline at end of file diff --git a/src/AlohaKit/Controls/Captcha/CaptchaLevel.cs b/src/AlohaKit/Controls/Captcha/CaptchaLevel.cs new file mode 100644 index 0000000..85d4562 --- /dev/null +++ b/src/AlohaKit/Controls/Captcha/CaptchaLevel.cs @@ -0,0 +1,9 @@ +namespace AlohaKit.Controls +{ + public enum CaptchaLevel + { + Weak, + Normal, + Strong + } +} \ No newline at end of file From 7274f330158817ee24b904bff0820ea757006c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez?= Date: Fri, 7 Apr 2023 14:30:43 +0200 Subject: [PATCH 2/3] Updated version --- src/AlohaKit.Gallery/AlohaKit.Gallery.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AlohaKit.Gallery/AlohaKit.Gallery.csproj b/src/AlohaKit.Gallery/AlohaKit.Gallery.csproj index 5646ddd..119a088 100644 --- a/src/AlohaKit.Gallery/AlohaKit.Gallery.csproj +++ b/src/AlohaKit.Gallery/AlohaKit.Gallery.csproj @@ -51,7 +51,7 @@ - + From ffa23e0a920ac698abd412893e25a53e66a1a686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez?= Date: Fri, 7 Apr 2023 14:35:26 +0200 Subject: [PATCH 3/3] Added image --- images/alohakit-captcha.png | Bin 0 -> 40562 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/alohakit-captcha.png diff --git a/images/alohakit-captcha.png b/images/alohakit-captcha.png new file mode 100644 index 0000000000000000000000000000000000000000..50c8b58bade6966d36142b246d7a9ead341a4825 GIT binary patch literal 40562 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 literal 0 HcmV?d00001