Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/Test_GoogleCal.pm

package DivBasicF::Test_GoogleCal;

use strict;
use DivBasicF::GoogleCal;

#use JSON;
#use Math::Round;

use constant VERSION => [ 1, "all" ];
### token to identify this file as a test module
### TEST_ID = "GoogleCal";

sub new {
	my $class = shift;
	my $self  = {};

	$self->{'ACCOUNTS'} = {
		't2d1@trash-mail.com' => 'h3ndf9456',
		't2d2@trash-mail.com' => 'j83m9dn85'
	};

	$self->{'USERS'}     = [ keys( %{ $self->{'ACCOUNTS'} } ) ];
	$self->{'PASSWORDS'} = [ values( %{ $self->{'ACCOUNTS'} } ) ];
	$self->{'CALENDARS'} = [];
	my @gc_new = [];
	for ( my $i = 0 ; $i < @{ $self->{'USERS'} } ; $i++ ) {
		push( @{ $self->{'CALENDARS'} }, "default" );  # default scheint hier die beste loesung zu sein
		push( @gc_new, "default" );              #"c$i");
		push( @gc_new, $self->{'USERS'}[$i] );
	}

	$self->{_cal} = DivBasicF::GoogleCal->new(@gc_new);
	
	$self->{json} = new JSON;

	bless( $self, $class );
	return ($self);
}
#########################################################################
sub auth {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] && $pars[1] ) {    # direkt mit Zugangsdaten einloggen
		$self->{_cal} = DivBasicF::GoogleCal->new( cal => $pars[0] );
		return $self->{_cal}->auth( $pars[0], $pars[1] );
	}
	else {
		return $self->{_cal}->auth( $self->{'USERS'}[ $pars[0] ], $self->{'PASSWORDS'}[ $pars[0] ] );
	}
}

#########################################################################
# transformiert das Datumsformat DD.MM.JJJJ zu JJJJ-MM-DD
sub parse_date {
	my $self = shift;
	my $date = shift;

	my ( $d, $m, $j ) = split( /\./, $date );
	$d = "0$d" if ( $d < 10 );
	$m = "0$m" if ( $m < 10 );
	return "$j-$m-$d";
}
#########################################################################
# wandelt ein Integer in das Zeit-Format hh:mm:ss um (muss zwischen 0 und 86400 liegen)
sub parse_time {
	my $self = shift;
	my $time = shift;

	my $h = int( $time / 3600 );
	$time = $time - $h * 3600;
	my $m = int( $time / 60 );
	$time = $time - $m * 60;
	my $s = int($time);
	$h = "0$h" if $h < 10;
	$m = "0$m" if $m < 10;
	$s = "00";    #$s = "0$s" if $s<10;
	return "$h:$m:$s";
}

################################################
################################################
sub run {
	my $self    = shift;
	my $area1   = shift;
	my $area2   = shift;
	my $dyndata = shift;

	my $testname = shift(@$area1); #print "tn $testname\n";
	
	# check version
	unless ( @$area2[0] eq VERSION->[0] and @$area2[1] eq VERSION->[1] ) {
		return ( 10, "Version mismatch!" );
	}

	# map the functions
	if ( $testname eq "test_create_and_delete" ) {
		my @ret = $self->test_00004( @$area1, $dyndata );
		return @ret;
	} elsif ( $testname eq "random") {
		return $self->test_random(@$area1, $dyndata);
	}

}

sub generate {
	my $self   = shift;
	my $params = shift;
	
	my $testname = @$params[0];
	
	if ( $testname eq "test_create_and_delete" ) {
		
			my $dyndata = {"title"=>"test_title_".(100000+int rand(899990)),
				"content"=>"test_content_".(100000+int rand(899990)),
				"place"=>"test_place_".(100000+int rand(899990))
			};

			return $self->{json}->encode($dyndata);
	} elsif ( $testname eq "random") {
		my $count = @$params[1];
		my $date = @$params[2];
		my $time = @$params[3];
		
		my $path = {
			"authentificate"	 => ["create"],
			"create" => ["check_exists"],
			"delete" => ["check_deleted"],
			"check_exists" => ["delete"],
			"check_deleted" => ["create"]
		};
		
		my $last = "authentificate";
		my $code = "$last;";
		
		while ($count > 0) {
			my $opts = $path->{$last};
			my $index = rand @$opts;
			my $next = @$opts[$index];
			
			$last = $next;
			
			$code.=$next.";";
			
			$count--;
		}
		
		$code .= "check_results;";
		
		my $r = round(	rand (@{$self->{'USERS'}}-1));
		my $participants = round(	rand (@{$self->{'USERS'}}-1)); # -1 as the 'main' user is always in
		$participants = 1 if $participants==0;
		
		my @particps = [$self->{'USERS'}[$r] ];
		while ($participants>0) {
			my $p = round(	rand (@{$self->{'USERS'}}-1));
			
		}
		
		my $dyndata = {
				"title" 	=> 	"test_title_".(100000+int rand(899990)),
				"content" 	=>	"test_content_".(100000+int rand(899990)),
				"place"		=>	"test_place_".(100000+int rand(899990)),
				"date"		=> 	$date,
				"time"		=> 	$time,
				"user" 		=>	$r,
				"participants"=>	$self->{'USERS'}[$r],
				"code" 		=>	 $self->add_self($code),
				"added_entries" => [],
				"deleted_entries" => [],
				"results" => []
		};
		my $dd = $self->{json}->encode($dyndata);
#		print $dd."\n";
		return $dd;
	}
}

