⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vmail.cgi

📁 asterisk 是一个很有知名度开源软件
💻 CGI
📖 第 1 页 / 共 2 页
字号:
$stdcontainerend</BODY>\n_EOH	}}sub message_audio(){	my ($forcedownload) = @_;	my $folder = &untaint(param('folder'));	my $msgid = &untaint(param('msgid'));	my $mailbox = &untaint(param('mailbox'));	my $context = &untaint(param('context'));	my $format = param('format');	if (!$format) {		$format = &getcookie('format');	}	&untaint($format);	my $path = "/var/spool/asterisk/voicemail/$context/$mailbox/$folder/msg${msgid}.$format";	$msgid =~ /^\d\d\d\d$/ || die("Msgid Liar ($msgid)!");	grep(/^${format}$/, keys %formats) || die("Format Liar ($format)!");	# Mailbox and folder are already verified	if (open(AUDIO, "<$path")) {		$size = -s $path;		$|=1;		if ($forcedownload) {			print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size, -attachment => "msg${msgid}.$format");		} else {					print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size);		}				while(($amt = sysread(AUDIO, $data, 4096)) > 0) {			syswrite(STDOUT, $data, $amt);		}		close(AUDIO);	} else {		die("Hrm, can't seem to open $path\n");	}}sub message_index() {	my ($folder, $message) = @_;	my ($mbox, $context) = split(/\@/, param('mailbox'));	my $passwd = param('password');	my $message2;	my $msgcount;		my $hasmsg;	my ($newmessages, $oldmessages);	my $format = param('format');	if (!$format) {		$format = &getcookie('format');	}	if (!$context) {		$context = param('context');	}	if (!$context) {		$context = "default";	}	if ($folder) {		$msgcount = &msgcountstr($context, $mbox, $folder);		$message2 = "&nbsp;&nbsp;&nbsp;Folder '$folder' has " . &msgcountstr($context, $mbox, $folder);	} else {		$newmessages = &msgcount($context, $mbox, "INBOX");		$oldmessages = &msgcount($context, $mbox, "Old");		if (($newmessages > 0) || ($oldmessages < 1)) {			$folder = "INBOX";		} else {			$folder = "Old";		}		$message2 = "You have";		if ($newmessages > 0) {			$message2 .= " <b>$newmessages</b> NEW";			if ($oldmessages > 0) {				$message2 .= "and <b>$oldmessages</b> OLD";				if ($oldmessages != 1) {					$message2 .= " messages.";				} else {					$message2 .= "message.";				}			} else {				if ($newmessages != 1) {					$message2 .= " messages.";				} else {					$message2 .= " message.";				}			}		} else {			if ($oldmessages > 0) {				$message2 .= " <b>$oldmessages</b> OLD";				if ($oldmessages != 1) {					$message2 .= " messages.";				} else {					$message2 .= " message.";				}			} else {				$message2 .= " <b>no</b> messages.";			}		}	}		my $folders = &folder_list('newfolder', $context, $mbox, $folder);	my $cfolders = &folder_list('changefolder', $context, $mbox, $folder);	my $mailboxes = &mailbox_list('forwardto', $context, $mbox);	print header(-cookie => &makecookie($format));	print <<_EOH;<TITLE>Asterisk Web-Voicemail: $mbox\@$context $folder</TITLE><BODY BGCOLOR="white">$stdcontainerstart<FORM METHOD="post"><table width=100% align=center><tr><td align=center colspan=2><font size=+2><I>$message</I></font></td></tr><tr><td align=right colspan=2><font size=+1><b>$folder</b> Messages</font> <input type=submit name="action" value="change to ->">$cfolders</td></tr><tr><td align=left colspan=2><font size=+1>$message2</font></td></tr></table><table width=100% align=center cellpadding=0 cellspacing=0>_EOHprint "<tr><td>&nbsp;Msg</td><td>&nbsp;From</td><td>&nbsp;Duration</td><td>&nbsp;Date</td><td>&nbsp;</td></tr>\n";print "<tr><td><hr></td><td><hr></td><td><hr></td><td><hr></td><td></td></tr>\n";foreach $msg (&messages($context, $mbox, $folder)) {	$fields = &getfields($context, $mbox, $folder, $msg);	$duration = $fields->{'duration'};	if ($duration) {		$duration = sprintf "%d:%02d", $duration / 60, $duration % 60;	} else {		$duration = "<i>Unknown</i>";	}	$hasmsg++;	print "<tr><td><input type=checkbox name=\"msgselect\" value=\"$msg\">&nbsp;<b>$msg</b></td><td>$fields->{'callerid'}</td><td>$duration</td><td>$fields->{'origdate'}</td><td><input name='play$msg' alt=\"Play message $msg\" border=0 type=image align=left src=\"$astpath/play.gif\"></td></tr>\n";}if (!$hasmsg) {	print "<tr><td colspan=4 align=center><P><b><i>No messages</i></b><P></td></tr>";}print <<_EOH;</table><table width=100% align=center><tr><td align=right colspan=2>	<input type="submit" name="action" value="refresh">&nbsp;_EOHif ($hasmsg) {print <<_EOH;	<input type="submit" name="action" value="delete">&nbsp;	<input type="submit" name="action" value="save to ->">	$folders&nbsp;	<input type="submit" name="action" value="forward to ->">	$mailboxes_EOH}print <<_EOH;</td></tr><tr><td align=right colspan=2>	<input type="submit" name="action" value="preferences">	<input type="submit" name="action" value="logout"></td></tr></table><input type=hidden name="folder" value="$folder"><input type=hidden name="mailbox" value="$mbox"><input type=hidden name="context" value="$context"><input type=hidden name="password" value="$passwd"></FORM>$stdcontainerend</BODY>\n_EOH}sub validfolder(){	my ($folder) = @_;	return grep(/^$folder$/, @validfolders);}sub folder_list(){	my ($name, $context, $mbox, $selected) = @_;	my $f;	my $count;	my $tmp = "<SELECT name=\"$name\">\n";	foreach $f (@validfolders) {		$count =  &msgcount($context, $mbox, $f);		if ($f eq $selected) {			$tmp .= "<OPTION SELECTED>$f ($count)</OPTION>\n";		} else {			$tmp .= "<OPTION>$f ($count)</OPTION>\n";		}	}	$tmp .= "</SELECT>";}sub message_rename(){	my ($context, $mbox, $oldfolder, $old, $newfolder, $new) = @_;	my ($oldfile, $newfile);	return if ($old eq $new) && ($oldfolder eq $newfolder);	if ($context =~ /^(\w+)$/) {		$context = $1;	} else {		die("Invalid Context<BR>\n");	}		if ($mbox =~ /^(\w+)$/) {		$mbox = $1;	} else {		die ("Invalid mailbox<BR>\n");	}		if ($oldfolder =~ /^(\w+)$/) {		$oldfolder = $1;	} else {		die("Invalid old folder<BR>\n");	}		if ($newfolder =~ /^(\w+)$/) {		$newfolder = $1;	} else {		die("Invalid new folder ($newfolder)<BR>\n");	}		if ($old =~ /^(\d\d\d\d)$/) {		$old = $1;	} else {		die("Invalid old Message<BR>\n");	}		if ($new =~ /^(\d\d\d\d)$/) {		$new = $1;	} else {		die("Invalid old Message<BR>\n");	}		my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder";	$path =~ /^(.*)$/;	$path = $1;	mkdir $path, 0770;	$path = "/var/spool/asterisk/voicemail/$context/$mbox/$oldfolder";	opendir(DIR, $path) || die("Unable to open directory\n");	my @files = grep /^msg${old}\.\w+$/, readdir(DIR);	closedir(DIR);	foreach $oldfile (@files) {		my $tmp = $oldfile;		if ($tmp =~ /^(msg${old}.\w+)$/) {			$tmp = $1;			$oldfile = $path . "/$tmp";			$tmp =~ s/msg${old}/msg${new}/;			$newfile = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder/$tmp";#			print "Renaming $oldfile to $newfile<BR>\n";			rename($oldfile, $newfile);		}	}}sub file_copy(){	my ($orig, $new) = @_;	my $res;	my $data;	$orig =~ /^(.*)$/;	$orig = $1;	$new =~ /^(.*)$/;	$new = $1;	open(IN, "<$orig") || die("Unable to open '$orig'\n");	open(OUT, ">$new") || DIE("Unable to open '$new'\n");	while(($res = sysread(IN, $data, 4096)) > 0) {		syswrite(OUT, $data, $res);	}	close(OUT);	close(IN);}sub message_copy(){	my ($context, $mbox, $newmbox, $oldfolder, $old, $new) = @_;	my ($oldfile, $newfile);	return if ($mbox eq $newmbox);		if ($mbox =~ /^(\w+)$/) {		$mbox = $1;	} else {		die ("Invalid mailbox<BR>\n");	}	if ($newmbox =~ /^(\w+)$/) {		$newmbox = $1;	} else {		die ("Invalid new mailbox<BR>\n");	}		if ($oldfolder =~ /^(\w+)$/) {		$oldfolder = $1;	} else {		die("Invalid old folder<BR>\n");	}		if ($old =~ /^(\d\d\d\d)$/) {		$old = $1;	} else {		die("Invalid old Message<BR>\n");	}		if ($new =~ /^(\d\d\d\d)$/) {		$new = $1;	} else {		die("Invalid old Message<BR>\n");	}		my $path = "/var/spool/asterisk/voicemail/$context/$newmbox";	$path =~ /^(.*)$/;	$path = $1;	mkdir $path, 0770;	$path = "/var/spool/asterisk/voicemail/$context/$newmbox/INBOX";	$path =~ /^(.*)$/;	$path = $1;	mkdir $path, 0770;	$path = "/var/spool/asterisk/voicemail/$context/$mbox/$oldfolder";	opendir(DIR, $path) || die("Unable to open directory\n");	my @files = grep /^msg${old}\.\w+$/, readdir(DIR);	closedir(DIR);	foreach $oldfile (@files) {		my $tmp = $oldfile;		if ($tmp =~ /^(msg${old}.\w+)$/) {			$tmp = $1;			$oldfile = $path . "/$tmp";			$tmp =~ s/msg${old}/msg${new}/;			$newfile = "/var/spool/asterisk/voicemail/$context/$newmbox/INBOX/$tmp";#			print "Copying $oldfile to $newfile<BR>\n";			&file_copy($oldfile, $newfile);		}	}}sub message_delete(){	my ($context, $mbox, $folder, $msg) = @_;	if ($mbox =~ /^(\w+)$/) {		$mbox = $1;	} else {		die ("Invalid mailbox<BR>\n");	}	if ($context =~ /^(\w+)$/) {		$context = $1;	} else {		die ("Invalid context<BR>\n");	}	if ($folder =~ /^(\w+)$/) {		$folder = $1;	} else {		die("Invalid folder<BR>\n");	}	if ($msg =~ /^(\d\d\d\d)$/) {		$msg = $1;	} else {		die("Invalid Message<BR>\n");	}	my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$folder";	opendir(DIR, $path) || die("Unable to open directory\n");	my @files = grep /^msg${msg}\.\w+$/, readdir(DIR);	closedir(DIR);	foreach $oldfile (@files) {		if ($oldfile =~ /^(msg${msg}.\w+)$/) {			$oldfile = $path . "/$1";#			print "Deleting $oldfile<BR>\n";			unlink($oldfile);		}	}}sub message_forward(){	my ($toindex, @msgs) = @_;	my $folder = param('folder');	my ($mbox, $context) = split(/\@/, param('mailbox'));	my $newmbox = param('forwardto');	my $msg;	my $msgcount;	if (!$context) {		$context = param('context');	}	if (!$context) {		$context = "default";	}	$newmbox =~ s/(\w+)(\s+.*)?$/$1/;	if (!&validmailbox($context, $newmbox)) {		die("Bah! Not a valid mailbox '$newmbox'\n");		return "";	}		my $txt;	$context = &untaint($context);	$newmbox = &untaint($newmbox);	my $path = "/var/spool/asterisk/voicemail/$context/$newmbox/INBOX";	if ($msgs[0]) {		if (&lock_path($path) == 0) {			$msgcount = &msgcount($context, $newmbox, "INBOX");						if ($newmbox ne $mbox) {	#			print header;				foreach $msg (@msgs) {	#				print "Forwarding $msg from $mbox to $newmbox<BR>\n";					&message_copy($context, $mbox, $newmbox, $folder, $msg, sprintf "%04d", $msgcount);					$msgcount++;				}				$txt = "Forwarded messages " . join(', ', @msgs) . "to $newmbox";			} else {				$txt = "Can't forward messages to yourself!\n";			}			&unlock_path($path); 		} else {			$txt = "Cannot forward messages: Unable to lock path.\n";		}	} else {		$txt = "Please Select Message(s) for this action.\n";	}	if ($toindex) {		&message_index($folder, $txt);	} else {		&message_play($txt, $msgs[0]);	}}sub message_delete_or_move(){	my ($toindex, $del, @msgs) = @_;	my $txt;	my $path;	my ($y, $x);	my $folder = param('folder');	my $newfolder = param('newfolder') unless $del;	$newfolder =~ s/^(\w+)\s+.*$/$1/;	my ($mbox, $context) = split(/\@/, param('mailbox'));	if (!$context) {		$context = param('context');	}	if (!$context) {		$context = "default";	}	my $passwd = param('password');	$context = &untaint($context);	$mbox = &untaint($mbox);	$folder = &untaint($folder);	$path = "/var/spool/asterisk/voicemail/$context/$mbox/$folder";	if ($msgs[0]) {		if (&lock_path($path) == 0) {			my $msgcount = &msgcount($context, $mbox, $folder);			my $omsgcount = &msgcount($context, $mbox, $newfolder) if $newfolder;		#	print header;			if ($newfolder ne $folder) {				$y = 0;				for ($x=0;$x<$msgcount;$x++) {					my $msg = sprintf "%04d", $x;					my $newmsg = sprintf "%04d", $y;					if (grep(/^$msg$/, @msgs)) {						if ($newfolder) {							&message_rename($context, $mbox, $folder, $msg, $newfolder, sprintf "%04d", $omsgcount);							$omsgcount++;						} else {							&message_delete($context, $mbox, $folder, $msg);						}					} else {						&message_rename($context, $mbox, $folder, $msg, $folder, $newmsg);						$y++;					}				}				if ($del) {					$txt = "Deleted messages "  . join (', ', @msgs);				} else {					$txt = "Moved messages "  . join (', ', @msgs) . " to $newfolder";				}			} else {				$txt = "Can't move a message to the same folder they're in already";			}			&unlock_path($path);		} else {			$txt = "Cannot move/delete messages: Unable to lock path.\n";		}	} else {		$txt = "Please Select Message(s) for this action.\n";	}	# Not as many messages now	$msgcount--;	if ($toindex || ($msgs[0] >= $msgcount)) {		&message_index($folder, $txt);		} else {		&message_play($txt, $msgs[0]);	}}if (param()) {	my $folder = param('folder');	my $changefolder = param('changefolder');	$changefolder =~ s/(\w+)\s+.*$/$1/;		my $newfolder = param('newfolder');	$newfolder =~ s/^(\w+)\s+.*$/$1/;	if ($newfolder && !&validfolder($newfolder)) {		print header;		die("Bah! new folder '$newfolder' isn't a folder.");	}	$action = param('action');	$msgid = param('msgid');	if (!$action) {		my ($tmp) = grep /^play\d\d\d\d\.x$/, param;		if ($tmp =~ /^play(\d\d\d\d)/) {			$msgid = $1;			$action = "play";		} else {			print header;			print "No message?<BR>\n";			return;		}	}	@msgs = param('msgselect');	@msgs = ($msgid) unless @msgs;	{		($mailbox) = &check_login();		if (length($mailbox)) {			if ($action eq 'login') {				&message_index($folder, "Welcome, $mailbox");			} elsif (($action eq 'refresh') || ($action eq 'index')) {				&message_index($folder, "Welcome, $mailbox");			} elsif ($action eq 'change to ->') {				if (&validfolder($changefolder)) {					$folder = $changefolder;					&message_index($folder, "Welcome, $mailbox");				} else {					die("Bah!  Not a valid change to folder '$changefolder'\n");				}			} elsif ($action eq 'play') {				&message_play("$mailbox $folder $msgid", $msgid);			} elsif ($action eq 'preferences') {				&message_prefs("refresh", $msgid);			} elsif ($action eq 'download') {				&message_audio(1);			} elsif ($action eq 'play ') {				&message_audio(0);			} elsif ($action eq 'audio') {				&message_audio(0);			} elsif ($action eq 'delete') {				&message_delete_or_move(1, 1, @msgs);			} elsif ($action eq 'delete ') {				&message_delete_or_move(0, 1, @msgs);			} elsif ($action eq 'forward to ->') {				&message_forward(1, @msgs);			} elsif ($action eq 'forward to -> ') {				&message_forward(0, @msgs);			} elsif ($action eq 'save to ->') {				&message_delete_or_move(1, 0, @msgs);			} elsif ($action eq 'save to -> ') {				&message_delete_or_move(0, 0, @msgs);			} elsif ($action eq 'logout') {				&login_screen("Logged out!\n");			}		} else {			sleep(1);			&login_screen("Login Incorrect!\n");		}	}} else {	&login_screen("\&nbsp;");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -