Skip to content

Commit

Permalink
Fixed some weird behaviour of the sample about JSONRPC
Browse files Browse the repository at this point in the history
  • Loading branch information
danieleteti committed Jul 2, 2024
1 parent e2908e3 commit 2758b2b
Show file tree
Hide file tree
Showing 18 changed files with 7,425 additions and 0 deletions.
70 changes: 70 additions & 0 deletions samples/jsonrpc/AuthenticationU.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
unit AuthenticationU;

interface

uses
System.SysUtils, MVCFramework.Commons, System.Generics.Collections,
MVCFramework;

type
TAuthenticationSample = class(TInterfacedObject, IMVCAuthenticationHandler)
protected
procedure OnRequest(const AContext: TWebContext; const ControllerQualifiedClassName: string;
const ActionName: string; var AuthenticationRequired: Boolean);
procedure OnAuthentication(const AContext: TWebContext; const UserName: string; const Password: string;
UserRoles: System.Generics.Collections.TList<System.string>;
var IsValid: Boolean; const SessionData: TSessionData);
procedure OnAuthorization(const AContext: TWebContext; UserRoles
: System.Generics.Collections.TList<System.string>;
const ControllerQualifiedClassName: string; const ActionName: string;
var IsAuthorized: Boolean);
end;

implementation

{ TMVCAuthorization }

procedure TAuthenticationSample.OnAuthentication(const AContext: TWebContext; const UserName: string;
const Password: string;
UserRoles: System.Generics.Collections.TList<System.string>;
var IsValid: Boolean; const SessionData: TSessionData);
begin
IsValid := UserName.Equals(Password); // hey!, this is just a demo!!!
if IsValid then
begin
if UserName = 'user1' then
begin
UserRoles.Add('role1');
end;
if UserName = 'user2' then
begin
UserRoles.Add('role2');
end;
if UserName = 'user3' then // all the roles
begin
UserRoles.Add('role1');
UserRoles.Add('role2');
end;
end
else
begin
UserRoles.Clear;
end;
end;

procedure TAuthenticationSample.OnAuthorization
(const AContext: TWebContext; UserRoles
: System.Generics.Collections.TList<System.string>;
const ControllerQualifiedClassName: string; const ActionName: string;
var IsAuthorized: Boolean);
begin
IsAuthorized := True;
end;

procedure TAuthenticationSample.OnRequest(const AContext: TWebContext; const ControllerQualifiedClassName: string;
const ActionName: string; var AuthenticationRequired: Boolean);
begin
AuthenticationRequired := True;
end;

end.
272 changes: 272 additions & 0 deletions samples/jsonrpc/CommonTypesU.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,272 @@
unit CommonTypesU;

interface

uses
MVCFramework.Commons, MVCFramework.Serializer.Commons;

type
TEnumTest = (ptEnumValue1, ptEnumValue2, ptEnumValue3, ptEnumValue4);
TSetTest = set of TEnumTest;

[MVCNameCase(ncCamelCase)]
TNestedRec = record
StringProp: String;
IntegerProp: Integer;
BooleanProp: Boolean;
EnumProp: TEnumTest;
SetProp: TSetTest;
ArrOfStringsProp: TArray<String>;
ArrOfIntegersProp: TArray<Integer>;
ArrOfBooleansProp: TArray<Boolean>;
ArrOfDateProp: TArray<TDate>;
ArrOfTimeProp: TArray<TTime>;
ArrOfDateTimeProp: TArray<TDateTime>;
constructor Create(Value: Integer);
function ToString: String;
end;

[MVCNameCase(ncCamelCase)]
TTestRec = record
StringProp: String;
IntegerProp: Integer;
BooleanProp: Boolean;
EnumProp: TEnumTest;
SetProp: TSetTest;
ArrOfStringsProp: TArray<String>;
ArrOfIntegersProp: TArray<Integer>;
ArrOfBooleansProp: TArray<Boolean>;
ArrOfDateProp: TArray<TDate>;
ArrOfTimeProp: TArray<TTime>;
ArrOfDateTimeProp: TArray<TDateTime>;
NestedRecProp: TNestedRec;
function ToString: String;
constructor Create(Value: Integer);
end;

TTestRecDynArray = TArray<TTestRec>;

TTestRecArray = array [0 .. 1] of TTestRec;

