Switch to side-by-side view

--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -139,6 +139,20 @@
             },
         ]
 
+    def project_url(self, user):
+        '''
+        :param user: a :class:`User <allura.model.auth.User>`
+        :rtype: str
+        '''
+        raise NotImplementedError, 'project_url'
+
+    def user_by_project_url(self, shortname):
+        '''
+        :param str: shortname
+        :rtype: user: a :class:`User <allura.model.auth.User>`
+        '''
+        raise NotImplementedError, 'user_by_project_url'
+
 class LocalAuthenticationProvider(AuthenticationProvider):
     '''
     Stores user passwords on the User model, in mongo.  Uses per-user salt and
@@ -184,6 +198,13 @@
                            for i in xrange(M.User.SALT_LEN))
         hashpass = sha256(salt + password.encode('utf-8')).digest()
         return 'sha256' + salt + b64encode(hashpass)
+
+    def project_url(self, user):
+        return '/u/' + user.username.replace('_', '-') + '/'
+
+    def user_by_project_url(self, shortname):
+        from allura import model as M
+        return M.User.query.get(username=shortname)
 
 class LdapAuthenticationProvider(AuthenticationProvider):