414 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
| fn delete_post{
 | |
| 	a_dir=$barf_root/$"barf_dir/src/$a_id
 | |
| 	if(test -d $a_dir){
 | |
| 		rm -rf $a_dir &&
 | |
| 		{echo ',x/^'$a_id'\/.*\n/d'; echo w; echo q} | sam -d $barf_root/$"barf_dir/tags >[2]/dev/null
 | |
| 	}
 | |
| 	post_redirect $base_url^$barf_base_uri
 | |
| }
 | |
| 
 | |
| fn display_footer{
 | |
| 	if(test -f $barf_root/$"barf_dir/_werc/barf/footer)
 | |
| 		cat $barf_root/$"barf_dir/_werc/barf/footer
 | |
| 	if not if(test -f $barf_root/_werc/barf/footer)
 | |
| 		cat $barf_root/_werc/barf/footer
 | |
| 	if not
 | |
| 		cat apps/barf/barf/footer
 | |
| }
 | |
| 
 | |
| fn display_header{
 | |
| 	if(test -f $barf_root/$"barf_dir/_werc/barf/header)
 | |
| 		cat $barf_root/$"barf_dir/_werc/barf/header
 | |
| 	if not if(test -f $barf_root/_werc/barf/header)
 | |
| 		cat $barf_root/_werc/barf/header
 | |
| 	if not
 | |
| 		cat apps/barf/barf/header
 | |
| }
 | |
| 
 | |
| fn display_login{
 | |
| 	echo '<div id="login">
 | |
| 	<form method="post" action="/">
 | |
| 	<input type="hidden" name="a_func" value="login">
 | |
| 	username: <input type="text" name="user_name"><br> 
 | |
| 	password: <input type="password" name="user_password"><br> 
 | |
| 	<input name="s" type="submit" value="login"> 
 | |
| 	</form>
 | |
| 	</div>'
 | |
| }
 | |
| 
 | |
| fn display_prevnext{
 | |
| 	if(test $stop -gt `{echo 1+^$posts_per_page | bc}){
 | |
| 		nprev=`{echo $start^-1-^$posts_per_page | bc}
 | |
| 		prev='<span>
 | |
| 		<a href="'$base_url^$barf_base_uri'?tags='$"tags'&start='$"nprev'">prev</a> | 
 | |
| 		</span>'
 | |
| 	}
 | |
| 	if(test $#posts -gt $posts_per_page){
 | |
| 		nnext=`{echo $stop^+1 | bc}
 | |
| 		next='<span>
 | |
| 		<a href="'$base_url^$barf_base_uri'?tags='$"tags'&start='$"nnext'">next</a>
 | |
| 		</span>'
 | |
| 	}
 | |
| 	echo '<div id="page_list">
 | |
| 	'$"prev'
 | |
| 	'$"next'
 | |
| 	</div>'
 | |
| }
 | |
| 
 | |
| fn display_sidebar{
 | |
| 	if(test -f $barf_root/$"barf_dir/_werc/barf/sidebar)
 | |
| 		cat $barf_root/$"barf_dir/_werc/barf/sidebar
 | |
| 	if not if(test -f $barf_root/_werc/barf/sidebar)
 | |
| 		cat $barf_root/_werc/barf/sidebar
 | |
| 	if not
 | |
| 		cat apps/barf/barf/sidebar
 | |
| }
 | |
| 
 | |
| fn dsrc{
 | |
| 	low=`{ls -p $barf_root/$"barf_dir/src | sort -n | sed 1q}
 | |
| 	high=$a_id
 | |
| 	if(~ $#low 1 && ~ $#high 1){
 | |
| 		cd $barf_root/$"barf_dir/src && rm -rf `{seq $low $high} &&
 | |
| 		{
 | |
| 			for(i in `{seq $low $high})
 | |
| 				echo ',x/^'$i'\/.*\n/d'
 | |
| 			echo w
 | |
| 			echo w
 | |
| 			echo q
 | |
| 		} | sam -d $barf_root/$"barf_dir/tags >[2]/dev/null
 | |
| 	}
 | |
| 	post_redirect $base_url^$barf_base_uri
 | |
| }
 | |
| 
 | |
| fn edit_form{
 | |
| 	if(~ $#a_id 0)
 | |
| 		name=add
 | |
| 	if not{
 | |
| 		name=update
 | |
| 		a_dir=$barf_root/$"barf_dir/src/$a_id
 | |
| 		for(x in $barf_items){
 | |
| 			if(~ $x img)
 | |
| 				a_img=`{ls -p $a_dir/img | sed 1q}
 | |
| 			if(~ $x tags)
 | |
| 				a_tags=`{ls -p $a_dir/tags}
 | |
| 			if not
 | |
| 				$x=`{cat $a_dir/$x}
 | |
| 		}
 | |
| 	}
 | |
| 	echo '<div id="list">
 | |
| 	<form action="/" method="post" name="edit" id="button">
 | |
| 	<input type="hidden" name="fake" value="fake">
 | |
| 	<input type="text" name="url" style="display: none;">
 | |
| 	<input type="hidden" name="a_func" value="edit_post">'
 | |
| 	if(~ $name update)
 | |
| 		echo '<input type="hidden" name="a_id" value="'$"a_id'">'
 | |
| 	for(x in $barf_items){
 | |
| 		if(~ $x body){
 | |
| 			echo '<div id="edit_body">' \
 | |
| 			'body:<br>' \
 | |
| 			'<textarea name="a_body">'
 | |
| 			if(~ $name update)
 | |
| 				cat $a_dir/body
 | |
| 			echo '</textarea></div>'
 | |
| 		}
 | |
| 		if not if(~ $x img){
 | |
| 			echo '<div id="edit_img">' \
 | |
| 			'image:<br>' \
 | |
| 			'<input name="a_img"  type="text" value="'$"a_img'" id="edit">   ' \
 | |
| 			'download: <input name="a_download" type="checkbox" value="1">' \
 | |
| 			'</div>'
 | |
| 		}
 | |
| 		if not if(~ $x tags){
 | |
| 			echo '<div id="edit_tags">' \
 | |
| 			'tags:   (space separated list of tags)<br>' \
 | |
| 			'<input name="a_tags" type="text" value="'$"a_tags'" id="edit">' \
 | |
| 			'</div>'
 | |
| 		}
 | |
| 		if not{
 | |
| 			echo '<div id="edit_'$"x'">' \
 | |
| 			$"x':<br>' \
 | |
| 			'<input name="a_'$"x'" type="text" value="'$"$x'" id="edit">' \
 | |
| 			'</div>'
 | |
| 		}
 | |
| 	}
 | |
| 	echo '<div id="edit_submit">' \
 | |
| 	'<input type="submit" name="'$name'" value="'$name'">' \
 | |
| 	'</div>
 | |
| 	</form>
 | |
| 	</div>'
 | |
| }
 | |
| 
 | |
| fn edit_post{
 | |
| 	if(~ $#a_id 0){
 | |
| 		a_id=`{echo `{ls -p $barf_root/$"barf_dir/src | sort -n | tail -1}^+1 | bc}
 | |
| 		if(~ $#a_id 0)
 | |
| 			a_id=1
 | |
| 		while(test -d $barf_root/$"barf_dir/src/$a_id)
 | |
| 			a_id=`{echo $a_id^+1 | bc}
 | |
| 	}
 | |
| 	a_dir=$barf_root/$"barf_dir^src/$a_id
 | |
| 	mkdir -p $a_dir/img $a_dir/tags
 | |
| 	rm -f $a_dir/tags/*
 | |
| 	for(x in $barf_items){
 | |
| 		if(~ $x date){
 | |
| 			if(! ~ $#a_date 0)
 | |
| 				echo $"a_date >$a_dir/date
 | |
| 			if not
 | |
| 				date >$a_dir/date
 | |
| 		}
 | |
| 		if not if(~ $x tags){
 | |
| 			if(! ~ $#a_tags 0){
 | |
| 				a_tags=`{echo $"a_tags | sed 's/[^A-Za-z0-9_\- ]//g'}
 | |
| 				ifs=' '{a_tags=`{echo -n $a_tags}}
 | |
| 				{
 | |
| 					t=1
 | |
| 					while(test $t -le $#a_tags){
 | |
| 						>$a_dir/tags/$a_tags($t)
 | |
| 						t=`{echo $t^+1 | bc}
 | |
| 					}
 | |
| 				}
 | |
| 				for(i in $a_tags)
 | |
| 					echo $a_id'/tags/'$i >>$barf_root/$"barf_dir/tags
 | |
| 			}
 | |
| 		}
 | |
| 		if not if(! ~ $x img tags){
 | |
| 			item='a_'$"x
 | |
| 			if(! ~ $$item ''){
 | |
| 				>$a_dir/$x
 | |
| 				echo $$item >$a_dir/$x
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	if(~ $a_download 1){
 | |
| 		switch($barf_type){
 | |
| 		case image
 | |
| 			rm -f $a_dir/img/*
 | |
| 			img=$a_dir/img/^`{date -n}^.^`{echo $"a_img |
 | |
| 				sed 's/^.*\.(gif|GIF)$/gif/g;
 | |
| 					s/^.*\.(jpg|jpeg|JPG|JPEG)$/jpg/g;
 | |
| 					s/^.*\.(png|PNG)$/png/g;
 | |
| 					s/^.*\.(tif|TIF|tiff|TIFF)$/tif/g'
 | |
| 			}
 | |
| 			thumb=$a_dir/img/small.^`{basename $img | sed 's/\..*$//g'}^.png
 | |
| 			if(test -f /boot/factotum){
 | |
| 				@{
 | |
| 				rfork n
 | |
| 				if(test -f /rc/bin/hget)
 | |
| 					webfs
 | |
| 				hget $"a_img >$img
 | |
| 				#magick/convert $img -resize 500x600 $thumb
 | |
| 				switch($img){
 | |
| 				case *.bmp
 | |
| 					cmd=bmp
 | |
| 				case *.gif
 | |
| 					cmd=gif
 | |
| 				case *.ico
 | |
| 					cmd=ico
 | |
| 				case *.jpg
 | |
| 					cmd=jpg
 | |
| 				case *.png
 | |
| 					cmd=png
 | |
| 				case *.tif
 | |
| 					cmd=tif
 | |
| 				case *.tga
 | |
| 					cmd=tga
 | |
| 				}
 | |
| 				$cmd -9et <$img | resample -x 500 | topng >$thumb
 | |
| 				}
 | |
| 			}
 | |
| 			if not{
 | |
| 				curl -s -o $"a_img >$img
 | |
| 				convert $img -resize 500x600 $thumb
 | |
| 			}
 | |
| 		case url
 | |
| 			if(test -f /boot/factotum){
 | |
| 				@{
 | |
| 				rfork n
 | |
| 				if(test -f /rc/bin/hget)
 | |
| 					webfs
 | |
| 				hget $"a_link | htmlfmt | fmt >$a_dir/body
 | |
| 				}
 | |
| 			}
 | |
| 			if not
 | |
| 				curl -s $"a_link | htmlfmt | fmt >$a_dir/body
 | |
| 		}
 | |
| 	}
 | |
| 	if(! ~ $gp 1)
 | |
| 		post_redirect $base_url^$barf_base_uri
 | |
| }
 | |
| 
 | |
| fn get_post_list{
 | |
| 	if(~ $id [0-9]*)
 | |
| 		posts=$id
 | |
| 	if not{
 | |
| 		posts=`{
 | |
| 			if(~ $show_ascending 1)
 | |
| 				sort=(sort -n)
 | |
| 			if not
 | |
| 				sort=(sort -nr)
 | |
| 			if(~ $tags all)
 | |
| 				ls -p $barf_root/$"barf_dir/src |
 | |
| 					grep -e '^[0-9]*$' |
 | |
| 					eval $sort |
 | |
| 					sed -n $start^,^$stop^p # awk 'NR=='$start',NR=='$stop' {print;}'
 | |
| 			if not
 | |
| 				grep -e '^.*\/'$tags'$' $barf_root/$"barf_dir/tags |
 | |
| 					awk -F '/' '{print $1;}' |
 | |
| 					eval $sort |
 | |
| 					uniq |
 | |
| 					sed -n $start^,^$stop^p
 | |
| 		}
 | |
| 		if(! ~ $posts [0-9]*)
 | |
| 			posts=()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn get_start{
 | |
| 	if(~ $#start 0)
 | |
| 		start=1
 | |
| }
 | |
| 
 | |
| fn get_stop{
 | |
| 	if(~ $#stop 0)
 | |
| 		stop=`{echo $start^+^$posts_per_page | bc}
 | |
| }
 | |
| 
 | |
| fn get_tags{
 | |
| 	if(~ $#tags 0)
 | |
| 		tags=all
 | |
| }
 | |
| 
 | |
| fn load_get_args{
 | |
| 	if(~ $REQUEST_METHOD GET && ~ $#get_args 0 && ~ $REQUEST_URI *'='*){
 | |
| 		ifs='&' {
 | |
| 			a=`{echo $"REQUEST_URI | sed 's/(^\/|#.*$)//g'}
 | |
| 			for(pair in $a){
 | |
| 				ifs='=' { pair=`{echo -n $pair} }
 | |
| 					n='get_arg_'^`{echo $pair(1) | urldecode | tr -cd 'a-zA-Z0-9_'}
 | |
| 					get_args=( $get_args $n )
 | |
| 					ifs=() { $n=`{echo -n $pair(2) | urldecode | tr -d '
 | |
| '} }
 | |
| 			}
 | |
| 		}
 | |
| 		pair=()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn parse_get_args{
 | |
| 	if(! ~ $#get_arg_a_func 0)
 | |
| 		a_func=$get_arg_a_func
 | |
| 	if(! ~ $#get_arg_a_id 0)
 | |
| 		a_id=$get_arg_a_id
 | |
| 	if(! ~ $#get_arg_id 0)
 | |
| 		id=$get_arg_id
 | |
| 	if(! ~ $#get_arg_start 0)
 | |
| 		start=$get_arg_start
 | |
| 	if(! ~ $#get_arg_stop 0)
 | |
| 		stop=$get_arg_stop
 | |
| 	if(! ~ $#get_arg_reply 0)
 | |
| 		reply=$get_arg_reply
 | |
| 	if(! ~ $#get_arg_tags 0)
 | |
| 		tags=$get_arg_tags
 | |
| }
 | |
| 
 | |
| fn parse_post_args{
 | |
| 	for(x in $barf_items){
 | |
| 		a='a_'$"x
 | |
| 		p='post_arg_'$"a
 | |
| 		$a=$$p
 | |
| 	}
 | |
| 	if(! ~ $#post_arg_a_download 0)
 | |
| 		a_download=$post_arg_a_download
 | |
| 	if(! ~ $#post_arg_a_func 0)
 | |
| 		a_func=$post_arg_a_func
 | |
| 	if(! ~ $#post_arg_fake 0)
 | |
| 		fake=$post_arg_fake
 | |
| 	if(! ~ $#post_arg_a_id 0)
 | |
| 		a_id=$post_arg_a_id
 | |
| 	if(! ~ $#post_arg_url 0)
 | |
| 		url=$post_arg_url
 | |
| }
 | |
| 
 | |
| fn print_edit{
 | |
| 	edit='<a href="'$base_url^$barf_base_uri'?a_func=edit_form&a_id='$"a_id'">edit</a>'
 | |
| 	delete='<a href="'$base_url^$barf_base_uri'?a_func=delete_post&a_id='$"a_id'" onclick="return confirm(''are you sure you want to delete?'');">delete</a>'
 | |
| 	dsrc='<a href="'$base_url^$barf_base_uri'?a_func=dsrc&a_id='$"a_id'" onclick="return confirm(''are you sure you want to dsrc?'');">dsrc</a>'
 | |
| 	echo $"edit' | '$"delete' | '$"dsrc
 | |
| }
 | |
| 
 | |
| fn print_id{
 | |
| 	echo '<span id="post_id"><a href="/?id='$"a_id'">No.'$"a_id'</a></span>'
 | |
| }
 | |
| 
 | |
| fn print_img{
 | |
| 	a_img=`{ls -p $a_dir/img/[0-9]*}
 | |
| 	a_thumb=`{ls -p $a_dir/img/small*}
 | |
| 	if(! ~ $#a_img 0)
 | |
| 		if(~ $#a_thumb 0)
 | |
| 			a_thumb=$a_img
 | |
| 	echo '<a href="'$base_url^$barf_base_uri'src/'$a_id'/img/'$a_img'" target="_b"><img src="'$base_url^$barf_base_uri'src/'$a_id'/img/'$a_thumb'" border="0"></a>'
 | |
| }
 | |
| 
 | |
| fn print_tags{
 | |
| 	a_tags=`{ls -p $a_dir/tags}
 | |
| 	a_tags=`{for(t in $a_tags) echo '<a href="'$base_url^$barf_base_uri'?tags='$t'">'$t'</a>, '}
 | |
| 	a_tags=`{echo $a_tags | awk '{print substr($0, 1, length($0) -1)}'}
 | |
| 	echo '<span id="post_tags">'$"a_tags'</span>'
 | |
| }
 | |
| 
 | |
| fn print_title{
 | |
| 	a_title=`{cat $a_dir/title}
 | |
| 	if(! ~ $#a_title 0){
 | |
| 		if(~ $barf_type log url)
 | |
| 			echo '<a href="'`{cat $a_dir/link}'">'$"a_title'</a>'
 | |
| 		if not
 | |
| 			echo '<a href="'$base_url^$barf_base_uri'?id='$"a_id'">'$"a_title'</a>'
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn redirect_bots{
 | |
| 	if(! ~ $fake fake || ! ~ $url '')
 | |
| 		post_redirect http://google.com
 | |
| }
 | |
| 
 | |
| fn urldecode {
 | |
| awk '
 | |
| BEGIN {
 | |
|     hextab ["0"] = 0; hextab ["8"] = 8;
 | |
|     hextab ["1"] = 1; hextab ["9"] = 9;
 | |
|     hextab ["2"] = 2; hextab ["A"] = hextab ["a"] = 10
 | |
|     hextab ["3"] = 3; hextab ["B"] = hextab ["b"] = 11;
 | |
|     hextab ["4"] = 4; hextab ["C"] = hextab ["c"] = 12;
 | |
|     hextab ["5"] = 5; hextab ["D"] = hextab ["d"] = 13;
 | |
|     hextab ["6"] = 6; hextab ["E"] = hextab ["e"] = 14;
 | |
|     hextab ["7"] = 7; hextab ["F"] = hextab ["f"] = 15;
 | |
| }
 | |
| {
 | |
|     decoded = ""
 | |
|     i = 1
 | |
|     len = length ($0)
 | |
|     while ( i <= len ) {
 | |
|         c = substr ($0, i, 1)
 | |
|         if ( c == "%" ) {
 | |
|             if ( i+2 <= len ) {
 | |
|                 c1 = substr ($0, i+1, 1)
 | |
|                 c2 = substr ($0, i+2, 1)
 | |
|                 if ( hextab [c1] == "" || hextab [c2] == "" ) {
 | |
|                     print "WARNING: invalid hex encoding: %" c1 c2 | "cat >&2"
 | |
|                 } else {
 | |
|                     code = 0 + hextab [c1] * 16 + hextab [c2] + 0
 | |
|                     c = sprintf ("%c", code)
 | |
|                     i = i + 2
 | |
|                 }
 | |
|             } else {
 | |
|                 print "WARNING: invalid % encoding: " substr ($0, i, len - i)
 | |
|             }
 | |
|         } else if ( c == "+" ) {
 | |
|             c = " "
 | |
|         }
 | |
|         decoded = decoded c
 | |
|         ++i
 | |
|     }
 | |
|     printf "%s", decoded
 | |
| }
 | |
| '
 | |
| }
 | 
