users.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # GNU MediaGoblin -- federated, autonomous media hosting
  2. # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
  3. #
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU Affero General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU Affero General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Affero General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. from __future__ import print_function
  17. import sys
  18. import six
  19. from mediagoblin.db.models import LocalUser
  20. from mediagoblin.gmg_commands import util as commands_util
  21. from mediagoblin import auth
  22. from mediagoblin import mg_globals
  23. def adduser_parser_setup(subparser):
  24. subparser.add_argument(
  25. '--username','-u',
  26. help="Username used to login")
  27. subparser.add_argument(
  28. '--password','-p',
  29. help="Your supersecret word to login, beware of storing it in bash history")
  30. subparser.add_argument(
  31. '--email','-e',
  32. help="Email to receive notifications")
  33. def adduser(args):
  34. #TODO: Lets trust admins this do not validate Emails :)
  35. commands_util.setup_app(args)
  36. args.username = six.text_type(commands_util.prompt_if_not_set(args.username, "Username:"))
  37. args.password = commands_util.prompt_if_not_set(args.password, "Password:",True)
  38. args.email = commands_util.prompt_if_not_set(args.email, "Email:")
  39. db = mg_globals.database
  40. users_with_username = \
  41. db.LocalUser.query.filter(
  42. LocalUser.username==args.username.lower()
  43. ).count()
  44. if users_with_username:
  45. print(u'Sorry, a user with that name already exists.')
  46. sys.exit(1)
  47. else:
  48. # Create the user
  49. entry = db.LocalUser()
  50. entry.username = six.text_type(args.username.lower())
  51. entry.email = six.text_type(args.email)
  52. entry.pw_hash = auth.gen_password_hash(args.password)
  53. default_privileges = [
  54. db.Privilege.query.filter(
  55. db.Privilege.privilege_name==u'commenter').one(),
  56. db.Privilege.query.filter(
  57. db.Privilege.privilege_name==u'uploader').one(),
  58. db.Privilege.query.filter(
  59. db.Privilege.privilege_name==u'reporter').one(),
  60. db.Privilege.query.filter(
  61. db.Privilege.privilege_name==u'active').one()
  62. ]
  63. entry.all_privileges = default_privileges
  64. entry.save()
  65. print(u"User created (and email marked as verified).")
  66. def makeadmin_parser_setup(subparser):
  67. subparser.add_argument(
  68. 'username',
  69. help="Username to give admin level",
  70. type=six.text_type)
  71. def makeadmin(args):
  72. commands_util.setup_app(args)
  73. db = mg_globals.database
  74. user = db.LocalUser.query.filter(
  75. LocalUser.username==args.username.lower()
  76. ).first()
  77. if user:
  78. user.all_privileges.append(
  79. db.Privilege.query.filter(
  80. db.Privilege.privilege_name==u'admin').one()
  81. )
  82. user.save()
  83. print(u'The user %s is now an admin.' % args.username)
  84. else:
  85. print(u'The user %s doesn\'t exist.' % args.username)
  86. sys.exit(1)
  87. def changepw_parser_setup(subparser):
  88. subparser.add_argument(
  89. 'username',
  90. help="Username used to login",
  91. type=six.text_type)
  92. subparser.add_argument(
  93. 'password',
  94. help="Your NEW supersecret word to login")
  95. def changepw(args):
  96. commands_util.setup_app(args)
  97. db = mg_globals.database
  98. user = db.LocalUser.query.filter(
  99. LocalUser.username==args.username.lower()
  100. ).first()
  101. if user:
  102. user.pw_hash = auth.gen_password_hash(args.password)
  103. user.save()
  104. print(u'Password successfully changed for user %s.' % args.username)
  105. else:
  106. print(u'The user %s doesn\'t exist.' % args.username)
  107. sys.exit(1)
  108. def deleteuser_parser_setup(subparser):
  109. subparser.add_argument(
  110. 'username',
  111. help="Username to delete",
  112. type=six.text_type)
  113. def deleteuser(args):
  114. commands_util.setup_app(args)
  115. db = mg_globals.database
  116. user = db.LocalUser.query.filter(
  117. LocalUser.username==args.username.lower()
  118. ).first()
  119. if user:
  120. user.delete()
  121. print('The user %s has been deleted.' % args.username)
  122. else:
  123. print('The user %s doesn\'t exist.' % args.username)
  124. sys.exit(1)