| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 
							- #!/usr/bin/perl
 
- #
 
- # This is an example of Perl script maintaining dynamic shared secret 
 
- # database for the REST API
 
- #
 
- use strict;
 
- use warnings;
 
- use DBI;
 
- use HTTP::Request::Common;
 
- my $DBNAME="turn";
 
- my $DBUSERNAME="turn";
 
- my $DBPWD="turn";
 
- my $DBHOST="localhost";
 
- my $webserver = 'http://example.com/';
 
- my $old_secret = "";
 
- my $current_secret="";
 
- my $INTERVAL=3600;
 
- my $dbh;
 
- $dbh = DBI->connect("DBI:mysql:$DBNAME;host=$DBHOST", $DBUSERNAME, $DBPWD)
 
- 	|| die "Could not connect to database: $DBI::errstr";
 
-     
 
- $dbh->do('CREATE TABLE IF NOT EXISTS turn_secret (value varchar(512))');
 
- my $c = $dbh->do("delete from turn_secret");
 
- print "Deleted $c rows\n";
 
-     
 
- $dbh->disconnect();
 
- do {
 
-     $dbh = DBI->connect("DBI:mysql:$DBNAME;host=$DBHOST", $DBUSERNAME, $DBPWD)
 
- 	|| die "Could not connect to database: $DBI::errstr";
 
-     
 
-     $dbh->do('CREATE TABLE IF NOT EXISTS turn_secret (value varchar(512))');
 
-     if(length($current_secret)) {
 
- 	if(length($old_secret)) {
 
- 	    remove_secret($dbh, $old_secret);
 
- 	}
 
- 	$old_secret=$current_secret;
 
-     }
 
-     
 
-     print "CURRENT SECRET TO BE (RE)GENERATED\n";
 
-     $current_secret = generate_secret();
 
-     insert_secret($dbh, $current_secret);
 
-     
 
-     $dbh->disconnect();
 
- #
 
- # Web server interaction example:
 
- # Here we can put code to submit this secret to the web server:
 
- #
 
-     my $req = POST($webserver, Content => [param => $current_secret]);
 
-     $req->method('PUT');
 
-     print $req->as_string,"\n";
 
- #
 
- # Alternatively, you can use this link for compute-on-demand:
 
- # https://github.com/alfreddatakillen/computeengineondemand
 
- #
 
- # write your code here.
 
- #
 
-     sleep($INTERVAL);
 
- } while(1);
 
- sub remove_secret {
 
-     my $dbh = shift;
 
-     my $secret=shift;
 
-     my $c = $dbh->do("delete from turn_secret where value = '$secret'");
 
-     print "Deleted $c rows\n";
 
-    
 
- }
 
- sub insert_secret {
 
-     my $dbh = shift;
 
-     my $secret=shift;
 
-     my $c = $dbh->do("insert into turn_secret values('$secret')");
 
-     print "Inserted $c rows\n";
 
-     
 
- }
 
- sub generate_secret {
 
-     my @chars = ('0'..'9', 'A'..'F');
 
-     my $len = 8;
 
-     my $string;
 
-     while($len--){ $string .= $chars[rand @chars] };
 
-     return $string;
 
- }
 
 
  |