sub find_entry {
	my ( $self, $calendar, $timerange, $cal_idr ) = @_;
	my $entr = $self->{_cal}->find_entry( $calendar, $timerange );

	my $entry_to_ret = 0;

	foreach my $en (@$entr) {
		if ( $en->{'IDR'} eq $cal_idr ) {
			$entry_to_ret = $en;
		}
	}
	
	return $entry_to_ret;
}

sub test_00001 {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Ungueltiger Login");
	}

	my $oldcal = $self->{_cal};    # den alten Kalender zwischenspeichern

	$self->{_cal} = DivBasicF::GoogleCal->new( cal => "lghe\@a576345.com" );

	my $ret = $self->auth( "lghe\@a576345.com", "deuukln8" );

	$self->{_cal} = $oldcal;       # und wiederherstellen

	if ( !$ret ) {
		return ( 0, "SUCCESS" );
	}
	else {
		return ( 1000, "ERROR: Keine richtige Anzeige eines ungueltigen Logins!". __LINE__ );
	}

	#  return(10,"Could not execute Test because of ...");
	#  return(11,"Could not execute Test because of ...");
	#  return(12,"Could not execute Test because of ...");
	#  return(1000,"ERROR: ...");
	#  return(1001,"ERROR: ...");
}
#########################################################################
sub test_00002 {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Login");
	}

	my $ret = $self->auth(0);

	if ($ret) {
		return ( 0, "SUCCESS" );
	}
	else {
		return ( 1001, "ERROR: Konnte sich nicht einloggen!" . __LINE__ );
	}
}
#########################################################################
sub test_00003 {
	my $self = shift;
	my @pars = @_;
	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Ob die Kalenderliste zurueckgegeben wird.");
	}

	# Annahme: der Login von letzten Test hat funktioniert
	if ( $self->{_cal}->calendarlist() ) {
		return ( 0, "SUCCESS" );
	}
	else {
		return ( 1002,"ERROR: Konnte die Kalenderliste nicht bekommen!" . __LINE__ );
	}
}
#########################################################################
sub test_00004 {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Kombination von Anlegen und Loeschen von Eintraegen.");
	}

	my ( $date, $time, $dyndata ) = @pars;
	$date = $self->parse_date($date);

	my $time2 = $self->parse_time( $time + 3600 );    # fuer die Endzeit (eine Stunde spaeter)
	$time = $self->parse_time($time);
	my $start = $date . "T" . $time;
	my $end   = $date . "T" . $time2;

	my $user    = 0;

	my $dyndata = $self->{json}->decode($dyndata);
	my $title   = $dyndata->{"title"};
	my $content = $dyndata->{"content"};
	my $place   = $dyndata->{"place"};

	$self->auth($user) or return ( 1001,"ERROR: konnte sich nicht als User $self->{'USERS'}[$user] einloggen". __LINE__ );

	#einen Eintrag anlegen
	my $result = $self->{_cal}->create_entry( $self->{'CALENDARS'}[$user],
		$title, $content, $place, $start, $end, 0, $self->{'USERS'}[$user] );

	#diesen Eintrag finden (sollte klappen)
	$date =~ s/-//g;    #alle '-' entfernen, um das Format fuer die Suchanfrage zu bekommen
	my $entr = $self->find_entry($self->{'CALENDARS'}[$user],"$date-$date",$result);

	return ( 1005,"ERROR: konnte den angelegten Eintrag nicht finden!" . __LINE__ ) unless $entr;    #(@$entr);

	#den gefundenen Eintrag loeschen
	$self->{_cal}->delete_entry( $entr, 0 );               #delete without notification

	#diesen Eintrag finden (sollte nicht klappen)
	my $entr2 = $self->find_entry( $self->{'CALENDARS'}[$user], "$date-$date", $result);

	return ( 1006, "ERROR: Der Eintrag, der gerade geloescht werden sollte, wurde immer noch gefunden". __LINE__ ) if $entr2;

	return ( 0, "SUCCESS" );

}
#########################################################################
sub test_00005 {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Kombination von Anlegen und Loeschen von Eintraegen mit einem weiteren Teilnehmer.");
	}

	# als User 1 einloggen
	$self->auth(0) or return ( 1001,"ERROR: konnte sich nicht als User 1 einloggen" . __LINE__ );

	# einen Eintrag mit User 2 als Teilnehmer anlegen
	$self->{_cal}->create_entry(
		"default",               "test_00005",
		"content of test_00005", "place of test_00005",
		"2008-12-17T10:00:00",   "2008-12-17T11:00:00",
		1,                       "t2d1\@trash-mail.com",
		"t2d2\@trash-mail.com"
	);

	# diesen Eintrag selber finden
	my $entr = $self->{_cal}->find_entry( "default", "20081217-20081217" );
	return ( 1005,"ERROR: konnte den angelegten Eintrag nicht finden!" . __LINE__ )  unless (@$entr);

	# sich als User 2 einloggen
	$self->auth(1) or return ( 1001, "ERROR: konnte sich nicht als User 2 einloggen" . __LINE__ );

	# den Eintrag finden
	my $entr2 = $self->{_cal}->find_entry( "default", "20081217-20081217" );
	return ( 1005, "ERROR: konnte den angelegten Eintrag nicht finden!" . __LINE__ ) unless (@$entr2);

	# wieder als User 1 einloggen
	$self->auth(0)  or return ( 1001, "ERROR: konnte sich nicht als User 1 einloggen" . __LINE__ );

	# den vorher gefundenen Eintrag loeschen
	$self->{_cal}->delete_entry( $entr->[0], 0 );

	# versuche, diesen Eintrag zu finden (sollte NICHT funktionieren)
	my $entr3 = $self->{_cal}->find_entry( "default", "20081216-20081216" );
	return ( 1006, "ERROR: Der Eintrag, der gerade geloescht werden sollte, wurde immer noch gefunden" . __LINE__ ) if (@$entr3);

	# als User 2 einloggen
	$self->auth(1) or return ( 1001, "ERROR: konnte sich nicht als User 2 einloggen" );

	# versuche, diesen Eintrag zu finden (sollte NICHT funktionieren)
	my $entr4 = $self->{_cal}->find_entry( "default", "20081217-20081217" );
	return ( 1006, "ERROR: Der Eintrag, der gerade geloescht werden sollte, wurde immer noch gefunden" . __LINE__ ) if (@$entr4);

	return ( 0, "SUCCESS" );
}
#########################################################################
sub test_00006 {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Titel und Beschreibung eines Eintrags aendern");
	}

	$self->auth(0)
	  or return ( 1001,
		"ERROR: konnte sich nicht als User 1 einloggen" . __LINE__ );

	$self->{_cal}->create_entry(
		"c1",                    "test_00006",
		"content of test_00006", "place of test_00006",
		"2008-12-18T10:00:00",   "2008-12-18T11:00:00",
		0,                       "t2d1\@trash-mail.com"
	);

	my $entr = $self->{_cal}->find_entry( "c1", "20081218-20081218" );
	return ( 1005,"ERROR: konnte den angelegten Eintrag nicht finden!" . __LINE__ )  unless (@$entr);

	my $title     = $entr->[0]->{'TITLE'};
	my $nexttitle = "random title";

	my $ch = { 'T' => $nexttitle };
	$self->{_cal}->change_entry( @$entr, $ch );
	$self->{_cal}->update_entry(@$entr);

	my $entr2 = $self->{_cal}->find_entry( "c1", "20081218-20081218" );
	return ( 1005,"ERROR: konnte den angelegten Eintrag nicht finden!" . __LINE__ ) unless (@$entr2);

	( $entr2->[0]->{'TITLE'} == $nexttitle ) or return ( 1007, "ERROR: der Title des Eintrags wurde nicht geaendert!" );

	$self->{_cal}->delete_entry(@$entr2);

	return ( 0, "SUCCESS" );
}
#########################################################################
sub add_self {
	my $self = shift;
	my $str = shift;
	my $ret = "";
	foreach my $o (split(/\;/,$str)) {
			if ($o eq "check_results") {
				$ret.="\@jdata=\$self->$o(\$jdata);";
			} elsif ($o) {
				$ret.="\$jdata=\$self->$o(\$jdata);";
			}
	}
	return $ret;
}

sub test_random {
	my $self = shift;
	my @pars = @_;

	if ( $pars[0] eq "___DESCRIPTION___" ) {
		return ("Kombination von Anlegen und Loeschen von Eintraegen.");
	}

	my ( $count, $date, $time, $jdata ) = @pars;

	my $dyndata = $self->{json}->decode($jdata);
	my $user	= $dyndata->{"user"};
	my $title   = $dyndata->{"title"};
	my $content = $dyndata->{"content"};
	my $place   = $dyndata->{"place"};
	my $code 	= $dyndata->{"code"};
	
	my @jdata;
	eval($code); # last code line must return "@jdata"
	return @jdata;
}

sub result_ok {
	my $self = shift;
	my $jdata = shift;
	my $data = $self->{json}->decode($jdata);
	push(@{$data->{"results"}}, [0, "SUCCESS"]);
	return $self->{json}->encode($data);
}

sub result_bad {
	my $self = shift;
	my $jdata = shift;
	my $result = shift;
	my $data = $self->{json}->decode($jdata);
	push(@{$data->{"results"}}, $result);
	return $self->{json}->encode($data);
}

sub check_results {
	my $self = shift;
	my $jdata = shift;
	my $data = $self->{json}->decode($jdata);
	my $results = $data->{"results"};

	foreach my $res (@$results) {
		if (@$res[0] != 0) {
			return @$res;
		}
	}
	
	return (0,"SUCCESS");
}

