User creation and sign-in scriptStorytelling program: Gathers stories from certain popular story websites/formats and reads them aloudScoring and grading answers against an answer keyVB.NET code to AES encrypt and decryptImplementation of stackBills dispenser machineProject Euler #11 Largest product in a gridPython Search file for string and read into listSerializing output of a match result web scraperControlling Finances with Web DevelopmentLet's register that Django user
Is there a problem with hiding "forgot password" until it's needed?
Do the temporary hit points from the Battlerager barbarian's Reckless Abandon stack if I make multiple attacks on my turn?
Large drywall patch supports
Is exact Kanji stroke length important?
India just shot down a satellite from the ground. At what altitude range is the resulting debris field?
What happens if you roll doubles 3 times then land on "Go to jail?"
Proof of work - lottery approach
Different result between scanning in Epson's "color negative film" mode and scanning in positive -> invert curve in post?
How does buying out courses with grant money work?
CREATE opcode: what does it really do?
Unreliable Magic - Is it worth it?
Gears on left are inverse to gears on right?
How to safely derail a train during transit?
Pole-zeros of a real-valued causal FIR system
What is the opposite of 'gravitas'?
Detecting if an element is found inside a container
You cannot touch me, but I can touch you, who am I?
Term for the "extreme-extension" version of a straw man fallacy?
Inappropriate reference requests from Journal reviewers
Failed to fetch jessie backports repository
Is there a korbon needed for conversion?
What is the best translation for "slot" in the context of multiplayer video games?
Would a high gravity rocky planet be guaranteed to have an atmosphere?
What is the difference between "behavior" and "behaviour"?
User creation and sign-in script
Storytelling program: Gathers stories from certain popular story websites/formats and reads them aloudScoring and grading answers against an answer keyVB.NET code to AES encrypt and decryptImplementation of stackBills dispenser machineProject Euler #11 Largest product in a gridPython Search file for string and read into listSerializing output of a match result web scraperControlling Finances with Web DevelopmentLet's register that Django user
$begingroup$
I made code for signing in users and storing data about them. Everything is fully encrypted and secure also, it is meant to be imported into other code. I'm looking for ways to improve it and to fix any bugs people might find.
import pickle
import base64
class user():
def __init__(self, username, password, user_data):
self.username = username
self.password = password
self.user_data = user_data
def get_user():
try:
user_saves = open("users", 'rb')
users = dict(pickle.load(user_saves))
user_saves.close
name, password, users = sign_in(users)
except:
name, password, users = new_user(True)
name = base64.b64decode(name.decode('utf-8'))
password = base64.b64decode(password.decode('utf-8'))
return name, password, users
def new_user(is_first = False, users=None):
print('Creating account... ')
if users != None:
loop = True
while loop:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
if name in users:
print('Already taken.')
else:
loop = False
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
else:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if is_first == True:
user = name:password
user_saves = open("users", 'wb')
pickle.dump(user, user_saves)
add_user_data('', password, True)
return name, password, user
else:
add_user_data('', password)
users.update(name:password)
user_saves = open("users", 'wb')
pickle.dump(users, user_saves)
return name, password, users
user_saves.close
def sign_in(users):
nsi = True #not signed in
while nsi == True:
username = input('What is your username: ')
username = base64.b64encode(username.encode('utf-8'))
if username in users:
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if password == users.get(username):
print('working')
nsi = False
return username, password
else:
print('Wrong password.')
else:
yn = y_or_n('y or n, are you a new user: ')
if yn == True:
nsi = False
name, password = new_user(users=users)
return name, password
def y_or_n(promt):
ni = True #no input
while ni:
yn = input(promt).lower()
if yn == 'y':
return True
elif yn == 'n':
return False
else:
print('y or n')
def add_user_data(data, password, is_first=False):
password = base64.b64encode(password.encode('utf-8'))
data = base64.b64encode(data.encode('utf-8'))
if is_first == True:
user_data = password:data
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
else:
user_data.update(password:data)
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
users_data.close
def get_user_data(password):
password = base64.b64encode(password.encode('utf-8'))
user_data = pickle.load('user_data')
user_data = base64.b64decode(user_data.decode('utf-8'))
return user_data
def delete_user(name, data, ):
data.pop('name', None)
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
python beginner python-3.x authentication
$endgroup$
add a comment |
$begingroup$
I made code for signing in users and storing data about them. Everything is fully encrypted and secure also, it is meant to be imported into other code. I'm looking for ways to improve it and to fix any bugs people might find.
import pickle
import base64
class user():
def __init__(self, username, password, user_data):
self.username = username
self.password = password
self.user_data = user_data
def get_user():
try:
user_saves = open("users", 'rb')
users = dict(pickle.load(user_saves))
user_saves.close
name, password, users = sign_in(users)
except:
name, password, users = new_user(True)
name = base64.b64decode(name.decode('utf-8'))
password = base64.b64decode(password.decode('utf-8'))
return name, password, users
def new_user(is_first = False, users=None):
print('Creating account... ')
if users != None:
loop = True
while loop:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
if name in users:
print('Already taken.')
else:
loop = False
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
else:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if is_first == True:
user = name:password
user_saves = open("users", 'wb')
pickle.dump(user, user_saves)
add_user_data('', password, True)
return name, password, user
else:
add_user_data('', password)
users.update(name:password)
user_saves = open("users", 'wb')
pickle.dump(users, user_saves)
return name, password, users
user_saves.close
def sign_in(users):
nsi = True #not signed in
while nsi == True:
username = input('What is your username: ')
username = base64.b64encode(username.encode('utf-8'))
if username in users:
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if password == users.get(username):
print('working')
nsi = False
return username, password
else:
print('Wrong password.')
else:
yn = y_or_n('y or n, are you a new user: ')
if yn == True:
nsi = False
name, password = new_user(users=users)
return name, password
def y_or_n(promt):
ni = True #no input
while ni:
yn = input(promt).lower()
if yn == 'y':
return True
elif yn == 'n':
return False
else:
print('y or n')
def add_user_data(data, password, is_first=False):
password = base64.b64encode(password.encode('utf-8'))
data = base64.b64encode(data.encode('utf-8'))
if is_first == True:
user_data = password:data
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
else:
user_data.update(password:data)
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
users_data.close
def get_user_data(password):
password = base64.b64encode(password.encode('utf-8'))
user_data = pickle.load('user_data')
user_data = base64.b64decode(user_data.decode('utf-8'))
return user_data
def delete_user(name, data, ):
data.pop('name', None)
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
python beginner python-3.x authentication
$endgroup$
add a comment |
$begingroup$
I made code for signing in users and storing data about them. Everything is fully encrypted and secure also, it is meant to be imported into other code. I'm looking for ways to improve it and to fix any bugs people might find.
import pickle
import base64
class user():
def __init__(self, username, password, user_data):
self.username = username
self.password = password
self.user_data = user_data
def get_user():
try:
user_saves = open("users", 'rb')
users = dict(pickle.load(user_saves))
user_saves.close
name, password, users = sign_in(users)
except:
name, password, users = new_user(True)
name = base64.b64decode(name.decode('utf-8'))
password = base64.b64decode(password.decode('utf-8'))
return name, password, users
def new_user(is_first = False, users=None):
print('Creating account... ')
if users != None:
loop = True
while loop:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
if name in users:
print('Already taken.')
else:
loop = False
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
else:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if is_first == True:
user = name:password
user_saves = open("users", 'wb')
pickle.dump(user, user_saves)
add_user_data('', password, True)
return name, password, user
else:
add_user_data('', password)
users.update(name:password)
user_saves = open("users", 'wb')
pickle.dump(users, user_saves)
return name, password, users
user_saves.close
def sign_in(users):
nsi = True #not signed in
while nsi == True:
username = input('What is your username: ')
username = base64.b64encode(username.encode('utf-8'))
if username in users:
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if password == users.get(username):
print('working')
nsi = False
return username, password
else:
print('Wrong password.')
else:
yn = y_or_n('y or n, are you a new user: ')
if yn == True:
nsi = False
name, password = new_user(users=users)
return name, password
def y_or_n(promt):
ni = True #no input
while ni:
yn = input(promt).lower()
if yn == 'y':
return True
elif yn == 'n':
return False
else:
print('y or n')
def add_user_data(data, password, is_first=False):
password = base64.b64encode(password.encode('utf-8'))
data = base64.b64encode(data.encode('utf-8'))
if is_first == True:
user_data = password:data
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
else:
user_data.update(password:data)
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
users_data.close
def get_user_data(password):
password = base64.b64encode(password.encode('utf-8'))
user_data = pickle.load('user_data')
user_data = base64.b64decode(user_data.decode('utf-8'))
return user_data
def delete_user(name, data, ):
data.pop('name', None)
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
python beginner python-3.x authentication
$endgroup$
I made code for signing in users and storing data about them. Everything is fully encrypted and secure also, it is meant to be imported into other code. I'm looking for ways to improve it and to fix any bugs people might find.
import pickle
import base64
class user():
def __init__(self, username, password, user_data):
self.username = username
self.password = password
self.user_data = user_data
def get_user():
try:
user_saves = open("users", 'rb')
users = dict(pickle.load(user_saves))
user_saves.close
name, password, users = sign_in(users)
except:
name, password, users = new_user(True)
name = base64.b64decode(name.decode('utf-8'))
password = base64.b64decode(password.decode('utf-8'))
return name, password, users
def new_user(is_first = False, users=None):
print('Creating account... ')
if users != None:
loop = True
while loop:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
if name in users:
print('Already taken.')
else:
loop = False
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
else:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if is_first == True:
user = name:password
user_saves = open("users", 'wb')
pickle.dump(user, user_saves)
add_user_data('', password, True)
return name, password, user
else:
add_user_data('', password)
users.update(name:password)
user_saves = open("users", 'wb')
pickle.dump(users, user_saves)
return name, password, users
user_saves.close
def sign_in(users):
nsi = True #not signed in
while nsi == True:
username = input('What is your username: ')
username = base64.b64encode(username.encode('utf-8'))
if username in users:
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if password == users.get(username):
print('working')
nsi = False
return username, password
else:
print('Wrong password.')
else:
yn = y_or_n('y or n, are you a new user: ')
if yn == True:
nsi = False
name, password = new_user(users=users)
return name, password
def y_or_n(promt):
ni = True #no input
while ni:
yn = input(promt).lower()
if yn == 'y':
return True
elif yn == 'n':
return False
else:
print('y or n')
def add_user_data(data, password, is_first=False):
password = base64.b64encode(password.encode('utf-8'))
data = base64.b64encode(data.encode('utf-8'))
if is_first == True:
user_data = password:data
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
else:
user_data.update(password:data)
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
users_data.close
def get_user_data(password):
password = base64.b64encode(password.encode('utf-8'))
user_data = pickle.load('user_data')
user_data = base64.b64decode(user_data.decode('utf-8'))
return user_data
def delete_user(name, data, ):
data.pop('name', None)
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
python beginner python-3.x authentication
python beginner python-3.x authentication
edited 3 mins ago
200_success
130k17155419
130k17155419
asked 1 hour ago
hacker HDhacker HD
487
487
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
Security
Everything is fully encrypted and secure
Oh, really? I hope that you aren't confusing encoding with encryption. I don't see any encryption taking place.
This is a huge topic, so you have some reading to do - but the bar for 'secure password store' is significantly above where this program currently resides.
Class syntax
This:
class user():
should be
class User:
Also, you're currently using it as a struct with no methods. That should change - you should move some of your code to be methods on that class.
Break
This:
loop = True
while loop:
should be reworked. You can use a while True
, and replace the loop = False
with a break
at the end of that if
block.
File handles
Rather than explicitly closing your files, you should usually use them in a with
block. Also, this:
user_saves.close
doesn't do what you think it does; in fact it does nothing. For the function call to occur, you need to add ()
.
Redundant else
This:
return name, password, user
else:
doesn't need an else
, because you've returned in the previous block.
Write a main
method
...to pull this code out of global scope:
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216383%2fuser-creation-and-sign-in-script%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Security
Everything is fully encrypted and secure
Oh, really? I hope that you aren't confusing encoding with encryption. I don't see any encryption taking place.
This is a huge topic, so you have some reading to do - but the bar for 'secure password store' is significantly above where this program currently resides.
Class syntax
This:
class user():
should be
class User:
Also, you're currently using it as a struct with no methods. That should change - you should move some of your code to be methods on that class.
Break
This:
loop = True
while loop:
should be reworked. You can use a while True
, and replace the loop = False
with a break
at the end of that if
block.
File handles
Rather than explicitly closing your files, you should usually use them in a with
block. Also, this:
user_saves.close
doesn't do what you think it does; in fact it does nothing. For the function call to occur, you need to add ()
.
Redundant else
This:
return name, password, user
else:
doesn't need an else
, because you've returned in the previous block.
Write a main
method
...to pull this code out of global scope:
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
$endgroup$
add a comment |
$begingroup$
Security
Everything is fully encrypted and secure
Oh, really? I hope that you aren't confusing encoding with encryption. I don't see any encryption taking place.
This is a huge topic, so you have some reading to do - but the bar for 'secure password store' is significantly above where this program currently resides.
Class syntax
This:
class user():
should be
class User:
Also, you're currently using it as a struct with no methods. That should change - you should move some of your code to be methods on that class.
Break
This:
loop = True
while loop:
should be reworked. You can use a while True
, and replace the loop = False
with a break
at the end of that if
block.
File handles
Rather than explicitly closing your files, you should usually use them in a with
block. Also, this:
user_saves.close
doesn't do what you think it does; in fact it does nothing. For the function call to occur, you need to add ()
.
Redundant else
This:
return name, password, user
else:
doesn't need an else
, because you've returned in the previous block.
Write a main
method
...to pull this code out of global scope:
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
$endgroup$
add a comment |
$begingroup$
Security
Everything is fully encrypted and secure
Oh, really? I hope that you aren't confusing encoding with encryption. I don't see any encryption taking place.
This is a huge topic, so you have some reading to do - but the bar for 'secure password store' is significantly above where this program currently resides.
Class syntax
This:
class user():
should be
class User:
Also, you're currently using it as a struct with no methods. That should change - you should move some of your code to be methods on that class.
Break
This:
loop = True
while loop:
should be reworked. You can use a while True
, and replace the loop = False
with a break
at the end of that if
block.
File handles
Rather than explicitly closing your files, you should usually use them in a with
block. Also, this:
user_saves.close
doesn't do what you think it does; in fact it does nothing. For the function call to occur, you need to add ()
.
Redundant else
This:
return name, password, user
else:
doesn't need an else
, because you've returned in the previous block.
Write a main
method
...to pull this code out of global scope:
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
$endgroup$
Security
Everything is fully encrypted and secure
Oh, really? I hope that you aren't confusing encoding with encryption. I don't see any encryption taking place.
This is a huge topic, so you have some reading to do - but the bar for 'secure password store' is significantly above where this program currently resides.
Class syntax
This:
class user():
should be
class User:
Also, you're currently using it as a struct with no methods. That should change - you should move some of your code to be methods on that class.
Break
This:
loop = True
while loop:
should be reworked. You can use a while True
, and replace the loop = False
with a break
at the end of that if
block.
File handles
Rather than explicitly closing your files, you should usually use them in a with
block. Also, this:
user_saves.close
doesn't do what you think it does; in fact it does nothing. For the function call to occur, you need to add ()
.
Redundant else
This:
return name, password, user
else:
doesn't need an else
, because you've returned in the previous block.
Write a main
method
...to pull this code out of global scope:
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)
answered 22 mins ago
ReinderienReinderien
4,650823
4,650823
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216383%2fuser-creation-and-sign-in-script%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown