index.php

1
<?php
2
 
3
require_once('recaptchalib.php');
4
require_once('config.php');
5
 
6
if(!array_key_exists('backend', $config))
7
	die("Please specify a backend in config.php!");
8
 
9
if($config['debug'])
10
	include('backend_'.$config['backend'].'.php');
11
else
12
	@include('backend_'.$config['backend'].'.php');
13
 
14
if(class_exists("RegistrationBackend"))
15
{
16
	$registration_backend = new RegistrationBackend();
17
}
18
else
19
{
20
	echo('Failed to initialize backend "'.$config['backend'].'": ');
21
	
22
	if(!$config['debug'])
23
		echo('enable debug in the config for more info.');
24
	else
25
		include('backend_'.$config['backend'].'.php');
26
	die();
27
}
28
 
29
header( 'Content-type: text/html; charset=utf-8' );
30
 
31
?>
32
<html>
33
<head>
34
	<link rel='stylesheet' href='themes/<?php echo $config['theme']; ?>/style.css' />
35
</head>
36
<body>
37
 
38
<?php @include('themes/'.$config['theme'].'/header.php'); ?>
39
 
40
<div id="box">
41
 
42
<?php
43
if (!$_POST["submit"])
44
{
45
?>
46
 
47
<h2>Register a <?php echo ucfirst($config['host']); ?> account</h2>
48
<p>Use the form below to create an account.</p>
49
<form method="post">
50
	<table>
51
	<tr><td class="label">Username:</td><td><input type="text" class="edit username" name="username" size="10" />@<?php echo $config['host']; ?></td></tr>
52
	<tr><td class="label">Password:</td><td><input type="password" class="edit" name="password" size="15"/></td></tr>
53
	<tr><td class="label">Re-type password:</td><td><input type="password" class="edit" name="password2" size="15"/></td></tr>
54
	<tr><td colspan="2" style="text-align:center; margin-left:auto; margin-right:auto;" align="center">
55
		<center>
56
			<div id="captcha">
57
				<?php echo recaptcha_get_html($config['recaptchaPublicKey'], null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'); ?>
58
			</div>
59
		</center>
60
	</td></tr>
61
	<tr><td colspan="2" style="text-align:center;">
62
		<input type="submit" name="submit" value="Register" />
63
	</td></tr>
64
</form>
65
 
66
<?php
67
}
68
else
69
{
70
	// Process submission
71
	$resp = recaptcha_check_answer ($config['recaptchaPrivateKey'],
72
                                $_SERVER["REMOTE_ADDR"],
73
                                $_POST["recaptcha_challenge_field"],
74
                                $_POST["recaptcha_response_field"]);
75
	if ($resp->is_valid)
76
	{
77
		$registration_backend->init($config);
78
		$user = $_POST['username'];
79
		$pass = $_POST['password'];
80
		$pass2 = $_POST['password2'];
81
 
82
		$ok = true;
83
		
84
		if (!$user)
85
		{
86
			echo '<p>Sorry, you didn\'t tell us which username you want! Please <a href="./">go back</a> and try again.</p>';
87
			$ok = false;
88
		}
89
			
90
		if($pass !== $pass2)
91
		{
92
			echo '<p>The two passwords you typed are not the same, please <a href="./">go back</a> and try more carefully! :-)</p>';
93
			$ok = false;
94
		}
95
 
96
		if($ok)
97
		{
98
			if(!mb_check_encoding($user, 'UTF-8') || !mb_check_encoding($pass, 'UTF-8'))
99
			{
100
				echo '<p>Sorry, your browser sent an invalid form entry. Try removing special characters from your username/password.</p>';
101
				echo '<p>Alternatively please try a different browser and re-submit <a href="./">the form</a>.</p>';
102
				$ok = false;
103
			}
104
			else
105
			{
106
				$user = mb_strtolower($user, 'UTF-8');
107
			}
108
		}
109
		
110
		// Check that username is valid for a JID
111
		if ($ok && strlen($user) > 255)
112
		{
113
			echo '<p>Sorry, the username you entered is waaaaay too long. <a href="./">Please try</a> something shorter!</p>';
114
			$ok = false;
115
		}
116
		
117
		if ($ok)
118
		{
119
			if (strcspn($user, "\"&'/:<>@".chr(127)) !== strlen($user))
120
			{
121
				echo '<p>Sorry, that username contains invalid characters (such as &, <, >, / etc.). Please remove them and <a href="./">try again</a>.</p>';
122
				echo strcspn($user, "\"&'/:<>@".chr(127))." vs ".strlen($user);
123
				$ok = false;
124
			}
125
			else if (strpos($user, chr(255).chr(254)) || strpos($user, chr(255.255)))
126
			{
127
				echo '<p>Sorry, that username contains invalid characters. Please remove them and <a href="./">try again</a>.</p>';
128
				$ok = false;				
129
			}
130
			else
131
			{
132
				$charfreq = array_keys(count_chars($user, 1));
133
				if (min($charfreq) <= 32)
134
				{
135
					echo '<p>Sorry, that username contains invalid characters. For example you cannot use spaces in a username. Please <a href="./">go back</a>, remove them, and try again.</p>';
136
					$ok = false;
137
				}
138
			}
139
			
140
		}
141
 
142
		if ($ok && (strlen($pass) < 6))
143
		{
144
			echo '<p>Your password isn\'t long enough. It needs to be at least 6 characters long, to make sure that it can\'t be easily guessed. <a href="./">Go back</a> and try again.</p>';
145
			$ok = false;
146
		}
147
 
148
		if ($ok)
149
		{
150
			$backend_message = $registration_backend->validate($user, $pass);
151
			if($backend_message)
152
			{
153
				echo "<p>".htmlentities($backend_message)." Please <a href='./'>go back</a> and try again.</p>";
154
				$ok = false;
155
			}
156
		}
157
 
158
		// Check that username does not already exist
159
		if ($ok)
160
		{
161
			if($registration_backend->exists($user))
162
			{
163
				echo '<p>A user with that name already exists, please <a href="./">go back</a> and choose a different username.</p>';
164
				$ok = false;
165
			}				
166
		}
167
		
168
		if ($ok)
169
		{
170
			$result = $registration_backend->create($user, $pass);
171
			if ($result)
172
			{
173
				echo '<p>You successfully registered the Jabber ID<br/><b>'.$_POST["username"].'@'.$config['host'].'</b></p>';
174
				echo "<div style='text-align:left;'>";
175
				echo "<p>If you haven't already, now is a good time to ";
176
				echo "<a href='http://www.jabber.org/index.php/download-a-client/'>download a client</a> which you can ";
177
				echo 'use to log into your new account.</p>';
178
				echo '<p>Wondering what you can do with your new <a href="'.$config['website'].'">'.$config['host'].'</a> account? ';
179
				echo 'Here are some services at which you can use your Jabber ID:</p>';
180
				echo '<ul>';
181
				echo '<li><a href="http://identi.ca/">identi.ca</a> - Open microblogging service</li>';
182
				echo '<li><a href="http://speeqe.com/">Speeqe</a> - Web-based Jabber chatrooms</li>';
183
				echo '</ul>';
184
				echo '<p><b>Did you know?</b> <a href="http://www.google.com/talk/">Google Talk</a> is one of the many other ';
185
				echo '<a href="http://xmpp.org/services/">Jabber-compatible services</a>, which ';
186
				echo 'means you can add your Gmail and Google Apps friends directly to your '.ucfirst($config['host']).' contact list!</p>';
187
				echo '</div>';
188
			}
189
			else
190
				echo '<p>There was a problem creating your account. If the problem persists, please <a href="http://speeqe.com/room/jabber@conference.jabber.org/">contact us</a>.</p>';
191
		}
192
		$registration_backend->close();
193
	}
194
	else
195
	{
196
		echo '<p>Sorry, the CAPTCHA text you entered was incorrect, please <a href="./">go back</a> and try again.</p>';
197
		if($config['debug'])
198
			echo '('.$resp->error.')';
199
	}                          
200
}
201
?>
202
 
203
</div>
204
<?php @include('themes/'.$config['theme'].'/footer.php'); ?>
205
</body>
206
</html>