mirror of https://github.com/dirtbags/moth.git
Restore angle calculation
This commit is contained in:
parent
3cae9d7442
commit
7b406ce67d
|
@ -1 +0,0 @@
|
|||
../10/,binary.png
|
|
@ -1 +0,0 @@
|
|||
../10/,ctf.css
|
|
@ -1,76 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import cgi
|
||||
import cgitb
|
||||
cgitb.enable(context=10)
|
||||
|
||||
if os.environ.has_key('QUERY_STRING'):
|
||||
os.environ['QUERY_STRING'] = ''
|
||||
|
||||
fields = cgi.FieldStorage()
|
||||
|
||||
print 'Content-Type: text/html'
|
||||
print ''
|
||||
|
||||
print '''
|
||||
<html>
|
||||
<head>
|
||||
<title>4</title>
|
||||
<link rel="stylesheet" type="text/css" href=",ctf.css" media="all" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<h1>Web Application Challenge 4</h1>
|
||||
<p>Through some manipulation or interpretation of this CGI script
|
||||
and the HTML page(s) that it generates, a 10 character key can be
|
||||
found.</p>
|
||||
<p><strong>Find the key!</strong></p>
|
||||
|
||||
<div class="vertsep"></div>
|
||||
'''
|
||||
|
||||
PRODUCT_NAME = "Unidentifiable garbage"
|
||||
|
||||
def purchase_success(quantity):
|
||||
print '''
|
||||
<p>Congratulations, your order for %d "%s" has been placed.</p>
|
||||
''' % (quantity, PRODUCT_NAME)
|
||||
|
||||
# key = 765JBo4B54
|
||||
if fields.has_key('quantity') and fields.has_key('product') and fields['product'].value == PRODUCT_NAME:
|
||||
product = fields['product'].value
|
||||
quantity = int(fields['quantity'].value)
|
||||
|
||||
purchase_success(quantity)
|
||||
else:
|
||||
print '''
|
||||
|
||||
<h2>SALE: %s</h2>
|
||||
<p>Use the order form below to place an order.</p>
|
||||
|
||||
<form method="post" action="4.cgi">
|
||||
How many would you like?
|
||||
<select name="quantity">
|
||||
<option value="12">12</option>
|
||||
<option value="24">24</option>
|
||||
<option value="48">48</option>
|
||||
</select>
|
||||
<br /><br />
|
||||
<input type="submit" value="Order!" />
|
||||
<input type="hidden" name="product" value="%s" />
|
||||
</form>
|
||||
''' % (PRODUCT_NAME, PRODUCT_NAME)
|
||||
|
||||
print '''
|
||||
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>Copyright © 2009 LANS, LLC.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
|
@ -1 +0,0 @@
|
|||
765JBo4B54
|
|
@ -1 +0,0 @@
|
|||
../10/,binary.png
|
|
@ -1 +0,0 @@
|
|||
../10/,ctf.css
|
|
@ -1,89 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import cgi
|
||||
import cgitb
|
||||
cgitb.enable(context=10)
|
||||
|
||||
if os.environ.has_key('QUERY_STRING'):
|
||||
os.environ['QUERY_STRING'] = ''
|
||||
|
||||
fields = cgi.FieldStorage()
|
||||
|
||||
print 'Content-Type: text/html'
|
||||
print ''
|
||||
|
||||
print '''
|
||||
<html>
|
||||
<head>
|
||||
<title>5</title>
|
||||
<link rel="stylesheet" type="text/css" href=",ctf.css" media="all" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<h1>Web Application Challenge 5</h1>
|
||||
<p>Through some manipulation or interpretation of this CGI script
|
||||
and the HTML page(s) that it generates, a 10 character key can be
|
||||
found.</p>
|
||||
<p><strong>Find the key!</strong></p>
|
||||
|
||||
<div class="vertsep"></div>
|
||||
'''
|
||||
|
||||
PRODUCT_NAME = "Alex Brugh"
|
||||
QUANT_LIMIT = 1
|
||||
|
||||
def purchase_success(quantity):
|
||||
print '''
|
||||
<p>Congratulations, your order for %d "%s" has been placed.</p>
|
||||
''' % (quantity, PRODUCT_NAME)
|
||||
|
||||
class InvalidQuantityError(Exception):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
def __str__(self):
|
||||
return repr(self.value)
|
||||
|
||||
quantity = None
|
||||
if fields.has_key('quantity') and fields.has_key('product') and fields['product'].value == PRODUCT_NAME:
|
||||
product = fields['product'].value
|
||||
try:
|
||||
quantity = int(fields['quantity'].value)
|
||||
if quantity > QUANT_LIMIT:
|
||||
# key = eVkIwHzOok
|
||||
raise InvalidQuantityError("%d is not a valid quantity (limit %d)" % (quantity, QUANT_LIMIT))
|
||||
except ValueError:
|
||||
print '''
|
||||
<p class="error">There was an error with your order request. Sorry.</p>
|
||||
'''
|
||||
quantity = None
|
||||
|
||||
if quantity is not None:
|
||||
purchase_success(quantity)
|
||||
else:
|
||||
print '''
|
||||
|
||||
<h2>SALE: %s</h2>
|
||||
<p>Use the order form below to place an order.</p>
|
||||
|
||||
<form method="post" action="5.cgi">
|
||||
<em>Orders for "%s" are limited to 1 per customer.</em>
|
||||
<br /><br />
|
||||
<input type="submit" value="Order!" />
|
||||
<input type="hidden" name="product" value="%s" />
|
||||
<input type="hidden" name="quantity" value="1" />
|
||||
</form>
|
||||
''' % (PRODUCT_NAME, PRODUCT_NAME, PRODUCT_NAME)
|
||||
|
||||
print '''
|
||||
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>Copyright © 2009 LANS, LLC.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
|
@ -1 +0,0 @@
|
|||
eVkIwHzOok
|
|
@ -1 +0,0 @@
|
|||
../10/,binary.png
|
|
@ -1 +0,0 @@
|
|||
../10/,ctf.css
|
|
@ -1,72 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import cgi
|
||||
import cgitb
|
||||
cgitb.enable(context=10)
|
||||
|
||||
#if os.environ.has_key('QUERY_STRING'):
|
||||
# os.environ['QUERY_STRING'] = ''
|
||||
|
||||
fields = cgi.FieldStorage()
|
||||
|
||||
import Cookie
|
||||
c = Cookie.SimpleCookie()
|
||||
c['key'] = 'QJebByJaKX'
|
||||
c['content'] = '<p><em>Maybe I should have used sessions...</em></p>'
|
||||
|
||||
print 'Content-Type: text/html\n%s\n\n\n' % c
|
||||
print ''
|
||||
|
||||
print '''
|
||||
<html>
|
||||
<head>
|
||||
<title>6</title>
|
||||
<link rel="stylesheet" type="text/css" href=",ctf.css" media="all" />
|
||||
<script type="text/javascript">
|
||||
function readCookie(key) {
|
||||
var s = key + '=';
|
||||
var toks = document.cookie.split(';');
|
||||
for (var i = 0; i < toks.length; i++) {
|
||||
var tok = toks[i];
|
||||
while (tok.charAt(0) == ' ') {
|
||||
tok = tok.substring(1, tok.length);
|
||||
}
|
||||
if (tok.indexOf(s) == 0) {
|
||||
return tok.substring(s.length, tok.length);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function setContent() {
|
||||
content = readCookie("content");
|
||||
document.getElementById("stuff").innerHTML = content.substring(1, content.length-1);
|
||||
}
|
||||
|
||||
window.onload = setContent;
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<h1>Web Application Challenge 6</h1>
|
||||
<p>Through some manipulation or interpretation of this CGI script
|
||||
and the HTML page(s) that it generates, a 10 character key can be
|
||||
found.</p>
|
||||
<p><strong>Find the key!</strong></p>
|
||||
|
||||
<div class="vertsep"></div>
|
||||
<div id="stuff"></div>
|
||||
'''
|
||||
|
||||
print '''
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>Copyright © 2009 LANS, LLC.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
|
@ -1 +0,0 @@
|
|||
QJebByJaKX
|
|
@ -1 +0,0 @@
|
|||
../10/,binary.png
|
|
@ -1 +0,0 @@
|
|||
../10/,ctf.css
|
|
@ -1,86 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import cgi
|
||||
import cgitb
|
||||
cgitb.enable(context=10)
|
||||
|
||||
#if os.environ.has_key('QUERY_STRING'):
|
||||
# os.environ['QUERY_STRING'] = ''
|
||||
|
||||
fields = cgi.FieldStorage()
|
||||
|
||||
import Cookie
|
||||
c = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', ''))
|
||||
|
||||
content = {
|
||||
'joke1' : '<p>An infinite number of mathematicians walk into a bar. The first one orders a beer. The second orders half a beer. The third, a quarter of a beer. The bartender says <em>You are all idiots!</em> and pours two beers.<p>',
|
||||
'joke2' : '<p>Two atoms are talking. One of them says <em>I think I lost an electron!</em> and the other says <em>Are you sure?</em> The first replies <em>Yeah, I am positive!</em></p>',
|
||||
}
|
||||
|
||||
if c.has_key('content_name') and c.has_key('content'):
|
||||
k = c['content_name'].value
|
||||
try:
|
||||
c['content'] = content[k]
|
||||
except KeyError:
|
||||
c['content'] = '<p><em>key = s4nNlaMScV</em></p>'
|
||||
else:
|
||||
c['content_name'] = 'joke1';
|
||||
c['content'] = content['joke1']
|
||||
|
||||
|
||||
print 'Content-Type: text/html\n%s\n\n\n' % c
|
||||
print ''
|
||||
|
||||
print '''
|
||||
<html>
|
||||
<head>
|
||||
<title>7</title>
|
||||
<link rel="stylesheet" type="text/css" href=",ctf.css" media="all" />
|
||||
<script type="text/javascript">
|
||||
function readCookie(key) {
|
||||
var s = key + '=';
|
||||
var toks = document.cookie.split(';');
|
||||
for (var i = 0; i < toks.length; i++) {
|
||||
var tok = toks[i];
|
||||
while (tok.charAt(0) == ' ') {
|
||||
tok = tok.substring(1, tok.length);
|
||||
}
|
||||
if (tok.indexOf(s) == 0) {
|
||||
return tok.substring(s.length, tok.length);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function getContent() {
|
||||
content = readCookie("content");
|
||||
document.getElementById("stuff").innerHTML = content.substring(1, content.length-1);
|
||||
}
|
||||
|
||||
window.onload = getContent;
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<h1>Web Application Challenge 7</h1>
|
||||
<p>Through some manipulation or interpretation of this CGI script
|
||||
and the HTML page(s) that it generates, a 10 character key can be
|
||||
found.</p>
|
||||
<p><strong>Find the key!</strong></p>
|
||||
|
||||
<div class="vertsep"></div>
|
||||
<div id="stuff"></div>
|
||||
'''
|
||||
|
||||
print '''
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>Copyright © 2009 LANS, LLC.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
|
@ -1 +0,0 @@
|
|||
s4nNlaMScV
|
|
@ -1 +0,0 @@
|
|||
../10/,binary.png
|
|
@ -1 +0,0 @@
|
|||
../10/,ctf.css
|
|
@ -1,4 +0,0 @@
|
|||
<p>An unsigned integer walks into a bar and orders a drink.<br />
|
||||
The bartender delivers it and says, "Is something wrong?"<br />
|
||||
The int looks up and replies, "Parity error."<br />
|
||||
"Ah," the bartender replies, "I thought you looked a bit off."</p>
|
|
@ -1,2 +0,0 @@
|
|||
<p>There are 10 types of people in the world: those who understand binary and those who don't.</p>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<p>Why do programmers confuse Halloween and Christmas?<br /><br />
|
||||
Because OCT 31 == DEC 25!</p>
|
|
@ -1,2 +0,0 @@
|
|||
<p>Once a programmer drowned in the sea. Many people were at the beach at the time,
|
||||
but the programmer was shouting "F1! F1!" and nobody understood it.</p>
|
|
@ -1,6 +0,0 @@
|
|||
<p>"Knock, Knock."<br />
|
||||
"Who's there?"<br />
|
||||
<br />
|
||||
... long pause ...<br />
|
||||
<br />
|
||||
"Java."</p>
|
|
@ -1,45 +0,0 @@
|
|||
#!/usr/bin/env python2.6
|
||||
|
||||
import os
|
||||
import sys
|
||||
import sqlite3
|
||||
import base64
|
||||
import stat
|
||||
|
||||
# new db
|
||||
if os.path.exists(',zomg.sqlite3'):
|
||||
os.remove(',zomg.sqlite3')
|
||||
db = sqlite3.connect(',zomg.sqlite3')
|
||||
cur = db.cursor()
|
||||
|
||||
# pics table
|
||||
cur.execute('create table pics(id integer primary key, data blob)')
|
||||
paths = os.listdir(',pics/')
|
||||
for path in paths:
|
||||
f = open(os.path.join(',pics/', path), 'rb')
|
||||
data = f.read()
|
||||
f.close()
|
||||
encoded = base64.encodestring(data)
|
||||
html = '<img src="data:image/jpg;base64,%s"/>' % encoded
|
||||
cur.execute('insert into pics(data) values(?)', (html,))
|
||||
|
||||
# jokes table
|
||||
cur.execute('create table jokes(id integer primary key, data text)')
|
||||
paths = os.listdir(',jokes/')
|
||||
for path in paths:
|
||||
f = open(os.path.join(',jokes/', path), 'r')
|
||||
html = f.read()
|
||||
f.close()
|
||||
cur.execute('insert into jokes(data) values(?)', (html,))
|
||||
|
||||
# key
|
||||
cur.execute('create table key(id integer primary key, data text)')
|
||||
for k in [None, None, None, None, None, 'dmW5f9P54e']:
|
||||
cur.execute('insert into key(data) values(?)', (k,))
|
||||
|
||||
# clean up
|
||||
db.commit()
|
||||
cur.close()
|
||||
db.close()
|
||||
|
||||
os.chmod(',zomg.sqlite3', stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
|
Binary file not shown.
Before Width: | Height: | Size: 57 KiB |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
Binary file not shown.
Before Width: | Height: | Size: 136 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
Binary file not shown.
Before Width: | Height: | Size: 57 KiB |
Binary file not shown.
|
@ -1,150 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import cgi
|
||||
import cgitb
|
||||
import sqlite3
|
||||
cgitb.enable(context=10)
|
||||
|
||||
if os.environ.has_key('QUERY_STRING'):
|
||||
os.environ['QUERY_STRING'] = ''
|
||||
|
||||
fields = cgi.FieldStorage()
|
||||
|
||||
q = None
|
||||
if fields.has_key('q'):
|
||||
q = fields['q'].value
|
||||
|
||||
if q is not None:
|
||||
print 'Content-Type: text/html\n'
|
||||
try:
|
||||
db = sqlite3.connect(',zomg.sqlite3')
|
||||
cur = db.cursor()
|
||||
cur.execute(q)
|
||||
results = cur.fetchall()
|
||||
|
||||
print '<table>'
|
||||
for r in results:
|
||||
print '<tr>'
|
||||
for thing in r:
|
||||
print '<td>%s</td>' % thing
|
||||
print '</tr>'
|
||||
print '</table>'
|
||||
|
||||
except Exception:
|
||||
print '<p class="error">Invalid query: %s</p>' % q
|
||||
|
||||
else:
|
||||
print 'Content-Type: text/html\n'
|
||||
print ''
|
||||
|
||||
print '''
|
||||
<html>
|
||||
<head>
|
||||
<title>8</title>
|
||||
<link rel="stylesheet" type="text/css" href=",ctf.css" media="all" />
|
||||
<script type="text/javascript">
|
||||
|
||||
function buildQuery(table_name, result_limit) {
|
||||
var q = "SELECT * FROM " + table_name + " LIMIT " + result_limit;
|
||||
return q;
|
||||
}
|
||||
|
||||
function getXHRObject() {
|
||||
var xhr = null;
|
||||
try {
|
||||
xhr = new XMLHttpRequest();
|
||||
}
|
||||
catch (ex) {
|
||||
try {
|
||||
xhr = new ActiveXObject("msxml2.XMLHTTP");
|
||||
}
|
||||
catch (ex) {
|
||||
alert("Browser does not support AJAX!")
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return xhr;
|
||||
}
|
||||
|
||||
function sendXHRPost(xhr, url, params) {
|
||||
xhr.open("POST", url, true);
|
||||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||
xhr.setRequestHeader("Content-length", params.length);
|
||||
xhr.setRequestHeader("Connection", "close");
|
||||
xhr.send(params)
|
||||
}
|
||||
|
||||
function doQuery(q) {
|
||||
var xhr = getXHRObject();
|
||||
if (xhr != null) {
|
||||
var url = "8.cgi";
|
||||
var params = "q=" + q;
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState == 4) {
|
||||
var response = xhr.responseText;
|
||||
var d = document.getElementById("results");
|
||||
d.innerHTML = response;
|
||||
}
|
||||
}
|
||||
sendXHRPost(xhr, url, params);
|
||||
}
|
||||
}
|
||||
|
||||
function submitForm() {
|
||||
var f = document.getElementById("the_form");
|
||||
var table_name = f.tname.value;
|
||||
var result_limit = f.rlimit.value;
|
||||
|
||||
var q = buildQuery(table_name, result_limit);
|
||||
|
||||
doQuery(q);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<h1>Web Application Challenge 8</h1>
|
||||
<p>Through some manipulation or interpretation of this CGI script
|
||||
and the HTML page(s) that it generates, a 10 character key can be
|
||||
found.</p>
|
||||
<p><strong>Find the key!</strong></p>
|
||||
|
||||
<div class="vertsep"></div>
|
||||
<h2>Database Query Wizard</h2>
|
||||
<p>Use the form below to retrieve data from the database. Select the
|
||||
type of data that you would like to view and the number of database
|
||||
entries to retrieve and then click on the "Query" button.</p>
|
||||
|
||||
<form id="the_form" action="" method="POST" onsubmit="return submitForm()">
|
||||
<br />
|
||||
Topic: <select name="tname">
|
||||
<option value="jokes">Jokes</option>
|
||||
<option value="pics">Pictures</option>
|
||||
</select>
|
||||
<br /><br />
|
||||
# Results: <select name="rlimit">
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
</select>
|
||||
<br /><br />
|
||||
<input type="submit" value="Query" />
|
||||
</form>
|
||||
|
||||
<div id="results"></div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>Copyright © 2009 LANS, LLC.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
|
@ -1 +0,0 @@
|
|||
dmW5f9P54e
|
|
@ -139,7 +139,10 @@ to be in radians, and must be in the range 0 <= angle < 2*pi.
|
|||
is negative if angle2 leads angle1 (clockwise)..
|
||||
"""
|
||||
|
||||
return (angle2 - angle1) % pi2
|
||||
ret = (angle2 - angle1) % pi2
|
||||
if ret > math.pi:
|
||||
ret -= pi2
|
||||
return ret
|
||||
|
||||
def getDist(point1, point2):
|
||||
"""Returns the distance between point1 and point2."""
|
||||
|
|
|
@ -196,11 +196,21 @@ class Pflanzarr:
|
|||
cgi.escape(tank.deathReason)))
|
||||
body.write(' </table>\n')
|
||||
|
||||
links='''<h3>Tanks</h3>
|
||||
<ul>
|
||||
<li><a href="docs.html">Docs</a></li>
|
||||
<li><a href="results.cgi">Results</a></li>
|
||||
<li><a href="submit.html">Submit</a></li>
|
||||
<li><a href="errors.cgi">My Errors</a></li>
|
||||
</ul>
|
||||
'''
|
||||
|
||||
# Write everything out
|
||||
html.write(self.gameFilename,
|
||||
'Tanks round %d' % self.gameNum,
|
||||
body.getvalue(),
|
||||
hdr=hdr.getvalue(),
|
||||
links=links,
|
||||
onload='start(turns);')
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue