Net-FullAuto
view release on metacpan or search on metacpan
lib/Net/FullAuto/ISets/Amazon/ClipBucket_is.pm view on Meta::CPAN
package Net::FullAuto::ISets::Amazon::ClipBucket_is;
### OPEN SOURCE LICENSE - GNU AFFERO PUBLIC LICENSE Version 3.0 #######
#
# Net::FullAuto - Distributed Workload Automation Software
# Copyright © 2000-2026 Brian M. Kelly
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Affero General Public License
# as published by the Free Software Foundation, either version 3 of
# the License, or any later version.
#
# This program is distributed in the hope that it will be useful,
# but **WITHOUT ANY WARRANTY**; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License along with this program. If not, see:
# <http://www.gnu.org/licenses/agpl.html>.
#
#######################################################################
our $VERSION='0.01';
our $DISPLAY='CLIPBUCKET';
our $CONNECT='secure';
our $defaultInstanceType='t2.micro';
my $service_and_cert_password='Full@ut0O1';
use 5.005;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($select_clipbucket_setup);
use File::HomeDir;
use JSON::XS;
use POSIX qw(strftime);
my $home_dir=File::HomeDir->my_home.'/';
use Net::FullAuto::Cloud::fa_amazon;
# https://thechamberlands.net/video-streaming/
# https://github.com/jwplayer/jwplayer
my $configure_clipbucket=sub {
my $server_type=$_[0];
my $cnt=$_[1];
my $selection=$_[2]||'';
my $region=$_[4]||'';
my $verified_email=$_[5]||'';
my $permanent_ip=$_[6]||'';
my $site_name=$_[7]||'';
my $site_profile=$_[8]||'';
my $site_build=$_[9]||'';
$service_and_cert_password=$_[10]||'';
my $twitter_api_key=$_[11]||'';
my $twitter_api_sec=$_[12]||'';
my $sudo='sudo ';
if ($site_profile=~/Commmunity/) {
$site_profile='community';
} elsif ($site_profile=~/Public/) {
$site_profile='public';
} elsif ($site_profile=~/Single/) {
$site_profile='singleuser';
} elsif ($site_profile=~/Private/) {
$site_profile='private';
}
$permanent_ip='' if $permanent_ip=~/Stay|Reason/;
if (exists $main::aws->{permanent_ip}) {
$permanent_ip=$main::aws->{permanent_ip};
}
my $handle=$main::aws->{$server_type}->[$cnt]->[1];
my $local=connect_shell();
my ($stdout,$stderr)=('','');
($stdout,$stderr)=$handle->cmd("sudo yum -y update",'__display__');
($stdout,$stderr)=$handle->cmd("sudo yum clean all",'__display__');
($stdout,$stderr)=$handle->cmd("sudo yum grouplist hidden",'__display__');
($stdout,$stderr)=$handle->cmd("sudo yum groups mark convert",
'__display__');
($stdout,$stderr)=$handle->cmd(
'sudo yum -y install cyrus-sasl-plain sendmail-cf m4 java java-devel',
'__display__');
# https://www.unixmen.com/setup-your-own-youtube-clone-website-using-clipbucket/
# http://opensourceeducation.net/clip-bucket-2-8-on-ubuntu-14-04-with-nginx-php5-fpm-on-digitalocean-vps/
my $install_clipbucket=<<'END';
o o o .oPYo. ooooo .oo o o o o o .oPYo.
8 8b 8 8 8 .P 8 8 8 8 8b 8 8 8
8 8`b 8 `Yooo. 8 .P 8 8 8 8 8`b 8 8
8 8 `b 8 `8 8 oPooo8 8 8 8 8 `b 8 8 oo
8 8 `b8 8 8 .P 8 8 8 8 8 `b8 8 8
8 8 `8 `YooP' 8 .P 8 8oooo 8oooo 8 8 `8 `YooP8
........................................................
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
http://clipbucket.com
_____ _ _______ ____ _ _ _____ _ __ ______ _______
/ ____| | | | __ \| _ \| | | |/ ____| | / /| ____|__ __|
/ / | | | | |__) | |_) | | | | | | |/ / | |__ | |
lib/Net/FullAuto/ISets/Amazon/ClipBucket_is.pm view on Meta::CPAN
$handle->cmd("echo");
$handle->{_cmd_handle}->print('mysql -u root -p 2>&1');
my $first_pass=0;
my $second_pass=0;
my $third_pass=0;
my $fourth_pass=0;
while (1) {
my $output=Net::FullAuto::FA_Core::fetch($handle);
last if $output=~/$prompt/ && $first_pass;
print $output;
if (-1<index $output,'Enter password:') {
$handle->{_cmd_handle}->print();
next;
} elsif (-1<index $output,'none') {
if (!$first_pass) {
$handle->{_cmd_handle}->print('CREATE DATABASE clipbucket;');
$first_pass=1;
} elsif (!$second_pass) {
$handle->{_cmd_handle}->print(
'GRANT USAGE ON clipbucket.* TO clipbucket@localhost'.
" IDENTIFIED BY \'$service_and_cert_password\';");
$second_pass=1;
} elsif (!$third_pass) {
$handle->{_cmd_handle}->print(
'GRANT ALL PRIVILEGES ON clipbucket.* TO clipbucket@localhost;');
$third_pass=1;
} elsif (!$fourth_pass) {
$handle->{_cmd_handle}->print('flush privileges;');
$fourth_pass=1;
} else {
$handle->{_cmd_handle}->print('exit;');
}
}
}
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s#127.0.0.1:9000#/var/run/php-fpm/php5-fpm.sock#\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s/;listen.owner = nobody/listen.owner = ec2-user/\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s/;listen.group = nobody/listen.group = ec2-user/\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s/user = apache/user = ec2-user/\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s/group = apache/group = ec2-user/\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}sed -i \'s/;listen.mode = 0660/listen.mode = 0664/\' ".
'/etc/php-fpm-5.5.d/www.conf');
($stdout,$stderr)=$handle->cmd(
"${sudo}chgrp -Rv ec2-user /var/lib/php/5.5/session ".
'/var/lib/php/5.5/wsdlcache','__display__');
($stdout,$stderr)=$handle->cwd("/var/www/clipbucket");
($stdout,$stderr)=$handle->cmd("${sudo}chgrp -v ec2-user .");
($stdout,$stderr)=$handle->cmd("${sudo}chmod -v g+w .");
($stdout,$stderr)=$handle->cwd("~");
#
# echo-ing/streaming files over ssh can be tricky. Use echo -e
# and replace these characters with thier HEX
# equivalents (use an external editor for quick
# search and replace - and paste back results.
# use copy/paste or cat file and copy/paste results.):
#
# ! - \\x21 ` - \\x60 * - \\x2A
# " - \\x22 \ - \\x5C
# $ - \\x24 % - \\x25
#
# https://www.lisenet.com/2014/ - bash approach to conversion
my ($hash,$output,$error)=('','','');
$c="aws iam list-access-keys --user-name clipbucket_email";
($hash,$output,$error)=run_aws_cmd($c);
$hash||={};
foreach my $hash (@{$hash->{AccessKeyMetadata}}) {
my $c="aws iam delete-access-key --access-key-id $hash->{AccessKeyId} ".
"--user-name clipbucket_email";
($hash,$output,$error)=run_aws_cmd($c);
}
sleep 1;
$c="aws iam delete-user --user-name clipbucket_email";
($hash,$output,$error)=run_aws_cmd($c);
$c="aws iam create-user --user-name clipbucket_email";
($hash,$output,$error)=run_aws_cmd($c);
$c="aws iam create-access-key --user-name clipbucket_email";
($hash,$output,$error)=run_aws_cmd($c);
$hash||={};
my $access_id=$hash->{AccessKey}->{AccessKeyId};
my $secret_access_key=$hash->{AccessKey}->{SecretAccessKey};
my $java_smtp_generator=<<END;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
public class SesSmtpCredentialGenerator {
// From http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html
private static final String KEY_ENV_VARIABLE = \\x22AWS_SECRET_ACCESS_KEY\\x22; // Put your AWS secret access key in this environment variable.
private static final String MESSAGE = \\x22SendRawEmail\\x22; // Used to generate the HMAC signature. Do not modify.
private static final byte VERSION = 0x02; // Version number. Do not modify.
public static void main(String[] args) {
// Get the AWS secret access key from environment variable AWS_SECRET_ACCESS_KEY.
String key = System.getenv(KEY_ENV_VARIABLE);
if (key == null)
{
System.out.println(\\x22Error: Cannot find environment variable AWS_SECRET_ACCESS_KEY.\\x22);
System.exit(0);
}
// Create an HMAC-SHA256 key from the raw bytes of the AWS secret access key.
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), \\x22HmacSHA256\\x22);
try {
// Get an HMAC-SHA256 Mac instance and initialize it with the AWS secret access key.
Mac mac = Mac.getInstance(\\x22HmacSHA256\\x22);
mac.init(secretKey);
lib/Net/FullAuto/ISets/Amazon/ClipBucket_is.pm view on Meta::CPAN
};
return $email_message;
};
our $clipbucket_enter_domain_name=sub {
my $clipbucket_domain_banner=<<'END';
___ _ ___ _ _ _
| __|_ _| |_ ___ _ _ | \ ___ _ __ __ _(_)_ _ | \| |__ _ _ __ ___
| _|| ' \ _/ -_) '_| | |) / _ \ ' \/ _` | | ' \ | .` / _` | ' \/ -_)
|___|_||_\__\___|_| |___/\___/_|_|_\__,_|_|_||_| |_|\_\__,_|_|_|_\___|
The Domain Name is the friendly address of your site - like fullauto.com
This setup will test the validity of your domain name, and coach you
through the steps you need to take to activate it successfully.
END
$clipbucket_domain_banner.=<<END;
Input box with === border is highlighted (active) input box.
Use [TAB] key to switch focus between input boxes.
Use [DEL] key to clear entire entry in highlighted input box.
Use [Backspace] to backspace in highlighted input box.
Type or Copy & Paste the Domain Name for CLIPBUCKET here:
Domain Name
]I[{1,'',50}
END
my $clipbucket_enter_domain_name={
Name => 'clipbucket_enter_domain_name',
Input => 1,
Result => $clipbucket_validate_domain,
#Result => $clipbucket_setup_summary,
Banner => $clipbucket_domain_banner,
};
return $clipbucket_enter_domain_name;
};
our $clipbucket_caution=sub {
my $inform_banner=<<'END';
___ _ _ _ _____ ___ ___ _ _ _
/ __| /_\| | | |_ _|_ _/ _ \| \| | |
| (__ / _ \ |_| | | | | | (_) | .` |_|
\___/_/ \_\___/ |_| |___\___/|_|\_(_)
END
$inform_banner.=<<END;
This setup is intended to be a demonstration both of FullAutoâs automation
capabilities, as well as CLIPBUCKETâs video streaming capabilities. For
this purpose, Amazon was chosen because of the fast ZERO to full CLIPBUCKET
setup in one sitting. With other Cloud and host environments, there can be
significant delays, and it is not as easy to setup an account, have it
fully accessible, run the automation to completion, play with CLIPBUCKET
and destroy it all easily after the evaluation is complete with minimal
if any charges. With Amazon you can do this very easily. You even get an
entire Gigabyte of free outbound bandwidth. Beyond uploading and evaluating
one or two modest videos on CLIPBUCKET, you would **NOT** want to stream a
lot of video from Amazon â the bandwidth costs are simply too prohibitive
for anything beyond evaluation and demonstration. **PLEASE DONATE**
http://FullAuto.com/donate.html and help us to build a full featured
self-service dashboard that will work just as easily for other more
affordable hosting environments.
END
my $clipbucket_caution={
Name => 'clipbucket_caution',
Result =>
$Net::FullAuto::ISets::Amazon::ClipBucket_is::clipbucket_license_agreement_one,
Banner => $inform_banner,
};
return $clipbucket_caution;
};
our $clipbucket_license_agreement_three=sub {
package clipbucket_license_agreement_three;
my $clipbucket_license_banner_three=<<'END';
THIS FREE SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR OR ANY CONTRIBUTOR BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
EFFECTS OF UNAUTHORIZED OR MALICIOUS NETWORK ACCESS;
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
END
my %clipbucket_license_three=(
Name => 'clipbucket_license_three',
Item_1 => {
Text => "I accept the CLIPBUCKET License Agreement",
Result =>
$Net::FullAuto::ISets::Amazon::ClipBucket_is::clipbucket_pick_email_address,
},
Item_2 => {
Text => "I DO NOT accept the CLIPBUCKET License Agreement\n".
( run in 0.526 second using v1.01-cache-2.11-cpan-140bd7fdf52 )