TNestedArraysRec = record
TestRecProp: TTestRec;
ArrayProp1: TArray<TTestRec>;
ArrayProp2: TArray<TTestRec>;
function ToString: String;
end;

implementation

uses
System.SysUtils, System.TypInfo;

{ TPersonRec }

constructor TTestRec.Create(Value: Integer) ;
begin
StringProp := 'StringProp' + Value.ToString;
IntegerProp := Value;
BooleanProp := True;
EnumProp := TEnumTest(Value mod 3);
SetProp := [TEnumTest(Value mod 3), TEnumTest((Value+1) mod 3)];
ArrOfStringsProp := ['ArrOfStringsProp' + Value.ToString, 'ArrOfStringsProp' + Value.ToString];
ArrOfIntegersProp := [Value mod 3, (Value + 1 ) mod 3, (Value + 2 ) mod 3];
ArrOfBooleansProp := [((Value mod 3) = 1), ((Value + 1) mod 3 = 1), ((Value + 2) mod 3 = 1)];
ArrOfDateProp := [
EncodeDate(2022,(Value mod 11)+1, Value mod 28),
EncodeDate(2022,((Value+1) mod 11)+1, (Value+1) mod 28),
EncodeDate(2022,((Value+2) mod 11)+1, (Value+2) mod 28)
];
ArrOfTimeProp := [
EncodeTime(Value mod 24, Value mod 60, Value mod 60, 0),
EncodeTime((Value + 1) mod 24, (Value + 1) mod 60, (Value + 1) mod 60, 0),
EncodeTime((Value + 2) mod 24, (Value + 2) mod 60, (Value + 2) mod 60, 0)
];
ArrOfDateTimeProp := [
ArrOfDateProp[0] + ArrOfTimeProp[0],
ArrOfDateProp[1] + ArrOfTimeProp[1],
ArrOfDateProp[2] + ArrOfTimeProp[2]
];
NestedRecProp := TNestedRec.Create(Value + 1);
end;

function TTestRec.ToString: String;
function SetPropAsString: String;
var
lEl: TEnumTest;
begin
for lEl in SetProp do
begin
Result := Result + GetEnumName(TypeInfo(TEnumTest), Ord(lEl)) + ',';
end;
Result := Result.Remove(Result.Length - 1);
end;
var
I: Integer;
begin
Result :=
'StringProp = ' + self.StringProp + sLineBreak +
'IntegerProp = ' + self.IntegerProp.ToString + sLineBreak +
'BooleanProp = ' + self.BooleanProp.ToString(TUseBoolStrs.True) + sLineBreak +
'EnumProp = ' + GetEnumName(TypeInfo(TEnumTest), Ord(EnumProp)) + sLineBreak +
'SetProp = ' + SetPropAsString + sLineBreak;

