OwlCyberSecurity - MANAGER
Edit File: test_add_ccs_cal_event
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - /opt/cpanel-ccs/bin/test_add_ccs_cal_event # Copyright 2019 cPanel, L.L.C. # All rights Reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited use strict; use warnings; use Getopt::Long (); use Cpanel::UUID (); use HTTP::Request; use HTTP::Headers; use LWP::UserAgent; use IO::Socket::SSL; use lib '/var/cpanel/perl'; use Cpanel::CCS::Userdata (); sub usage { my ($msg) = @_; print "Error: $msg\n" if defined $msg; print "usage: add_ccs_cal_event.pl --date=seconds_in_future --event=title --user=user_email_address --password=password --calendar_base_url=https://myccs.tld:2080\n"; return 1 if defined $msg; return 0; } sub get_timestamp { my ($time) = @_; my ( $s_sec, $s_min, $s_hour, $s_mday, $s_mon, $s_year, $s_wday, $s_yday, $s_isdst ) = localtime($time); $s_mon++; $s_year += 1900; my $s_date = sprintf( "%04d%02d%02dT%02d%02d%02d", $s_year, $s_mon, $s_mday, $s_hour, $s_min, $s_sec ); return $s_date; } sub script { my (@argv) = @_; local $| = 1; my $date; my $event; my $user; my $calendar_base_url; my $password; my $help; my $opts = Getopt::Long::GetOptionsFromArray( \@argv, 'date=n' => \$date, 'event=s' => \$event, 'user=s' => \$user, 'password=s' => \$password, 'calendar_base_url=s' => \$calendar_base_url, 'help' => \$help, ) or return ( usage("Invalid parameters") ); if ( defined $help ) { return ( usage() ); } return usage("need date") if !defined $date; return usage("need event") if !defined $event; return usage("need user") if !defined $user; return usage("need password") if !defined $password; return usage("need calendar_base_url") if !defined $calendar_base_url; my $users = Cpanel::CCS::Userdata::get_users(); my $nowtime = time(); my $s_timestamp = get_timestamp( $nowtime + $date ); my $e_timestamp = get_timestamp( $nowtime + $date + 3600 ); my $c_timestamp = get_timestamp($nowtime); my $c_timestamp_z = get_timestamp($nowtime) . 'Z'; my $user_uuid = $users->{$user}->{'uuid'}; my $ics_uuid = Cpanel::UUID::random_uuid(); my $template = qq{ BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CPANEL.NET//NONSGML Version 1//EN BEGIN:VEVENT UID:$ics_uuid DTSTART;TZID=America/Chicago:$s_timestamp DTEND;TZID=America/Chicago:$e_timestamp DTSTAMP:$c_timestamp_z CREATED:$c_timestamp_z SUMMARY:$event TRANSP:OPAQUE END:VEVENT END:VCALENDAR }; my $url = $calendar_base_url . "/calendars/__uids__/$user_uuid/calendar/$ics_uuid.ics"; print $template . "\n"; print $url . "\n"; my $ret; my $h = HTTP::Headers->new(); $h->header( 'Content-Type' => 'text/calendar; charset=utf-8' ); my $request = HTTP::Request->new( 'PUT', $url, $h, $template ); $request->authorization_basic( $user, $password ); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0, SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE, }, ); my $response = $ua->request($request); my $code = $response->code; my $content = $response->content; print "CODE :$code:\n$content\n"; return 0; } exit( script(@ARGV) ) unless caller(); 1;