[Kimchi-devel] [PATCH 2/5] Use proper term "user name" instead of "user id"

Sheldon shaohef at linux.vnet.ibm.com
Tue Mar 4 13:36:16 UTC 2014


Reviewed-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>

That's great.

I have give comments when the auth patch.

Why use "user id" instead of "user name".

But no response.


On 03/01/2014 02:40 AM, Crístian Viana wrote:
> In the Linux environment, a user ID is an integer code which identifies
> a user; a user name is the human friendly text identifier of that user.
> Kimchi uses both terms interchangeably.
>
> Rename all occurrences of "userid" (and its variants) to "username" (and
> its variants) in external UI messages and internal code.
>
> Signed-off-by: Crístian Viana <vianac at linux.vnet.ibm.com>
> ---
>   po/en_US.po                      |  2 +-
>   po/kimchi.pot                    |  2 +-
>   po/pt_BR.po                      |  2 +-
>   po/zh_CN.po                      |  2 +-
>   src/kimchi/auth.py               | 38 +++++++++++++++++++-------------------
>   src/kimchi/i18n.py               |  2 +-
>   src/kimchi/root.py               |  4 ++--
>   tests/test_rest.py               |  8 ++++----
>   tests/utils.py                   |  2 +-
>   ui/js/src/kimchi.login_window.js | 16 ++++++++--------
>   ui/js/src/kimchi.user.js         | 14 +++++++-------
>   ui/pages/login-window.html.tmpl  |  4 ++--
>   12 files changed, 48 insertions(+), 48 deletions(-)
>
> diff --git a/po/en_US.po b/po/en_US.po
> index aeff16e..e34bd27 100644
> --- a/po/en_US.po
> +++ b/po/en_US.po
> @@ -609,7 +609,7 @@ msgid "Datastore is not initiated in the model object."
>   msgstr ""
>   
>   #, python-format
> -msgid "Authentication failed for user '%(userid)s'. [Error code: %(code)s]"
> +msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
>   msgstr ""
>   
>   msgid "You are not authorized to access Kimchi"
> diff --git a/po/kimchi.pot b/po/kimchi.pot
> index abb7219..91fe9dc 100755
> --- a/po/kimchi.pot
> +++ b/po/kimchi.pot
> @@ -597,7 +597,7 @@ msgid "Datastore is not initiated in the model object."
>   msgstr ""
>   
>   #, python-format
> -msgid "Authentication failed for user '%(userid)s'. [Error code: %(code)s]"
> +msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
>   msgstr ""
>   
>   msgid "You are not authorized to access Kimchi"
> diff --git a/po/pt_BR.po b/po/pt_BR.po
> index db7c579..7c0612a 100644
> --- a/po/pt_BR.po
> +++ b/po/pt_BR.po
> @@ -624,7 +624,7 @@ msgid "Datastore is not initiated in the model object."
>   msgstr ""
>   
>   #, python-format
> -msgid "Authentication failed for user '%(userid)s'. [Error code: %(code)s]"
> +msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
>   msgstr ""
>   
>   msgid "You are not authorized to access Kimchi"
> diff --git a/po/zh_CN.po b/po/zh_CN.po
> index 0439b04..e8ce600 100644
> --- a/po/zh_CN.po
> +++ b/po/zh_CN.po
> @@ -613,7 +613,7 @@ msgid "Datastore is not initiated in the model object."
>   msgstr ""
>   
>   #, python-format
> -msgid "Authentication failed for user '%(userid)s'. [Error code: %(code)s]"
> +msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
>   msgstr ""
>   
>   msgid "You are not authorized to access Kimchi"
> diff --git a/src/kimchi/auth.py b/src/kimchi/auth.py
> index f8ccea1..990fa84 100644
> --- a/src/kimchi/auth.py
> +++ b/src/kimchi/auth.py
> @@ -29,7 +29,7 @@ from kimchi.exception import InvalidOperation, OperationFailed
>   from kimchi.utils import run_command
>   
>   
> -USER_ID = 'userid'
> +USER_NAME = 'username'
>   USER_GROUPS = 'groups'
>   USER_SUDO = 'sudo'
>   
> @@ -41,38 +41,38 @@ def debug(msg):
>   
>   class User(object):
>   
> -    def __init__(self, userid):
> +    def __init__(self, username):
>           self.user = {}
> -        self.user[USER_ID] = userid
> +        self.user[USER_NAME] = username
>           self.user[USER_GROUPS] = None
>           self.user[USER_SUDO] = False
>   
>       def get_groups(self):
>           self.user[USER_GROUPS] = [g.gr_name for g in grp.getgrall()
> -                                  if self.user[USER_ID] in g.gr_mem]
> +                                  if self.user[USER_NAME] in g.gr_mem]
>           return self.user[USER_GROUPS]
>   
>       def has_sudo(self):
> -        out, err, exit = run_command(['sudo', '-l', '-U', self.user[USER_ID],
> +        out, err, exit = run_command(['sudo', '-l', '-U', self.user[USER_NAME],
>                                         'sudo'])
>           if exit == 0:
> -            debug("User %s is allowed to run sudo" % self.user[USER_ID])
> +            debug("User %s is allowed to run sudo" % self.user[USER_NAME])
>               # sudo allows a wide range of configurations, such as controlling
>               # which binaries the user can execute with sudo.
>               # For now, we will just check whether the user is allowed to run
>               # any command with sudo.
>               out, err, exit = run_command(['sudo', '-l', '-U',
> -                                          self.user[USER_ID]])
> +                                          self.user[USER_NAME]])
>               for line in out.split('\n'):
>                   if line and re.search("(ALL)", line):
>                       self.user[USER_SUDO] = True
>                       debug("User %s can run any command with sudo" %
> -                          self.user[USER_ID])
> +                          self.user[USER_NAME])
>                       return self.user[USER_SUDO]
>               debug("User %s can only run some commands with sudo" %
> -                  self.user[USER_ID])
> +                  self.user[USER_NAME])
>           else:
> -            debug("User %s is not allowed to run sudo" % self.user[USER_ID])
> +            debug("User %s is not allowed to run sudo" % self.user[USER_NAME])
>           return self.user[USER_SUDO]
>   
>       def get_user(self):
> @@ -107,7 +107,7 @@ def authenticate(username, password, service="passwd"):
>       try:
>           auth.authenticate()
>       except PAM.error, (resp, code):
> -        msg_args = {'userid': username, 'code': code}
> +        msg_args = {'username': username, 'code': code}
>           raise OperationFailed("KCHAUTH0001E", msg_args)
>   
>       return True
> @@ -127,7 +127,7 @@ def check_auth_session():
>       for the user.
>       """
>       cherrypy.session.acquire_lock()
> -    session = cherrypy.session.get(USER_ID, None)
> +    session = cherrypy.session.get(USER_NAME, None)
>       cherrypy.session.release_lock()
>       if session is not None:
>           debug("Session authenticated for user %s" % session)
> @@ -156,20 +156,20 @@ def check_auth_httpba():
>       b64data = re.sub("Basic ", "", authheader)
>       decodeddata = base64.b64decode(b64data.encode("ASCII"))
>       # TODO: test how this handles ':' characters in username/passphrase.
> -    userid, password = decodeddata.decode().split(":", 1)
> +    username, password = decodeddata.decode().split(":", 1)
>   
> -    return login(userid, password)
> +    return login(username, password)
>   
>   
> -def login(userid, password):
> -    if not authenticate(userid, password):
> +def login(username, password):
> +    if not authenticate(username, password):
>           debug("User cannot be verified with the supplied password")
>           return None
> -    user = User(userid)
> +    user = User(username)
>       debug("User verified, establishing session")
>       cherrypy.session.acquire_lock()
>       cherrypy.session.regenerate()
> -    cherrypy.session[USER_ID] = userid
> +    cherrypy.session[USER_NAME] = username
>       cherrypy.session[USER_GROUPS] = user.get_groups()
>       cherrypy.session[USER_SUDO] = user.has_sudo()
>       cherrypy.session.release_lock()
> @@ -178,7 +178,7 @@ def login(userid, password):
>   
>   def logout():
>       cherrypy.session.acquire_lock()
> -    cherrypy.session[USER_ID] = None
> +    cherrypy.session[USER_NAME] = None
>       cherrypy.session.release_lock()
>       cherrypy.lib.sessions.expire()
>   
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index f3e1803..374bbcd 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -33,7 +33,7 @@ messages = {
>   
>       "KCHASYNC0001E": _("Datastore is not initiated in the model object."),
>   
> -    "KCHAUTH0001E": _("Authentication failed for user '%(userid)s'. [Error code: %(code)s]"),
> +    "KCHAUTH0001E": _("Authentication failed for user '%(username)s'. [Error code: %(code)s]"),
>       "KCHAUTH0002E": _("You are not authorized to access Kimchi"),
>       "KCHAUTH0003E": _("Specify %(item)s to login into Kimchi"),
>       "KCHAUTH0004E": _("This operation is not allowed as you have restricted access to Kimchi."),
> diff --git a/src/kimchi/root.py b/src/kimchi/root.py
> index 3956ea6..1b2a651 100644
> --- a/src/kimchi/root.py
> +++ b/src/kimchi/root.py
> @@ -99,14 +99,14 @@ class KimchiRoot(Root):
>       def login(self, *args):
>           params = parse_request()
>           try:
> -            userid = params['userid']
> +            username = params['username']
>               password = params['password']
>           except KeyError, item:
>               e = MissingParameter('KCHAUTH0003E', {'item': str(item)})
>               raise cherrypy.HTTPError(400, e.message)
>   
>           try:
> -            user_info = auth.login(userid, password)
> +            user_info = auth.login(username, password)
>           except OperationFailed:
>               raise cherrypy.HTTPError(401)
>   
> diff --git a/tests/test_rest.py b/tests/test_rest.py
> index 54530f3..8cfa2a2 100644
> --- a/tests/test_rest.py
> +++ b/tests/test_rest.py
> @@ -105,7 +105,7 @@ class RestTests(unittest.TestCase):
>           # HTTP:401.  Since HTTP Simple Auth is not allowed for text/html, we
>           # need to use the login API and establish a session.
>           user, pw = fake_user.items()[0]
> -        req = json.dumps({'userid': user, 'password': pw})
> +        req = json.dumps({'username': user, 'password': pw})
>           resp = self.request('/login', req, 'POST')
>           self.assertEquals(200, resp.status)
>           cookie = resp.getheader('set-cookie')
> @@ -1336,7 +1336,7 @@ class RestTests(unittest.TestCase):
>               self.assertEquals(200, resp.status)
>   
>           user, pw = fake_user.items()[0]
> -        req = json.dumps({'userid': user, 'password': pw})
> +        req = json.dumps({'username': user, 'password': pw})
>           resp = self.request('/login', req, 'POST', hdrs)
>           self.assertEquals(200, resp.status)
>   
> @@ -1357,7 +1357,7 @@ class RestTests(unittest.TestCase):
>   
>           # Test REST API
>           hdrs = {'AUTHORIZATION': ''}
> -        req = json.dumps({'userid': 'nouser', 'password': 'badpass'})
> +        req = json.dumps({'username': 'nouser', 'password': 'badpass'})
>           resp = self.request('/login', req, 'POST', hdrs)
>           self.assertEquals(401, resp.status)
>   
> @@ -1382,7 +1382,7 @@ class RestTests(unittest.TestCase):
>   
>           # Execute a login call
>           user, pw = fake_user.items()[0]
> -        req = json.dumps({'userid': user, 'password': pw})
> +        req = json.dumps({'username': user, 'password': pw})
>           resp = self.request('/login', req, 'POST', hdrs)
>           self.assertEquals(200, resp.status)
>           cookie = resp.getheader('set-cookie')
> diff --git a/tests/utils.py b/tests/utils.py
> index b373f34..fe03a1a 100644
> --- a/tests/utils.py
> +++ b/tests/utils.py
> @@ -160,7 +160,7 @@ def patch_auth(sudo=True):
>           try:
>               return fake_user[username] == password
>           except KeyError, e:
> -            raise OperationFailed("KCHAUTH0001E", {'userid': 'username',
> +            raise OperationFailed("KCHAUTH0001E", {'username': 'username',
>                                                      'code': e.message})
>   
>       import kimchi.auth
> diff --git a/ui/js/src/kimchi.login_window.js b/ui/js/src/kimchi.login_window.js
> index 22d74e0..9af3805 100644
> --- a/ui/js/src/kimchi.login_window.js
> +++ b/ui/js/src/kimchi.login_window.js
> @@ -56,10 +56,10 @@ kimchi.login_main = function() {
>               return;
>           }
>   
> -        var userName = kimchi.user.getUserID();
> -        userName && $('#user-id').val(userName);
> +        var userName = kimchi.user.getUserName();
> +        userName && $('#username').val(userName);
>   
> -        var nodeToFocus = ! $('#user-id').val() ? $('#user-id') :
> +        var nodeToFocus = ! $('#username').val() ? $('#username') :
>               (! $('#password').val() ? $('#password') : $('#btn-login'));
>   
>           $(nodeToFocus).focus();
> @@ -67,16 +67,16 @@ kimchi.login_main = function() {
>   
>       var login = function(event) {
>   
> -        if (!validateNonEmpty(['user-id', 'password'])) {
> +        if (!validateNonEmpty(['username', 'password'])) {
>               return false;
>           }
>   
>           $('#btn-login').text(i18n['KCHAUTH6002M']).prop('disabled', true);
>   
> -        var userID = $('#user-id').val();
> -        userID && kimchi.user.setUserID(userID);
> +        var userName = $('#username').val();
> +        userName && kimchi.user.setUserName(userName);
>           var settings = {
> -            userid: userID,
> +            username: userName,
>               password: $("#password").val()
>           };
>   
> @@ -93,7 +93,7 @@ kimchi.login_main = function() {
>           }, function() {
>               $('#message-container').text(i18n['KCHAUTH6001E']);
>               $('#btn-login').prop('disabled', false).text(i18n['KCHAUTH6001M']);
> -            placeCursor('user-id');
> +            placeCursor('username');
>           });
>   
>           return false;
> diff --git a/ui/js/src/kimchi.user.js b/ui/js/src/kimchi.user.js
> index bd7d20b..9134849 100644
> --- a/ui/js/src/kimchi.user.js
> +++ b/ui/js/src/kimchi.user.js
> @@ -16,17 +16,17 @@
>    * limitations under the License.
>    */
>   kimchi.user = (function() {
> -    var getUserID = function() {
> -        return kimchi.cookie.get('userid');
> +    var getUserName = function() {
> +        return kimchi.cookie.get('username');
>       };
>   
> -    var setUserID = function(userID) {
> -        kimchi.cookie.set('userid', userID, 365);
> +    var setUserName = function(userName) {
> +        kimchi.cookie.set('username', userName, 365);
>       };
>   
>       var showUser = function(toShow) {
>           if (toShow) {
> -            var userName = getUserID();
> +            var userName = getUserName();
>               userName && $('#user-name').text(userName);
>               $('#user').removeClass('not-logged-in');
>               return;
> @@ -36,8 +36,8 @@ kimchi.user = (function() {
>       };
>   
>       return {
> -        getUserID: getUserID,
> -        setUserID: setUserID,
> +        getUserName: getUserName,
> +        setUserName: setUserName,
>           showUser: showUser
>       };
>   })();
> diff --git a/ui/pages/login-window.html.tmpl b/ui/pages/login-window.html.tmpl
> index dfcb6b0..b600377 100644
> --- a/ui/pages/login-window.html.tmpl
> +++ b/ui/pages/login-window.html.tmpl
> @@ -35,8 +35,8 @@
>       <form id="form-login" action="/login" method="POST">
>         <div id="message-container" class="row error-message"></div>
>         <div class="row">
> -        <input type="text" id="user-id" name="userid" required="required" placeholder="$_("User Name")" />
> -        <div id="user-id-msg" class="msg-required"></div>
> +        <input type="text" id="username" name="username" required="required" placeholder="$_("User Name")" />
> +        <div id="username-msg" class="msg-required"></div>
>         </div>
>         <div class="row">
>           <input type="password" id="password" name="password" required="required" placeholder="$_("Password")" />


-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center




More information about the Kimchi-devel mailing list