Result := Result + 'ArrOfStringsProp = ';
for I := Low(ArrOfStringsProp) to High(ArrOfStringsProp) do
begin
Result := Result + ArrOfStringsProp[I] + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfIntegersProp = ';
for I := Low(ArrOfIntegersProp) to High(ArrOfIntegersProp) do
begin
Result := Result + ArrOfIntegersProp[I].ToString() + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfBooleansProp = ';
for I := Low(ArrOfBooleansProp) to High(ArrOfBooleansProp) do
begin
Result := Result + ArrOfBooleansProp[I].ToString(TUseBoolStrs.True) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfDateProp = ';
for I := Low(ArrOfDateProp) to High(ArrOfDateProp) do
begin
Result := Result + DateToStr(ArrOfDateProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfTimeProp = ';
for I := Low(ArrOfTimeProp) to High(ArrOfTimeProp) do
begin
Result := Result + TimeToStr(ArrOfTimeProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfDateTimeProp = ';
for I := Low(ArrOfDateTimeProp) to High(ArrOfDateTimeProp) do
begin
Result := Result + DateTimeToStr(ArrOfDateTimeProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'NestedRecProp **> ' + sLineBreak;
Result := Result + NestedRecProp.ToString();
end;

{ TChildRec }

constructor TNestedRec.Create(Value: Integer);
begin
StringProp := 'StringProp' + Value.ToString;
IntegerProp := Value;
BooleanProp := True;
EnumProp := TEnumTest(Value mod 3);
SetProp := [TEnumTest(Value mod 3), TEnumTest((Value+1) mod 3)];
ArrOfStringsProp := ['ArrOfStringsProp' + Value.ToString, 'ArrOfStringsProp' + Value.ToString];
ArrOfIntegersProp := [Value mod 3, (Value + 1 ) mod 3, (Value + 2 ) mod 3];
ArrOfBooleansProp := [((Value mod 3) = 1), ((Value + 1) mod 3 = 1), ((Value + 2) mod 3 = 1)];
ArrOfDateProp := [
EncodeDate(2022,(Value mod 11)+1, Value mod 28),
EncodeDate(2022,((Value+1) mod 11)+1, (Value+1) mod 28),
EncodeDate(2022,((Value+2) mod 11)+1, (Value+2) mod 28)
];
ArrOfTimeProp := [
EncodeTime(Value mod 24, Value mod 60, Value mod 60, 0),
EncodeTime((Value + 1) mod 24, (Value + 1) mod 60, (Value + 1) mod 60, 0),
EncodeTime((Value + 2) mod 24, (Value + 2) mod 60, (Value + 2) mod 60, 0)
];
ArrOfDateTimeProp := [
ArrOfDateProp[0] + ArrOfTimeProp[0],
ArrOfDateProp[1] + ArrOfTimeProp[1],
ArrOfDateProp[2] + ArrOfTimeProp[2]
];
end;

function TNestedRec.ToString: String;
function SetPropAsString: String;
var
lEl: TEnumTest;
begin
for lEl in SetProp do
begin
Result := Result + GetEnumName(TypeInfo(TEnumTest), Ord(lEl)) + ',';
end;
Result := Result.Remove(Result.Length - 1);
end;
var
I: Integer;
begin
Result :=
'StringProp = ' + self.StringProp + sLineBreak +
'IntegerProp = ' + self.IntegerProp.ToString + sLineBreak +
'BooleanProp = ' + self.BooleanProp.ToString(TUseBoolStrs.True) + sLineBreak +
'EnumProp = ' + GetEnumName(TypeInfo(TEnumTest), Ord(EnumProp)) + sLineBreak +
'SetProp = ' + SetPropAsString + sLineBreak;

Result := Result + 'ArrOfStringsProp = ';
for I := Low(ArrOfStringsProp) to High(ArrOfStringsProp) do
begin
Result := Result + ArrOfStringsProp[I] + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfIntegersProp = ';
for I := Low(ArrOfIntegersProp) to High(ArrOfIntegersProp) do
begin
Result := Result + ArrOfIntegersProp[I].ToString() + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfBooleansProp = ';
for I := Low(ArrOfBooleansProp) to High(ArrOfBooleansProp) do
begin
Result := Result + ArrOfBooleansProp[I].ToString(TUseBoolStrs.True) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfDateProp = ';
for I := Low(ArrOfDateProp) to High(ArrOfDateProp) do
begin
Result := Result + DateToStr(ArrOfDateProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfTimeProp = ';
for I := Low(ArrOfTimeProp) to High(ArrOfTimeProp) do
begin
Result := Result + TimeToStr(ArrOfTimeProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;

Result := Result + 'ArrOfDateTimeProp = ';
for I := Low(ArrOfDateTimeProp) to High(ArrOfDateTimeProp) do
begin
Result := Result + DateTimeToStr(ArrOfDateTimeProp[I]) + ',';
end;
Result := Result.Remove(Result.Length - 1) + sLineBreak;
end;

{ TNestedArraysRec }

function TNestedArraysRec.ToString: String;
var
I: Integer;
begin
Result := '-- TestRecProp -- ' + sLineBreak + TestRecProp.ToString + sLineBreak;
Result := Result + sLineBreak + '-- ArrayProp1 -- ' + sLineBreak;
for I := Low(ArrayProp1) to High(ArrayProp1) do
begin
Result := Result + 'ITEM ' + I.ToString + sLineBreak + ArrayProp1[I].ToString + sLineBreak;
end;
Result := Result + sLineBreak + '-- ArrayProp2 -- ' + sLineBreak;
for I := Low(ArrayProp2) to High(ArrayProp2) do
begin
Result := Result + 'ITEM ' + I.ToString + sLineBreak + ArrayProp2[I].ToString + sLineBreak;
end;
end;

end.
Loading

0 comments on commit 2758b2b

Please sign in to comment.