line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#!/usr/bin/perl |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package SMS::Send::CZ::Neogate; |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
# ABSTRACT: SMS::Send driver for Neogate - Czech Republic |
6
|
|
|
|
|
|
|
|
7
|
2
|
|
|
2
|
|
14487
|
use warnings; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
73
|
|
8
|
2
|
|
|
2
|
|
9
|
use strict; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
56
|
|
9
|
2
|
|
|
2
|
|
7
|
use Carp; |
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
176
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
our $VERSION = "1.000"; |
12
|
|
|
|
|
|
|
$VERSION = eval $VERSION; |
13
|
|
|
|
|
|
|
|
14
|
2
|
|
|
2
|
|
1245
|
use LWP::UserAgent; |
|
2
|
|
|
|
|
72966
|
|
|
2
|
|
|
|
|
61
|
|
15
|
2
|
|
|
2
|
|
14
|
use URI::Escape; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
119
|
|
16
|
2
|
|
|
2
|
|
1723
|
use DateTime qw(); |
|
2
|
|
|
|
|
180482
|
|
|
2
|
|
|
|
|
64
|
|
17
|
2
|
|
|
2
|
|
13
|
use base 'SMS::Send::Driver'; |
|
2
|
|
|
|
|
2
|
|
|
2
|
|
|
|
|
488
|
|
18
|
2
|
|
|
2
|
|
252
|
use Digest::MD5 qw(md5 md5_hex); |
|
2
|
|
|
|
|
2
|
|
|
2
|
|
|
|
|
101
|
|
19
|
2
|
|
|
2
|
|
775
|
use Log::LogLite; |
|
2
|
|
|
|
|
19229
|
|
|
2
|
|
|
|
|
52
|
|
20
|
2
|
|
|
2
|
|
1024
|
use Data::Dumper; |
|
2
|
|
|
|
|
8771
|
|
|
2
|
|
|
|
|
114
|
|
21
|
2
|
|
|
2
|
|
1336
|
use XML::Simple; |
|
2
|
|
|
|
|
11949
|
|
|
2
|
|
|
|
|
12
|
|
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
sub new { |
24
|
1
|
|
|
1
|
1
|
58
|
my $class = shift; |
25
|
1
|
|
|
|
|
2
|
my %params = @_; |
26
|
|
|
|
|
|
|
|
27
|
1
|
|
|
|
|
2
|
my $LOG_FILE = "/var/log/neogate.log"; |
28
|
1
|
|
|
|
|
1
|
my $ERROR_LOG_LEVEL = 6; |
29
|
|
|
|
|
|
|
|
30
|
1
|
|
|
|
|
242
|
open HANDLE, ">>$LOG_FILE"; |
31
|
1
|
|
|
|
|
7
|
close HANDLE; |
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
# Create our LWP::UserAgent object |
34
|
1
|
|
|
|
|
9
|
my $ua = LWP::UserAgent->new; |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
# Create the object, saving any private params for later |
37
|
1
|
|
|
|
|
1974
|
my $dt = DateTime->now(time_zone => 'Europe/Prague'); |
38
|
|
|
|
|
|
|
my $self = bless { |
39
|
|
|
|
|
|
|
ua => $ua, |
40
|
|
|
|
|
|
|
login => $params{_login}, |
41
|
|
|
|
|
|
|
password => $params{_password}, |
42
|
1
|
50
|
|
|
|
8399
|
private => \%params, |
43
|
|
|
|
|
|
|
stamp => $dt->strftime('%Y%m%dT%H%M%S'), |
44
|
|
|
|
|
|
|
log => (-w $LOG_FILE) ? new Log::LogLite($LOG_FILE, $ERROR_LOG_LEVEL) : 0 |
45
|
|
|
|
|
|
|
}, $class; |
46
|
|
|
|
|
|
|
|
47
|
1
|
|
|
|
|
334
|
$self->log("Driver Neogate created", 4); |
48
|
|
|
|
|
|
|
|
49
|
1
|
|
|
|
|
233
|
$self; |
50
|
|
|
|
|
|
|
} |
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
sub log { |
53
|
2
|
|
|
2
|
0
|
15
|
my ($self, $msg, $level) = @_; |
54
|
|
|
|
|
|
|
|
55
|
2
|
50
|
|
|
|
16
|
if ($self->{'log'}) { |
56
|
2
|
|
|
|
|
9
|
$self->{'log'}->write($msg, $level); |
57
|
|
|
|
|
|
|
} |
58
|
|
|
|
|
|
|
} |
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
sub get_salt { |
61
|
1
|
|
|
1
|
1
|
2
|
my $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:-'; |
62
|
1
|
|
|
|
|
1
|
my $len = length($chars); |
63
|
1
|
|
|
|
|
1
|
my $salt = ''; |
64
|
1
|
|
|
|
|
30
|
for (my $i = 1; $i < (30 + int(rand(20))); $i++) { # 30-49 characters |
65
|
30
|
|
|
|
|
46
|
$salt .= substr($chars, int(rand($len)), 1); |
66
|
|
|
|
|
|
|
} |
67
|
|
|
|
|
|
|
|
68
|
1
|
|
|
|
|
22
|
return $salt; |
69
|
|
|
|
|
|
|
} |
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
sub send_sms { |
72
|
1
|
|
|
1
|
1
|
630
|
my ($self, %args) = @_; |
73
|
1
|
|
|
|
|
382
|
my $url = 'https://api.smsbrana.cz/smsconnect/http.php'; |
74
|
1
|
|
|
|
|
6
|
my $salt = get_salt(); |
75
|
|
|
|
|
|
|
|
76
|
1
|
|
|
|
|
4
|
my $rawtext = $self->{'password'} . $self->{'stamp'} . $salt; |
77
|
|
|
|
|
|
|
#for debugging only |
78
|
|
|
|
|
|
|
#$self->log("TEXT: " . $rawtext . ", MD5: " . md5_hex($rawtext)); |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
my %params = ( |
81
|
|
|
|
|
|
|
'number' => $args{'to'} || '', |
82
|
|
|
|
|
|
|
'message' => $args{'text'} || '', |
83
|
|
|
|
|
|
|
'login' => $self->{'login'}, |
84
|
|
|
|
|
|
|
'sul' => $salt, |
85
|
1
|
|
50
|
|
|
16
|
'time' => $self->{'stamp'}, |
|
|
|
50
|
|
|
|
|
86
|
|
|
|
|
|
|
'hash' => md5_hex($rawtext), |
87
|
|
|
|
|
|
|
'action' => 'send_sms' |
88
|
|
|
|
|
|
|
); |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
# cleanup |
91
|
1
|
|
|
|
|
3
|
$params{'number'} =~ s{\D}{}g; # remove non-digits |
92
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
# send away |
94
|
1
|
|
|
|
|
3
|
my $uri = join( '&', map { $_ . '=' . uri_escape_utf8( $params{ $_ } ) } keys %params ); |
|
7
|
|
|
|
|
86
|
|
95
|
|
|
|
|
|
|
|
96
|
1
|
|
|
|
|
15
|
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); |
97
|
1
|
|
|
|
|
154
|
$ua->protocols_allowed( ['https'] ); |
98
|
|
|
|
|
|
|
|
99
|
1
|
|
|
|
|
14
|
my $x = $url . "?" . $uri; |
100
|
1
|
|
|
|
|
4
|
my $res = $ua->get($url . "?" . $uri); |
101
|
|
|
|
|
|
|
|
102
|
1
|
50
|
|
|
|
8817
|
if( $res->is_success ) { |
103
|
0
|
|
|
|
|
0
|
$self->log("HTTP SUCCESS: " . $x, 4); |
104
|
0
|
|
|
|
|
0
|
my $parser = new XML::Simple; |
105
|
0
|
|
|
|
|
0
|
my $data = $parser->XMLin($res->decoded_content); |
106
|
0
|
0
|
|
|
|
0
|
if ($data->{'err'} == 0) { |
107
|
0
|
|
|
|
|
0
|
$self->log("SMS #" . $data->{'sms_id'} . " sent, remaining credit: " . $data->{'credit'}, 4); |
108
|
|
|
|
|
|
|
|
109
|
0
|
|
|
|
|
0
|
return 1; |
110
|
|
|
|
|
|
|
} |
111
|
|
|
|
|
|
|
else { |
112
|
0
|
|
|
|
|
0
|
$self->log("SMS processing error: " . $data->{'err'}, 4); |
113
|
0
|
|
|
|
|
0
|
return 0; |
114
|
|
|
|
|
|
|
} |
115
|
|
|
|
|
|
|
} |
116
|
|
|
|
|
|
|
else { |
117
|
1
|
|
|
|
|
9
|
$self->log("HTTP error #" . $res->code() . ": " . $res->message(), 4); |
118
|
1
|
|
|
|
|
205
|
return 0; |
119
|
|
|
|
|
|
|
} |
120
|
|
|
|
|
|
|
} |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
__END__ |