sub authentificate {
	my $self = shift;
	my $jdata = shift;
	
	my $data = $self->{json}->decode($jdata);
	
	if (! $self->auth($data->{"user"}) )  {
		return $self->result_bad($jdata,[1001,"ERROR: konnte sich nicht als User 1 einloggen" . __LINE__ ] );
	}
	
	return $self->result_ok($jdata);
}

sub create {
	my $self = shift;
	my $jdata = shift;
	
	my $data = $self->{json}->decode($jdata);
	my $date = $self->parse_date($data->{"date"});

	my $time2 = $self->parse_time( $data->{"time"} + 3600 );    # fuer die Endzeit (eine Stunde spaeter)
	my $time = $self->parse_time($data->{"time"});
	my $start = $date . "T" . $time;
	my $end   = $date . "T" . $time2;

	my $title   = $data->{"title"};
	my $content = $data->{"content"};
	my $place   = $data->{"place"};

	#einen Eintrag anlegen
	my $result = $self->{_cal}->create_entry( $self->{'CALENDARS'}[$data->{"user"}],
		$title, $content, $place, $start, $end, 0, $self->{'USERS'}[$data->{"user"}] );
		
	push( @{$data->{"added_entries"}}, $result);
	
	$jdata = $self->{json}->encode($data);
	
	return $self->result_ok($jdata);
}

sub check_exists {
	my $self = shift;
	my $jdata = shift;

	my $data = $self->{json}->decode($jdata);
#	my @added_entries = $data->{"added_entries"};
	my $date = $self->parse_date($data->{"date"});
	$date =~ s/-//g;    #alle '-' entfernen, um das Format fuer die Suchanfrage zu bekommen
	
	foreach my $entry (@{$data->{"added_entries"}}) {
		my $entr = $self->find_entry($self->{'CALENDARS'}[$data->{"user"}],"$date-$date",$entry);
		if (! $entr) {
			return $self->result_bad($jdata,[1005,"ERROR: konnte den angelegten Eintrag nicht finden!"]);
		}
	}
	return $self->result_ok($jdata);
}

sub delete {
	my $self = shift;
	my $jdata = shift;

	my $data = $self->{json}->decode($jdata);
	
	my $date = $self->parse_date($data->{"date"});
	$date =~ s/-//g;
	my $entry = shift @{$data->{"added_entries"}};
	my $entr = $self->find_entry($self->{'CALENDARS'}[$data->{"user"}],"$date-$date",$entry); #only search for the first entry, hence delete it
	$self->{_cal}->delete_entry( $entr, 0 );
	
	push(@{$data->{"deleted_entries"}},$entry);
	
	$jdata = $self->{json}->encode($data);
	return $self->result_ok($jdata);
}

sub check_deleted {
	my $self = shift;
	my $jdata = shift;

	my $data = $self->{json}->decode($jdata);
	my @deleted_entries = $data->{"deleted_entries"};
	my $date = $self->parse_date($data->{"date"});
	$date =~ s/-//g;    #alle '-' entfernen, um das Format fuer die Suchanfrage zu bekommen
	
	foreach my $entry (@deleted_entries) {
		my $entr = $self->find_entry($self->{'CALENDARS'}[$data->{"user"}],"$date-$date",$entry);
		if ($entr) {
			return $self->result_bad($jdata,[1006,"Der Eintrag, der gerade geloescht werden sollte, wurde immer noch gefunden"]);
		}
	}
	return $self->result_ok($jdata);
}

1;


bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net