You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2014/01/23 18:29:56 UTC

[14/28] git commit: [#4808] Clean up SourceForge references / values

[#4808] Clean up SourceForge references / values

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/5d46b785
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/5d46b785
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/5d46b785

Branch: refs/heads/cj/4257
Commit: 5d46b785d64d43336666b75c7423520b3d582ee1
Parents: 1a9552e
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Tue Jan 21 22:27:48 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Jan 22 15:38:03 2014 +0000

----------------------------------------------------------------------
 Allura/allura/app.py                            |  4 +-
 Allura/allura/controllers/auth.py               |  8 +--
 Allura/allura/controllers/project.py            |  7 ++-
 .../ext/admin/templates/project_admin.html      |  6 +--
 .../ext/admin/templates/project_overview.html   |  2 +-
 Allura/allura/lib/app_globals.py                |  6 ++-
 Allura/allura/lib/helpers.py                    | 21 +-------
 Allura/allura/lib/mail_util.py                  |  3 +-
 Allura/allura/lib/markdown_extensions.py        | 12 ++---
 Allura/allura/model/discuss.py                  |  3 +-
 Allura/allura/model/notification.py             | 12 +++--
 Allura/allura/model/project.py                  |  4 +-
 Allura/allura/model/repo_refresh.py             |  2 +-
 Allura/allura/model/repository.py               |  3 +-
 Allura/allura/model/session.py                  |  4 +-
 Allura/allura/tasks/mail_tasks.py               | 10 ++--
 Allura/allura/templates/jinja_master/lib.html   | 10 ++--
 Allura/allura/templates/mail/footer.txt         |  2 +-
 .../templates/mail/monitor_email_footer.txt     |  2 +-
 Allura/allura/tests/functional/test_admin.py    |  5 --
 Allura/allura/tests/functional/test_auth.py     |  2 +-
 Allura/allura/tests/model/test_artifact.py      |  6 +--
 Allura/allura/tests/model/test_auth.py          | 18 +++----
 Allura/allura/tests/model/test_notification.py  | 11 ++--
 Allura/allura/tests/test_globals.py             | 28 ++++++----
 Allura/allura/tests/test_mail_util.py           |  6 +--
 Allura/allura/tests/test_tasks.py               | 56 ++++++++++----------
 Allura/allura/tests/unit/test_app.py            |  2 +-
 Allura/allura/websetup/bootstrap.py             |  2 +-
 Allura/development.ini                          |  3 +-
 Allura/test.ini                                 |  4 +-
 AlluraTest/alluratest/validation.py             |  6 ---
 .../forgeactivity/tests/functional/test_root.py |  2 +-
 ForgeChat/forgechat/command.py                  | 10 ++--
 .../tests/functional/test_forum.py              | 18 +++----
 .../tests/functional/test_forum_admin.py        |  2 +-
 ForgeGit/forgegit/templates/git/index.html      |  2 +-
 .../tests/functional/test_controllers.py        |  7 +--
 .../forgeimporters/github/tests/test_wiki.py    | 31 +++++------
 .../trac/tests/data/test-list.html              | 18 ++-----
 .../trac/tests/data/trac-export.json            | 10 ++--
 ForgeLink/forgelink/tests/test_app.py           |  4 +-
 ForgeSVN/forgesvn/templates/svn/index.html      |  2 +-
 .../hooks/post-commit                           |  4 +-
 .../tests/data/testsvn/hooks/post-commit        |  8 +--
 .../forgesvn/tests/model/test_repository.py     |  7 +--
 .../forgeshorturl/tests/functional/test.py      |  4 +-
 .../forgetracker/tests/functional/data/sf.json  | 10 ++--
 .../forgetracker/tests/functional/test_root.py  |  5 +-
 .../forgewiki/tests/functional/test_root.py     |  4 +-
 50 files changed, 199 insertions(+), 219 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index abefd3c..e5e9287 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -287,10 +287,10 @@ class Application(object):
 
         Email address constructed from Application's url, and looks like this:
 
-            wiki@test.p.in.sf.net
+            wiki@test.p.in.domain.net
 
         where 'wiki@test.p' comes from app url (in this case /p/test/wiki/)
-        and '.in.sf.net' comes from 'forgemail.domain' config entry.
+        and '.in.domain.net' comes from 'forgemail.domain' config entry.
 
         Assumes self.url returns a url path without domain, starting with '/'
         """

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/controllers/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py
index 8e08e13..e7a58b8 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -140,7 +140,7 @@ class AuthController(BaseController):
         session['userid'] = c.user._id
         session.save()
         if not c.user.username:
-            flash('Please choose a user name for SourceForge, %s.'
+            flash('Please choose a user name, %s.'
                   % c.user.get_pref('display_name'))
             redirect('setup_openid_user')
         redirect(kw.pop('return_to', '/'))
@@ -312,10 +312,7 @@ To reset your password on %s, please visit the following URL:
     @expose()
     def logout(self):
         plugin.AuthenticationProvider.get(request).logout()
-        if config.get('auth.method', 'local') == 'sfx':
-            redirect(g.logout_url)
-        else:
-            redirect('/')
+        redirect(config.get('auth.post_logout_url', '/'))
 
     @expose()
     @require_post()
@@ -345,7 +342,6 @@ To reset your password on %s, please visit the following URL:
 
     def _auth_repos(self, user):
         def _unix_group_name(neighborhood, shortname):
-            'shameless copied from sfx_api.py'
             path = neighborhood.url_prefix + \
                 shortname[len(neighborhood.shortname_prefix):]
             parts = [p for p in path.split('/') if p]

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/controllers/project.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/project.py b/Allura/allura/controllers/project.py
index b231205..2b48697 100644
--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -301,7 +301,7 @@ class NeighborhoodProjectBrowseController(ProjectBrowseController):
 class HostNeighborhoodController(WsgiDispatchController, NeighborhoodController):
 
     '''Neighborhood controller with support for use as a root controller, for
-    instance, when using adobe.sourceforge.net (if this is allowed).
+    instance, when using adobe.domain.net (if this is allowed).
     '''
 
     auth = AuthController()
@@ -539,7 +539,10 @@ class NeighborhoodAdminController(object):
     def overview(self, **kw):
         set_nav(self.neighborhood)
         c.overview_form = W.neighborhood_overview_form
-        return dict(neighborhood=self.neighborhood)
+        allow_undelete = asbool(config.get('allow_project_undelete', True))
+        return dict(
+            neighborhood=self.neighborhood,
+            allow_project_undelete=allow_undelete)
 
     @without_trailing_slash
     @expose('jinja:allura:templates/neighborhood_admin_permissions.html')

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/ext/admin/templates/project_admin.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/project_admin.html b/Allura/allura/ext/admin/templates/project_admin.html
index f8453f2..3c9b4f5 100644
--- a/Allura/allura/ext/admin/templates/project_admin.html
+++ b/Allura/allura/ext/admin/templates/project_admin.html
@@ -26,14 +26,14 @@
 {% block header %}Project Admin{% endblock %}
 
 {% block content %}
-  <p>SourceForge projects come with a number of Tools, which can be configured and adjusted to your needs.</p>
+  <p>{{config.site_name}} projects come with a number of Tools, which can be configured and adjusted to your needs.</p>
 
   <div class="grid-2">
     <img src="{{g.forge_static('images/project_default.png')}}" alt="">
   </div>
   <div class="grid-13">
     <h3>Project Setup</h3>
-    <p>The first thing to do to setup your project is to create a solid description, so folks coming to your page can figure out what the project is all about. You'll then want to input information about the project, and we'll make sure all this relevant information gets added to the SourceForge sourceforge project directory.</p>
+    <p>The first thing to do to setup your project is to create a solid description, so folks coming to your page can figure out what the project is all about. You'll then want to input information about the project, and we'll make sure all this relevant information gets added to the {{config.site_name}} project directory.</p>
   </div>
   <div class="grid-4">
     <a href="overview">Update MetaData</a>
@@ -78,7 +78,7 @@
   </div>
   <div class="grid-13">
   <h3>Tickets</h3>
-    <p>With the SourceForge tracker you can keep track of items of work that need to be done. You can create one or more trackers for bugs, enhancements, tasks, that will help you plan and manage your development process.</p>
+    <p>With the {{config.site_name}} tracker you can keep track of items of work that need to be done. You can create one or more trackers for bugs, enhancements, tasks, that will help you plan and manage your development process.</p>
   </div>
   <div class="grid-4">
     {% for tool in c.project.app_configs %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/ext/admin/templates/project_overview.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/project_overview.html b/Allura/allura/ext/admin/templates/project_overview.html
index 3c77be2..af2aca1 100644
--- a/Allura/allura/ext/admin/templates/project_overview.html
+++ b/Allura/allura/ext/admin/templates/project_overview.html
@@ -95,7 +95,7 @@
             $removal_original.attr('checked', true);
           }
         }
-        {% if config.get('auth.method', 'local') == 'sfx' %}
+        {% if not allow_project_undelete %}
         else if($(this).val()!=='deleted' && currently_deleted){
           alert('You may not undelete a project that has already been deleted.');
           $removal_original.attr('checked', true);

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/lib/app_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index 8bc929e..ecc7b35 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -163,7 +163,7 @@ class Globals(object):
             self.solr_short_timeout = None
         self.use_queue = asbool(config.get('use_queue', False))
 
-        # Load login/logout urls; only used for SFX logins
+        # Load login/logout urls; only used for customized logins
         self.login_url = config.get('auth.login_url', '/auth/')
         self.logout_url = config.get('auth.logout_url', '/auth/logout')
         self.login_fragment_url = config.get(
@@ -605,6 +605,10 @@ class Globals(object):
     def year(self):
         return datetime.datetime.utcnow().year
 
+    @LazyProperty
+    def noreply(self):
+        return unicode(config.get('noreply', 'noreply@%s' % config['domain']))
+
 
 class Icon(object):
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/lib/helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 4f84813..18cdc53 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -457,8 +457,8 @@ def gen_message_id(_id=None):
         addr = '%s.%s' % (_id, c.app.config.options['mount_point'])
     else:
         addr = _id
-    return '%s@%s.sourceforge.net' % (
-        addr, '.'.join(reversed(parts)))
+    return '%s@%s.%s' % (
+        addr, '.'.join(reversed(parts)), tg.config['domain'])
 
 
 class ProxiedAttrMeta(type):
@@ -533,23 +533,6 @@ def render_genshi_plaintext(template_name, **template_vars):
     stream = tt.generate(**template_vars)
     return stream.render(encoding='utf-8').decode('utf-8')
 
-site_url = None  # cannot set it just yet since tg.config is empty
-
-
-def full_url(url):
-    """Make absolute URL from the relative one.
-    """
-    global site_url
-    if site_url is None:
-        # XXX: add a separate tg option instead of re-using openid.realm
-        site_url = tg.config.get(
-            'openid.realm', 'https://newforge.sf.geek.net/')
-        site_url = site_url.replace('https:', 'http:')
-        if not site_url.endswith('/'):
-            site_url += '/'
-    if url.startswith('/'):
-        url = url[1:]
-    return site_url + url
 
 
 @tg.expose(content_type='text/plain')

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/lib/mail_util.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/mail_util.py b/Allura/allura/lib/mail_util.py
index 5ec98da..4da1819 100644
--- a/Allura/allura/lib/mail_util.py
+++ b/Allura/allura/lib/mail_util.py
@@ -27,6 +27,7 @@ import tg
 from paste.deploy.converters import asbool, asint, aslist
 from formencode import validators as fev
 from pylons import tmpl_context as c
+from pylons import app_globals as g
 
 from allura.lib.utils import ConfigProxy
 from allura.lib import exceptions as exc
@@ -201,7 +202,7 @@ def _parse_smtp_addr(addr):
         return addrs[0]
     if '@' in addr:
         return addr
-    return u'noreply@in.sf.net'
+    return g.noreply
 
 
 def isvalid(addr):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/lib/markdown_extensions.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/markdown_extensions.py b/Allura/allura/lib/markdown_extensions.py
index a7af428..60bf943 100644
--- a/Allura/allura/lib/markdown_extensions.py
+++ b/Allura/allura/lib/markdown_extensions.py
@@ -477,11 +477,11 @@ class RelativeLinkRewriter(markdown.postprocessors.Postprocessor):
             val = val.replace(' ', '%20')
             tag[attr] = val
         if '://' in val:
-            if 'sf.net' in val or 'sourceforge.net' in val:
-                return
-            else:
-                tag['rel'] = 'nofollow'
-                return
+            for domain in re.split(r'\s*,\s*', config.get('nofollow_exempt_domains', '')):
+                if domain and domain in val:
+                    return
+            tag['rel'] = 'nofollow'
+            return
         if val.startswith('/'):
             return
         if val.startswith('.'):
@@ -495,7 +495,7 @@ class RelativeLinkRewriter(markdown.postprocessors.Postprocessor):
     def _rewrite_abs(self, tag, attr):
         self._rewrite(tag, attr)
         val = tag.get(attr)
-        val = urljoin(config.get('base_url', 'http://sourceforge.net/'), val)
+        val = urljoin(config['base_url'], val)
         tag[attr] = val
 
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 1fddf91..2741d03 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -22,6 +22,7 @@ import jinja2
 import pymongo
 from pymongo.errors import DuplicateKeyError
 from pylons import tmpl_context as c, app_globals as g
+import tg
 
 from ming import schema
 from ming.orm.base import session
@@ -304,7 +305,7 @@ class Thread(Artifact, ActivityObject):
             _id=artifact.url() + post._id,
             from_address=str(author._id) if author != User.anonymous()
             else None,
-            reply_to_address=u'noreply@in.sf.net',
+            reply_to_address=g.noreply,
             subject=subject,
             text=text,
             in_reply_to=post.parent_id,

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/notification.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/notification.py b/Allura/allura/model/notification.py
index 3bb81fc..cbacc3a 100644
--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -176,7 +176,7 @@ class Notification(MappedClass):
                     author._id) if author != User.anonymous() else None,
                 reply_to_address='"%s" <%s>' % (
                     subject_prefix, getattr(
-                        artifact, 'email_address', u'noreply@in.sf.net')),
+                        artifact, 'email_address', g.noreply)),
                 subject=subject_prefix + subject,
                 text=text,
                 in_reply_to=parent_msg_id,
@@ -193,7 +193,7 @@ class Notification(MappedClass):
                 h.get_first(idx, 'title'), c.user.get_pref('display_name')))
             reply_to = '"%s" <%s>' % (
                 h.get_first(idx, 'title'),
-                getattr(artifact, 'email_address', u'noreply@in.sf.net'))
+                getattr(artifact, 'email_address', g.noreply))
             d = dict(
                 from_address=reply_to,
                 reply_to_address=reply_to,
@@ -655,11 +655,11 @@ class Mailbox(MappedClass):
                         ', '.join([n._id for n in ns]), self._id, self.user_id)
         elif self.type == 'digest':
             Notification.send_digest(
-                self.user_id, u'noreply@in.sf.net', 'Digest Email',
+                self.user_id, g.noreply, 'Digest Email',
                 notifications)
         elif self.type == 'summary':
             Notification.send_summary(
-                self.user_id, u'noreply@in.sf.net', 'Digest Email',
+                self.user_id, g.noreply, 'Digest Email',
                 notifications)
 
 
@@ -676,12 +676,14 @@ class MailFooter(object):
     @classmethod
     def standard(cls, notification):
         return cls._render('mail/footer.txt',
+                           domain=config['domain'],
                            notification=notification,
-                           prefix=config.get('forgemail.url', 'https://sourceforge.net'))
+                           prefix=config['forgemail.url'])
 
     @classmethod
     def monitored(cls, toaddr, app_url, setting_url):
         return cls._render('mail/monitor_email_footer.txt',
+                           domain=config['domain'],
                            email=toaddr,
                            app_url=app_url,
                            setting_url=setting_url)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/project.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 9b2024c..f971293 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -257,8 +257,8 @@ class Project(MappedClass, ActivityNode, ActivityObject):
         if sps:
             result.append(SitemapEntry('Child Projects'))
             result += [
-                SitemapEntry(p.name or p.script_name, p.script_name)
-                for p in sps]
+                SitemapEntry(sp.name or sp.script_name, sp.script_name)
+                for sp in sps]
         return result
 
     def troves_by_type(self, trove_type):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/repo_refresh.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo_refresh.py b/Allura/allura/model/repo_refresh.py
index c34739a..d5ba927 100644
--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -418,7 +418,7 @@ def send_notifications(repo, commit_ids):
     '''Create appropriate notification and feed objects for a refresh'''
     from allura.model import Feed, Notification
     commit_msgs = []
-    base_url = tg.config.get('base_url', 'sourceforge.net')
+    base_url = tg.config['base_url']
     for oids in utils.chunked_iter(commit_ids, QSIZE):
         chunk = list(oids)
         index = dict(

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index b6cfb9a..60bceaa 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -185,7 +185,8 @@ class RepositoryImplementation(object):
 
     def _setup_special_files(self, source_path=None):
         magic_file = os.path.join(
-            self._repo.fs_path, self._repo.name, '.SOURCEFORGE-REPOSITORY')
+            self._repo.fs_path, self._repo.name, tg.config.get(
+                'scm.magic_file', '.ALLURA-REPOSITORY'))
         with open(magic_file, 'w') as f:
             f.write(self._repo.repo_id)
         os.chmod(magic_file, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/model/session.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 5354f87..e7da553 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -61,8 +61,8 @@ class ArtifactSessionExtension(SessionExtension):
             arefs = []
             try:
                 arefs = [
-                    ArtifactReference.from_artifact(obj)
-                    for obj in self.objects_added + self.objects_modified]
+                    ArtifactReference.from_artifact(o)
+                    for o in self.objects_added + self.objects_modified]
                 for obj in self.objects_added + self.objects_modified:
                     Shortlink.from_artifact(obj)
                 # Flush shortlinks

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tasks/mail_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tasks/mail_tasks.py b/Allura/allura/tasks/mail_tasks.py
index 31c16f0..9676842 100644
--- a/Allura/allura/tasks/mail_tasks.py
+++ b/Allura/allura/tasks/mail_tasks.py
@@ -36,7 +36,7 @@ def route_email(
         peer, mailfrom, rcpttos, data):
     '''Route messages according to their destination:
 
-    <topic>@<mount_point>.<subproj2>.<subproj1>.<project>.projects.sourceforge.net
+    <topic>@<mount_point>.<subproj2>.<subproj1>.<project>.projects.domain.net
     gets sent to c.app.handle_message(topic, message)
     '''
     try:
@@ -90,13 +90,13 @@ def sendmail(fromaddr, destinations, text, reply_to, subject,
     addrs_html = []
     addrs_multi = []
     if fromaddr is None:
-        fromaddr = u'noreply@in.sf.net'
+        fromaddr = g.noreply
     elif '@' not in fromaddr:
         log.warning('Looking up user with fromaddr: %s', fromaddr)
         user = M.User.query.get(_id=ObjectId(fromaddr), disabled=False)
         if not user:
             log.warning('Cannot find user with ID: %s', fromaddr)
-            fromaddr = u'noreply@in.sf.net'
+            fromaddr = g.noreply
         else:
             fromaddr = user.email_address_header()
     # Divide addresses based on preferred email formats
@@ -159,13 +159,13 @@ def sendsimplemail(
         cc=None):
     from allura import model as M
     if fromaddr is None:
-        fromaddr = u'noreply@in.sf.net'
+        fromaddr = g.noreply
     elif '@' not in fromaddr:
         log.warning('Looking up user with fromaddr: %s', fromaddr)
         user = M.User.query.get(_id=ObjectId(fromaddr), disabled=False)
         if not user:
             log.warning('Cannot find user with ID: %s', fromaddr)
-            fromaddr = u'noreply@in.sf.net'
+            fromaddr = g.noreply
         else:
             fromaddr = user.email_address_header()
     htmlparser = HTMLParser.HTMLParser()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/templates/jinja_master/lib.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/lib.html b/Allura/allura/templates/jinja_master/lib.html
index f83e23c..9d3aa2c 100644
--- a/Allura/allura/templates/jinja_master/lib.html
+++ b/Allura/allura/templates/jinja_master/lib.html
@@ -185,7 +185,7 @@
 <h1>Markdown Syntax Guide</h1>
 
 <div class="markdown_syntax_section md_ex_toc{{id}}">
-<p>SourceForge uses markdown syntax everywhere to allow you to create rich<br>text markup, and extends markdown in several ways to allow for quick linking<br>to other artifacts in your project. </p>
+<p>{{config.site_name}} uses markdown syntax everywhere to allow you to create rich<br>text markup, and extends markdown in several ways to allow for quick linking<br>to other artifacts in your project. </p>
 <p>Markdown was created to be easy to read, easy to write, and still readable in plain text format.</p>
 
 <ul class="markdown_syntax_toc">
@@ -549,21 +549,21 @@ you will get a header
 <h2 id="md_ex_img{{id}}">Images</h2>
 <p>To include an image, just put a "!" in front of a text link:</p>
 <div class="codehilite"><pre>
-![alternate text](https://sourceforge.net/images/icon_linux.gif)
+![alternate text](https://{{config.domain}}/images/icon_linux.gif)
 </pre></div>
 
 <p>Output:</p>
-{{g.markdown.convert('''![alternate text](http://sourceforge.net/images/icon_linux.gif)''')}}
+{{g.markdown.convert('''![alternate text](http://'''+config.domain+'''/images/icon_linux.gif)''')}}
 
 <p>The "alternate text" will show up if the browser can't load the
 image.</p>
 <p>You can also use a title if you want, like this:</p>
 <div class="codehilite"><pre>
-![tiny arrow](https://sourceforge.net/images/icon_linux.gif "tiny arrow")
+![tiny arrow](https://{{config.domain}}/images/icon_linux.gif "tiny arrow")
 </pre></div>
 
 <p>Output:</p>
-{{g.markdown.convert('''![tiny arrow](http://sourceforge.net/images/icon_linux.gif "tiny arrow")''')}}
+{{g.markdown.convert('''![tiny arrow](http://'''+config.domain+'''/images/icon_linux.gif "tiny arrow")''')}}
 
 <p>To reference an attached image, just use the img macro.  You can add more attributes:</p>
 <div class="codehilite"><pre>

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/templates/mail/footer.txt
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/mail/footer.txt b/Allura/allura/templates/mail/footer.txt
index 6d15625..608b5a2 100644
--- a/Allura/allura/templates/mail/footer.txt
+++ b/Allura/allura/templates/mail/footer.txt
@@ -20,6 +20,6 @@
 
 ---
 
-Sent from sourceforge.net because you indicated interest in <{{ prefix }}{{ notification.link }}>
+Sent from {{domain}} because you indicated interest in <{{ prefix }}{{ notification.link }}>
 
 To unsubscribe from further messages, please visit <{{ prefix }}/auth/subscriptions/>

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/templates/mail/monitor_email_footer.txt
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/mail/monitor_email_footer.txt b/Allura/allura/templates/mail/monitor_email_footer.txt
index ce53c08..d3492ca 100644
--- a/Allura/allura/templates/mail/monitor_email_footer.txt
+++ b/Allura/allura/templates/mail/monitor_email_footer.txt
@@ -20,6 +20,6 @@
 
 ---
 
-Sent from sourceforge.net because {{email}} is subscribed to {{app_url}}
+Sent from {{domain}} because {{email}} is subscribed to {{app_url}}
 
 To unsubscribe from further messages, a project admin can change settings at {{setting_url}}.  Or, if this is a mailing list, you can unsubscribe from the mailing list.

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/functional/test_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_admin.py b/Allura/allura/tests/functional/test_admin.py
index 78cdbcb..00a8b0d 100644
--- a/Allura/allura/tests/functional/test_admin.py
+++ b/Allura/allura/tests/functional/test_admin.py
@@ -31,11 +31,6 @@ from pylons import tmpl_context as c, app_globals as g
 import mock
 
 
-try:
-    import sfx
-except ImportError:
-    sfx = None
-
 from allura.tests import TestController
 from allura.tests import decorators as td
 from alluratest.controller import TestRestApiBase

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/functional/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_auth.py b/Allura/allura/tests/functional/test_auth.py
index c892f87..cff1e47 100644
--- a/Allura/allura/tests/functional/test_auth.py
+++ b/Allura/allura/tests/functional/test_auth.py
@@ -819,7 +819,7 @@ To reset your password on %s, please visit the following URL:
         sendmail.post.assert_called_once_with(
             destinations=[email._id],
             fromaddr=config['forgemail.return_path'],
-            reply_to='noreply@sourceforge.net',
+            reply_to=config['forgemail.return_path'],
             subject='Password recovery',
             message_id=gen_message_id(),
             text=text)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/model/test_artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_artifact.py b/Allura/allura/tests/model/test_artifact.py
index 6b2ec66..e9ac6ec 100644
--- a/Allura/allura/tests/model/test_artifact.py
+++ b/Allura/allura/tests/model/test_artifact.py
@@ -143,21 +143,21 @@ def test_artifactlink():
 
 @with_setup(setUp, tearDown)
 def test_gen_messageid():
-    assert re.match(r'[0-9a-zA-Z]*.wiki@test.p.sourceforge.net',
+    assert re.match(r'[0-9a-zA-Z]*.wiki@test.p.localhost',
                     h.gen_message_id())
 
 
 @with_setup(setUp, tearDown)
 def test_gen_messageid_with_id_set():
     oid = ObjectId()
-    assert re.match(r'%s.wiki@test.p.sourceforge.net' %
+    assert re.match(r'%s.wiki@test.p.localhost' %
                     str(oid), h.gen_message_id(oid))
 
 
 @with_setup(setUp, tearDown)
 def test_artifact_messageid():
     p = WM.Page(title='T')
-    assert re.match(r'%s.wiki@test.p.sourceforge.net' %
+    assert re.match(r'%s.wiki@test.p.localhost' %
                     str(p._id), p.message_id())
 
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/model/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index 237d2ab..cb548da 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -52,22 +52,22 @@ def test_password_encoder():
 
 @with_setup(setUp)
 def test_email_address():
-    addr = M.EmailAddress(_id='test_admin@sf.net',
+    addr = M.EmailAddress(_id='test_admin@domain.net',
                           claimed_by_user_id=c.user._id)
     ThreadLocalORMSession.flush_all()
     assert addr.claimed_by_user() == c.user
-    addr2 = M.EmailAddress.upsert('test@sf.net')
-    addr3 = M.EmailAddress.upsert('test_admin@sf.net')
+    addr2 = M.EmailAddress.upsert('test@domain.net')
+    addr3 = M.EmailAddress.upsert('test_admin@domain.net')
     assert addr3 is addr
     assert addr2 is not addr
     assert addr2
-    addr4 = M.EmailAddress.upsert('test@SF.NET')
+    addr4 = M.EmailAddress.upsert('test@DOMAIN.NET')
     assert addr4 is addr2
     with patch('allura.lib.app_globals.request', Request.blank('/')):
         addr.send_verification_link()
-    assert addr is c.user.address_object('test_admin@sf.net')
-    c.user.claim_address('test@SF.NET')
-    assert 'test@sf.net' in c.user.email_addresses
+    assert addr is c.user.address_object('test_admin@domain.net')
+    c.user.claim_address('test@DOMAIN.NET')
+    assert 'test@domain.net' in c.user.email_addresses
 
 
 @with_setup(setUp)
@@ -170,7 +170,7 @@ def test_project_role():
     ThreadLocalORMSession.flush_all()
     roles = g.credentials.user_roles(
         c.user._id, project_id=c.project.root_project._id)
-    roles_ids = [role['_id'] for role in roles]
+    roles_ids = [r['_id'] for r in roles]
     roles = M.ProjectRole.query.find({'_id': {'$in': roles_ids}})
     for pr in roles:
         assert pr.display()
@@ -225,7 +225,7 @@ def test_openid_claimed_by_user():
 
 @with_setup(setUp)
 def test_email_address_claimed_by_user():
-    addr = M.EmailAddress(_id='test_admin@sf.net',
+    addr = M.EmailAddress(_id='test_admin@domain.net',
                           claimed_by_user_id=c.user._id)
     c.user.disabled = True
     ThreadLocalORMSession.flush_all()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/model/test_notification.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_notification.py b/Allura/allura/tests/model/test_notification.py
index 88bdf45..b1dff66 100644
--- a/Allura/allura/tests/model/test_notification.py
+++ b/Allura/allura/tests/model/test_notification.py
@@ -94,7 +94,7 @@ class TestNotification(unittest.TestCase):
             message_id='_id',
             in_reply_to='in_reply_to',
             references=['a'],
-            sender='wiki@test.p.in.sf.net',
+            sender='wiki@test.p.in.localhost',
             text='text footer',
         )
 
@@ -157,7 +157,7 @@ class TestNotification(unittest.TestCase):
             message_id='_id',
             in_reply_to='in_reply_to',
             references=['a'],
-            sender='wiki@test.p.in.sf.net',
+            sender='wiki@test.p.in.localhost',
             text='text footer',
         )
 
@@ -245,8 +245,8 @@ class TestPostNotifications(unittest.TestCase):
                      '"Test Admin" <te...@users.localhost>')
         assert_equal(email_tasks[1].kwargs['fromaddr'],
                      '"Test Admin" <te...@users.localhost>')
-        assert_equal(email_tasks[0].kwargs['sender'], 'wiki@test.p.in.sf.net')
-        assert_equal(email_tasks[1].kwargs['sender'], 'wiki@test.p.in.sf.net')
+        assert_equal(email_tasks[0].kwargs['sender'], 'wiki@test.p.in.localhost')
+        assert_equal(email_tasks[1].kwargs['sender'], 'wiki@test.p.in.localhost')
         assert email_tasks[0].kwargs['text'].startswith(
             'Home modified by Test Admin')
         assert 'you indicated interest in ' in email_tasks[0].kwargs['text']
@@ -288,7 +288,8 @@ class TestPostNotifications(unittest.TestCase):
         assert 'test@mail.com is subscribed to http://test1.com' in footer
         assert 'admin can change settings at http://test2.com' in footer
         footer = MailFooter.standard(M.Notification())
-        assert 'Sent from sourceforge.net because you indicated interest in' in footer
+        self.assertIn('Sent from localhost because you indicated interest',
+                      footer)
 
     def _subscribe(self, **kw):
         self.pg.subscribe(type='direct', **kw)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/test_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_globals.py b/Allura/allura/tests/test_globals.py
index ea7313d..e537c2d 100644
--- a/Allura/allura/tests/test_globals.py
+++ b/Allura/allura/tests/test_globals.py
@@ -29,6 +29,7 @@ from bson import ObjectId
 
 from nose.tools import with_setup, assert_equal, assert_in
 from pylons import tmpl_context as c, app_globals as g
+import tg
 
 from ming.orm import ThreadLocalORMSession
 from alluratest.controller import setup_basic_test, setup_global_objects
@@ -322,16 +323,21 @@ def test_wiki_artifact_links():
 
 
 def test_markdown_links():
+    with patch.dict(tg.config, {'nofollow_exempt_domains': 'foobar.net'}):
+        text = g.markdown.convert(
+            'Read [here](http://foobar.net/) about our project')
+        assert_in('href="http://foobar.net/">here</a> about', text)
+
     text = g.markdown.convert(
-        'Read [here](http://foobar.sf.net/) about our project')
-    assert_in('href="http://foobar.sf.net/">here</a> about', text)
+        'Read [here](http://foobar.net/) about our project')
+    assert_in('href="http://foobar.net/" rel="nofollow">here</a> about', text)
 
     text = g.markdown.convert('Read [here](/p/foobar/blah) about our project')
     assert_in('href="/p/foobar/blah">here</a> about', text)
 
-    text = g.markdown.convert('Read <http://foobar.sf.net/> about our project')
+    text = g.markdown.convert('Read <http://foobar.net/> about our project')
     assert_in(
-        'href="http://foobar.sf.net/">http://foobar.sf.net/</a> about', text)
+        'href="http://foobar.net/" rel="nofollow">http://foobar.net/</a> about', text)
 
 
 def test_markdown_and_html():
@@ -394,20 +400,20 @@ def test_markdown_autolink():
     s = g.markdown.convert('This is %s' % tgt)
     assert_equal(
         s, '<div class="markdown_content"><p>This is <a href="%s" rel="nofollow">%s</a></p></div>' % (tgt, tgt))
-    assert '<a href=' in g.markdown.convert('This is http://sf.net')
+    assert '<a href=' in g.markdown.convert('This is http://domain.net')
     # beginning of doc
-    assert_in('<a href=', g.markdown.convert('http://sf.net abc'))
+    assert_in('<a href=', g.markdown.convert('http://domain.net abc'))
     # beginning of a line
     assert_in('<br />\n<a href="http://',
-              g.markdown.convert('foobar\nhttp://sf.net abc'))
+              g.markdown.convert('foobar\nhttp://domain.net abc'))
     # no conversion of these urls:
     assert_in('a blahttp://sdf.com z',
               g.markdown.convert('a blahttp://sdf.com z'))
-    assert_in('literal <code>http://sf.net</code> literal',
-              g.markdown.convert('literal `http://sf.net` literal'))
-    assert_in('<pre>preformatted http://sf.net\n</pre>',
+    assert_in('literal <code>http://domain.net</code> literal',
+              g.markdown.convert('literal `http://domain.net` literal'))
+    assert_in('<pre>preformatted http://domain.net\n</pre>',
               g.markdown.convert('    :::text\n'
-                                 '    preformatted http://sf.net'))
+                                 '    preformatted http://domain.net'))
 
 
 def test_markdown_autolink_with_escape():

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/test_mail_util.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_mail_util.py b/Allura/allura/tests/test_mail_util.py
index 0ae42a0..6b1657d 100644
--- a/Allura/allura/tests/test_mail_util.py
+++ b/Allura/allura/tests/test_mail_util.py
@@ -228,7 +228,7 @@ class TestIdentifySender(object):
 
 
 def test_parse_message_id():
-    assert_equal(_parse_message_id('<de...@libjpeg-turbo.p.sourceforge.net>, </p...@libjpeg-turbo.p.sourceforge.net>'), [
-        'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.sourceforge.net',
-        'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.sourceforge.net',
+    assert_equal(_parse_message_id('<de...@libjpeg-turbo.p.domain.net>, </p...@libjpeg-turbo.p.domain.net>'), [
+        'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.domain.net',
+        'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.domain.net',
     ])

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/test_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index e948276..f06ee06 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -125,8 +125,8 @@ class TestIndexTasks(unittest.TestCase):
                 5 == new_solr_size, "Solr additions didn't happen"
             M.main_orm_session.flush()
             M.main_orm_session.clear()
-            a = _TestArtifact.query.get(_shorthand_id='t3')
-            assert len(a.backrefs) == 5, a.backrefs
+            t3 = _TestArtifact.query.get(_shorthand_id='t3')
+            assert len(t3.backrefs) == 5, t3.backrefs
             assert_equal(find_slinks.call_args_list,
                          [mock.call(a.index().get('text')) for a in artifacts])
 
@@ -177,7 +177,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 destinations=[str(c.user._id)],
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
@@ -185,7 +185,7 @@ class TestMailTasks(unittest.TestCase):
             body = body.split('\n')
 
             assert_equal(rcpts, [c.user.get_pref('email_address')])
-            assert_in('Reply-To: noreply@sf.net', body)
+            assert_in('Reply-To: %s' % g.noreply, body)
             assert_in('From: "Test Admin" <te...@users.localhost>', body)
             assert_in('Subject: Test subject', body)
             # plain
@@ -200,7 +200,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=u'"По" <fo...@bar.com>',
                 destinations=['blah@blah.com'],
                 text=u'Громады стройные теснятся',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'По оживлённым берегам',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
@@ -208,7 +208,7 @@ class TestMailTasks(unittest.TestCase):
             body = body.split('\n')
 
             assert_equal(rcpts, ['blah@blah.com'])
-            assert_in('Reply-To: noreply@sf.net', body)
+            assert_in('Reply-To: %s' % g.noreply, body)
 
             # The address portion must not be encoded, only the name portion can be.
             # Also it is apparently not necessary to have the double-quote separators present
@@ -233,13 +233,13 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 destinations=[str(destination_user._id)],
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
             return_path, rcpts, body = _client.sendmail.call_args[0]
             body = body.split('\n')
-            assert_in('From: noreply@in.sf.net', body)
+            assert_in('From: %s' % g.noreply, body)
 
     def test_send_email_with_disabled_destination_user(self):
         c.user = M.User.by_username('test-admin')
@@ -252,7 +252,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 destinations=[str(destination_user._id)],
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 0)
@@ -264,7 +264,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 toaddr='test@mail.com',
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
@@ -278,13 +278,13 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 toaddr='test@mail.com',
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 2)
             return_path, rcpts, body = _client.sendmail.call_args[0]
             body = body.split('\n')
-            assert_in('From: noreply@in.sf.net', body)
+            assert_in('From: %s' % g.noreply, body)
 
     def test_email_sender_to_headers(self):
         c.user = M.User.by_username('test-admin')
@@ -293,15 +293,15 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 toaddr='test@mail.com',
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
-                sender=u'tickets@test.p.sf.net',
+                sender=u'tickets@test.p.domain.net',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
             return_path, rcpts, body = _client.sendmail.call_args[0]
             body = body.split('\n')
             assert_in('From: "Test Admin" <te...@users.localhost>', body)
-            assert_in('Sender: tickets@test.p.sf.net', body)
+            assert_in('Sender: tickets@test.p.domain.net', body)
             assert_in('To: test@mail.com', body)
 
             _client.reset_mock()
@@ -309,16 +309,16 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 destinations=[str(c.user._id)],
                 text=u'This is a test',
-                reply_to=u'123@tickets.test.p.sf.net',
+                reply_to=u'123@tickets.test.p.domain.net',
                 subject=u'Test subject',
-                sender=u'tickets@test.p.sf.net',
+                sender=u'tickets@test.p.domain.net',
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
             return_path, rcpts, body = _client.sendmail.call_args[0]
             body = body.split('\n')
             assert_in('From: "Test Admin" <te...@users.localhost>', body)
-            assert_in('Sender: tickets@test.p.sf.net', body)
-            assert_in('To: 123@tickets.test.p.sf.net', body)
+            assert_in('Sender: tickets@test.p.domain.net', body)
+            assert_in('To: 123@tickets.test.p.domain.net', body)
 
     def test_email_references_header(self):
         c.user = M.User.by_username('test-admin')
@@ -327,7 +327,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 toaddr='test@mail.com',
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 references=['a', 'b', 'c'],
                 message_id=h.gen_message_id())
@@ -342,7 +342,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 destinations=[str(c.user._id)],
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 references=u'ref',
                 message_id=h.gen_message_id())
@@ -359,7 +359,7 @@ class TestMailTasks(unittest.TestCase):
                 fromaddr=str(c.user._id),
                 toaddr='test@mail.com',
                 text=u'This is a test',
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=u'Test subject',
                 cc=u'someone@example.com',
                 message_id=h.gen_message_id())
@@ -375,7 +375,7 @@ class TestMailTasks(unittest.TestCase):
         with mock.patch.object(forgewiki.wiki_main.ForgeWikiApp, 'handle_message') as f:
             mail_tasks.route_email(
                 '0.0.0.0', c.user.email_addresses[0],
-                ['Page@wiki.test.p.in.sf.net'],
+                ['Page@wiki.test.p.in.localhost'],
                 'This is a mail message')
             args, kwargs = f.call_args
             assert args[0] == 'Page'
@@ -384,8 +384,8 @@ class TestMailTasks(unittest.TestCase):
     @td.with_tool('test', 'Tickets', 'bugs')
     def test_receive_autoresponse(self):
         message = '''Date: Wed, 30 Oct 2013 01:38:40 -0700
-From: <te...@sf.net>
-To: <1...@bugs.test.p.in.sf.net>
+From: <te...@domain.net>
+To: <1...@bugs.test.p.in.localhost>
 Message-ID: <super-unique-id>
 Subject: Not here Re: Message notification
 Precedence: bulk
@@ -399,7 +399,7 @@ I'm not here'''
             mail_tasks.route_email(
                 '0.0.0.0',
                 c.user.email_addresses[0],
-                ['1@bugs.test.p.in.sf.net'],
+                ['1@bugs.test.p.in.localhost'],
                 message)
             assert_equal(hm.call_count, 0)
 
@@ -500,8 +500,8 @@ class TestExportTasks(unittest.TestCase):
         assert_equal(len(tasks), 1)
         assert_equal(tasks[0].kwargs['subject'],
                      'Bulk export for project test completed')
-        assert_equal(tasks[0].kwargs['fromaddr'], 'noreply@sourceforge.net')
-        assert_equal(tasks[0].kwargs['reply_to'], 'noreply@sourceforge.net')
+        assert_equal(tasks[0].kwargs['fromaddr'], g.noreply)
+        assert_equal(tasks[0].kwargs['reply_to'], g.noreply)
         text = tasks[0].kwargs['text']
         assert_in('The bulk export for project test is completed.', text)
         assert_in('The following tools were exported:\n- wiki', text)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/tests/unit/test_app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_app.py b/Allura/allura/tests/unit/test_app.py
index e429407..95c56c5 100644
--- a/Allura/allura/tests/unit/test_app.py
+++ b/Allura/allura/tests/unit/test_app.py
@@ -100,7 +100,7 @@ class TestAppDefaults(WithDatabase):
 
     def test_email_address(self):
         self.app.url = '/p/project/mount-point/'
-        assert self.app.email_address == 'mount-point@project.p.in.sf.net'
+        assert self.app.email_address == 'mount-point@project.p.in.localhost'
 
 
 def install_app():

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/allura/websetup/bootstrap.py
----------------------------------------------------------------------
diff --git a/Allura/allura/websetup/bootstrap.py b/Allura/allura/websetup/bootstrap.py
index abe8234..91c4fd9 100644
--- a/Allura/allura/websetup/bootstrap.py
+++ b/Allura/allura/websetup/bootstrap.py
@@ -75,7 +75,7 @@ def bootstrap(command, conf, vars):
         kw.update(make_project=make_user_projects)
         return create_user(*args, **kw)
 
-    # Our bootstrap doesn't play nicely with SFX project and user APIs
+    # Temporarily disable auth extensions to prevent unintended side-effects
     tg.config['auth.method'] = tg.config['registration.method'] = 'local'
     assert tg.config['auth.method'] == 'local'
     conf['auth.method'] = conf['registration.method'] = 'local'

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index edfb794..2e88542 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -48,6 +48,7 @@ full_stack = true
 use_queue = true
 site_name = Allura
 
+domain = forge-allura.apache.org
 base_url = http://localhost:8080
 
 #lang = ru
@@ -429,4 +430,4 @@ datefmt = %d/%b/%Y:%H:%M:%S UTC
 
 [formatter_timermiddleware]
 format = {"time": "%(asctime)s,%(msecs)03d", "level": "%(levelname)-5.5s", "name": "%(name)s", "message": %(message)s}
-datefmt = %Y-%m-%d %H:%M:%S
\ No newline at end of file
+datefmt = %Y-%m-%d %H:%M:%S

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/Allura/test.ini
----------------------------------------------------------------------
diff --git a/Allura/test.ini b/Allura/test.ini
index 2d71468..9a11bb4 100644
--- a/Allura/test.ini
+++ b/Allura/test.ini
@@ -39,6 +39,7 @@ db_prefix = test_
 
 site_name = Allura
 base_url = http://localhost
+domain = localhost
 
 mediawikiimporter.db_config_prefix = hostedapps.db.
 mediawikiimporter.attachments_dir_prefix = /nfs/mediawiki-attachments/
@@ -70,8 +71,9 @@ smtp.mock = true
 # Forgemail server
 forgemail.host = 0.0.0.0
 forgemail.port = 8825
-forgemail.domain = .in.sf.net
+forgemail.domain = .in.localhost
 forgemail.url = http://localhost:8080
+forgemail.return_path = noreply@localhost
 
 load_test_data = true
 cache_test_data = false

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/AlluraTest/alluratest/validation.py
----------------------------------------------------------------------
diff --git a/AlluraTest/alluratest/validation.py b/AlluraTest/alluratest/validation.py
index 4af5012..1bf6b22 100644
--- a/AlluraTest/alluratest/validation.py
+++ b/AlluraTest/alluratest/validation.py
@@ -68,12 +68,6 @@ class Config(object):
             self.ini_config = conf
         return self.ini_config
 
-    @LazyProperty
-    def hostname(self):
-        if os.path.exists('/etc/soghost'):
-            with open('/etc/soghost') as fp:
-                return fp.read().strip()
-
     def validation_enabled(self, val_type):
         env_var = os.getenv('ALLURA_VALIDATION')
         if env_var == 'all':

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeActivity/forgeactivity/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/tests/functional/test_root.py b/ForgeActivity/forgeactivity/tests/functional/test_root.py
index 6ac88d9..441fa82 100644
--- a/ForgeActivity/forgeactivity/tests/functional/test_root.py
+++ b/ForgeActivity/forgeactivity/tests/functional/test_root.py
@@ -62,7 +62,7 @@ class TestActivityController(TestController):
             "_id": ObjectId("529fa331033c5e6406d8b338"),
             "obj": {
                 "activity_extras": {
-                    "allura_id": "Post:971389ad979eaafa658beb807bf4629d30f5f642.tickets@test.p.sourceforge.net",
+                    "allura_id": "Post:971389ad979eaafa658beb807bf4629d30f5f642.tickets@test.p.domain.net",
                     "summary": "Just wanted to leave a comment on this..."
                 },
                 "activity_url": "/p/test/tickets/_discuss/thread/08e74efd/ed7c/",

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeChat/forgechat/command.py
----------------------------------------------------------------------
diff --git a/ForgeChat/forgechat/command.py b/ForgeChat/forgechat/command.py
index 16f730f..6af2eaa 100644
--- a/ForgeChat/forgechat/command.py
+++ b/ForgeChat/forgechat/command.py
@@ -67,7 +67,9 @@ class IRCBotCommand(allura.command.Command):
 class IRCBot(asynchat.async_chat):
     TIME_BETWEEN_CONFIGS = timedelta(minutes=1)
 
-    def __init__(self, host, port, nick='sfbot'):
+    def __init__(self, host, port, nick=None):
+        if nick is None:
+            nick = tg.config.get('ircbot.nick', 'allurabot')
         self.logger = logging.getLogger(__name__)
         self.host = host
         self.port = port
@@ -79,7 +81,9 @@ class IRCBot(asynchat.async_chat):
         self.data = []
         self.channels = {}
         self.set_nick('000')
-        self.say('USER sfbot %s %s :SFBot 0.0' % (self.host, self.host))
+        self.say('USER {nick} {host} {host} :{nick} 0.0'.format(
+            nick=self.nick,
+            host=self.host))
         self.configure()
 
     def set_nick(self, suffix=None):
@@ -174,7 +178,7 @@ class IRCBot(asynchat.async_chat):
             index = art.index()
             text = index['snippet_s'] or h.get_first(index, 'title')
             url = urljoin(
-                tg.config.get('base_url', 'http://sourceforge.net'), index['url_s'])
+                tg.config['base_url'], index['url_s'])
             self.notice(rcpt, '[%s] - [%s](%s)' % (lnk.link, text, url))
 
     def log_channel(self, sender, cmd, rcpt, rest):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index a42a025..34b71c9 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -157,32 +157,32 @@ class TestForumAsync(TestController):
 
     def test_reply(self):
         self._post('testforum', 'Test Thread', 'Nothing here',
-                   message_id='test_reply@sf.net')
+                   message_id='test_reply@domain.net')
         assert_equal(FM.ForumThread.query.find().count(), 1)
         posts = FM.ForumPost.query.find()
         assert_equal(posts.count(), 1)
         assert_equal(FM.ForumThread.query.get().num_replies, 1)
         assert_equal(FM.ForumThread.query.get()
-                     .first_post_id, 'test_reply@sf.net')
+                     .first_post_id, 'test_reply@domain.net')
 
         post = posts.first()
         self._post('testforum', 'Test Reply', 'Nothing here, either',
                    message_id=post.thread.url() + post._id,
-                   in_reply_to=['test_reply@sf.net'])
+                   in_reply_to=['test_reply@domain.net'])
         assert_equal(FM.ForumThread.query.find().count(), 1)
         assert_equal(FM.ForumPost.query.find().count(), 2)
         assert_equal(FM.ForumThread.query.get()
-                     .first_post_id, 'test_reply@sf.net')
+                     .first_post_id, 'test_reply@domain.net')
 
     def test_attach(self):
         self._post('testforum', 'Attachment Thread', 'This is a text file',
-                   message_id='test.attach.100@sf.net',
+                   message_id='test.attach.100@domain.net',
                    filename='test.txt',
                    content_type='text/plain')
         self._post('testforum', 'Test Thread', 'Nothing here',
-                   message_id='test.attach.100@sf.net')
+                   message_id='test.attach.100@domain.net')
         self._post('testforum', 'Attachment Thread', 'This is a text file',
-                   message_id='test.attach.100@sf.net',
+                   message_id='test.attach.100@domain.net',
                    content_type='text/plain')
 
     def test_threads(self):
@@ -225,9 +225,9 @@ class TestForumAsync(TestController):
         params[post_form.find('textarea')['name']] = 'text'
         r = self.app.post(url + 'reply', params=params)
         self._post('testforum', 'Test Reply', 'Nothing here, either',
-                   message_id='test_posts@sf.net',
+                   message_id='test_posts@domain.net',
                    in_reply_to=[p._id])
-        reply = FM.ForumPost.query.get(_id='test_posts@sf.net')
+        reply = FM.ForumPost.query.get(_id='test_posts@domain.net')
         r = self.app.get(thd_url + reply.slug + '/')
         # Check attachments
         r = self.app.post(url + 'attach',

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
index 2f28cbc..0eb4168 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
@@ -306,7 +306,7 @@ class TestForumAdmin(TestController):
         M.MonQTask.run_ready()
         email_tasks = M.MonQTask.query.find(
             dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all()
-        assert 'Sent from sourceforge.net because email@monitoring.com is subscribed to http://localhost/p/test/discussion/testforum/' in email_tasks[
+        assert 'Sent from localhost because email@monitoring.com is subscribed to http://localhost/p/test/discussion/testforum/' in email_tasks[
             0].kwargs['text'], email_tasks[0].kwargs['text']
         assert 'a project admin can change settings at http://localhost/p/test/admin/discussion/forums' in email_tasks[
             0].kwargs['text']

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeGit/forgegit/templates/git/index.html
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/templates/git/index.html b/ForgeGit/forgegit/templates/git/index.html
index f300d7a..4ef57ea 100644
--- a/ForgeGit/forgegit/templates/git/index.html
+++ b/ForgeGit/forgegit/templates/git/index.html
@@ -78,7 +78,7 @@ git branch --set-upstream master origin/master  # so 'git pull' will work later<
     &nbsp;
     <div class="message info scm-ssh-key">
       <div class="content">
-        Did you get asked for your SourceForge password during this process? You can securely use your Git repository and avoid having to re-enter your password by <a href="https://sourceforge.net/account/ssh">setting up an ssh-key</a>.
+      Did you get asked for your {{config.site_name}} password during this process? You can securely use your Git repository and avoid having to re-enter your password by <a href="https://{{config.domain}}/account/ssh">setting up an ssh-key</a>.
       </div>
     </div>
     {% else %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeGit/forgegit/tests/functional/test_controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index 5fd0805..4943fce 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -260,13 +260,14 @@ class TestRootController(_TestCase):
 
     def test_refresh(self):
         notification = M.Notification.query.find(
-            dict(subject='[test:src-git] 5 new commits to Test Project Git')).first()
+            dict(subject='[test:src-git] 5 new commits to Test Project Git')
+            ).first()
         assert notification
         domain = '.'.join(
             reversed(c.app.url[1:-1].split('/'))).replace('_', '-')
-        common_suffix = tg.config.get('forgemail.domain', '.sourceforge.net')
+        common_suffix = tg.config['forgemail.domain']
         email = 'noreply@%s%s' % (domain, common_suffix)
-        assert email in notification['reply_to_address']
+        assert_in(email, notification['reply_to_address'])
 
     def test_file_force_display(self):
         ci = self._get_ci()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeImporters/forgeimporters/github/tests/test_wiki.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/tests/test_wiki.py b/ForgeImporters/forgeimporters/github/tests/test_wiki.py
index 1eb996a..f231f49 100644
--- a/ForgeImporters/forgeimporters/github/tests/test_wiki.py
+++ b/ForgeImporters/forgeimporters/github/tests/test_wiki.py
@@ -73,9 +73,6 @@ class TestGitHubWikiImporter(TestCase):
                 project=p, user=u, url='foo')
             g.post_event.assert_called_once_with('project_updated')
 
-
-class TestGitHubWikiImporter(TestCase):
-
     def setUp(self):
         setup_basic_test()
         self.blob1 = Mock()
@@ -260,17 +257,17 @@ class TestGitHubWikiImporter(TestCase):
 
     def test_convert_gollum_external_links(self):
         f = GitHubWikiImporter().convert_gollum_tags
-        assert_equal(f(u'[[http://sf.net]]'), u'<http://sf.net>')
-        assert_equal(f(u'[[https://sf.net]]'), u'<https://sf.net>')
-        assert_equal(f(u'[[SourceForge|http://sf.net]]'),
-                     u'[SourceForge](http://sf.net)')
+        assert_equal(f(u'[[http://domain.net]]'), u'<http://domain.net>')
+        assert_equal(f(u'[[https://domain.net]]'), u'<https://domain.net>')
+        assert_equal(f(u'[[Site|http://domain.net]]'),
+                     u'[Site](http://domain.net)')
 
     def test_convert_gollum_external_links_escaped(self):
         f = GitHubWikiImporter().convert_gollum_tags
-        assert_equal(f(u"'[[http://sf.net]]"), u'[[http://sf.net]]')
-        assert_equal(f(u"'[[https://sf.net]]"), u'[[https://sf.net]]')
-        assert_equal(f(u"'[[SourceForge|http://sf.net]]"),
-                     u'[[SourceForge|http://sf.net]]')
+        assert_equal(f(u"'[[http://domain.net]]"), u'[[http://domain.net]]')
+        assert_equal(f(u"'[[https://domain.net]]"), u'[[https://domain.net]]')
+        assert_equal(f(u"'[[Site|http://domain.net]]"),
+                     u'[[Site|http://domain.net]]')
 
     def test_convert_gollum_toc(self):
         f = GitHubWikiImporter().convert_gollum_tags
@@ -283,7 +280,7 @@ class TestGitHubWikiImporter(TestCase):
 
 More info at: [[MoreInfo]] [[Even More Info]]
 
-Our website is [[http://sf.net]].
+Our website is [[http://domain.net]].
 
 '[[Escaped Tag]]'''
 
@@ -291,7 +288,7 @@ Our website is [[http://sf.net]].
 
 More info at: [MoreInfo] [Even More Info]
 
-Our website is <http://sf.net>.
+Our website is <http://domain.net>.
 
 [[Escaped Tag]]'''
 
@@ -310,7 +307,7 @@ Our website is <http://sf.net>.
 
 More info at: [[MoreInfo]] [[Even More Info]]
 
-Our website is [[http://sf.net]].
+Our website is [[http://domain.net]].
 
 '[[Escaped Tag]]
 
@@ -327,7 +324,7 @@ sha aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'''
 
 More info at: [MoreInfo] [Even More Info]
 
-Our website is <http://sf.net>.
+Our website is <http://domain.net>.
 
 [[Escaped Tag]]
 
@@ -354,7 +351,7 @@ sha [aaaaaa]'''
 
 More info at: [[MoreInfo]] [[Even More Info]]
 
-Our website is [[http://sf.net]].
+Our website is [[http://domain.net]].
 
 '[[Escaped Tag]]
 
@@ -364,7 +361,7 @@ Our website is [[http://sf.net]].
 
         result = u'''<p>Look at [[this page|Some Page]]</p>
 <p>More info at: [[MoreInfo]] [[Even More Info]]</p>
-<p>Our website is [[http://sf.net]].</p>
+<p>Our website is [[http://domain.net]].</p>
 <p>'[[Escaped Tag]]</p>
 <p>[External link to the wiki page](https://github.com/a/b/wiki/Page)</p>
 <p>[External link](https://github.com/a/b/issues/1)</p>'''

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeImporters/forgeimporters/trac/tests/data/test-list.html
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/trac/tests/data/test-list.html b/ForgeImporters/forgeimporters/trac/tests/data/test-list.html
index 2e96702..ccd10c9 100644
--- a/ForgeImporters/forgeimporters/trac/tests/data/test-list.html
+++ b/ForgeImporters/forgeimporters/trac/tests/data/test-list.html
@@ -47,8 +47,6 @@
     </script>
   <link type="text/css" href="/apps/trac/open-ms/chrome/site/ha-css/default2.css" rel="stylesheet" />
 
-    <link rel="stylesheet" type="text/css" href="http://static.sourceforge.net/css/develop/hosted.php?secure=0&amp;1383143209" media="all" />
-
     <!-- BEGIN: AdSolution-Tag 4.2: Global-Code [PLACE IN HTML-HEAD-AREA!] -->
     <!-- DoubleClick Random Number -->
     <script type="text/javascript">
@@ -80,22 +78,16 @@
 <div id="sf_header">
     <div class="sfh_n">
         <ol class="sfh_n_ol">
-            <li class="sfh_n_li"><span><a href="/" id="sf_logo"><strong>SourceForge</strong></a></span></li>
-            <li class="sfh_n_li"><span><a href="/projects/open-ms" title="Summary page hosted on SourceForge.net">Summary</a></span></li>
+            <li class="sfh_n_li"><span><a href="/" id="sf_logo"><strong>Domain</strong></a></span></li>
+            <li class="sfh_n_li"><span><a href="/projects/open-ms" title="Summary page">Summary</a></span></li>
             <li class="sfh_n_li"><span><a href="/projects/open-ms/files" title="Files available for download">Files</a></span></li>                            <li class="sfh_n_li"><span><a href="/projects/open-ms/support">Support</a></span></li>
                         <li class="sfh_n_li"><span><a href="/support">Report Spam</a></span></li>
-                            <li class="sfh_n_li right"><span><a href="/user/registration/" title="Get a SourceForge.net account">Create account</a></span></li>
+                            <li class="sfh_n_li right"><span><a href="/user/registration/" title="Get an account">Create account</a></span></li>
                 <li class="sfh_n_li right"><span><a href="/account/login.php" title="Log in and gain access to additional features">Log in</a></span></li>
                     </ol>
     </div>
 </div>
 <div id="fad1happ" class="ads">
-   <script type="text/javascript">
-   //<![CDATA[
-    document.write('<script src="http://ad.doubleclick.net/adj/ostg.sourceforge/cons_hosted_apps_p11_spons;pg=default;sz=728x90;tile='+dfp_tile+';tpc=project;tpc=open-ms;ord='+dfp_ord+'?" type="text/javascript"><\/script>');
-     dfp_tile++;
-    //]]>
-    </script>
 </div>
     
 
@@ -105,7 +97,6 @@
 <!-- End Header -->
     <div id="banner">
       <div id="header">
-        <h1><a href="http://sourceforge.net/projects/open-ms/">OpenMS</a></h1>
       </div>
       <form id="search" action="/apps/trac/open-ms/search" method="get">
         <div>
@@ -329,8 +320,7 @@ fixed in rev. 10330<br />
 <!-- End Footer -->
 
     
-<p class="copyright">&copy; 2013 SourceForge. All Rights Reserved.
-SourceForge is a <a href="http://www.diceholdingsinc.com/phoenix.zhtml?c=211152&p=irol-landing">Dice Holdings, Inc.</a> company &nbsp;
+<p class="copyright">
 <a href="http://slashdotmedia.com/terms-of-use">Terms of Use</a> -
 <a href="http://slashdotmedia.com/privacy-statement/">Privacy Policy</a> -
 <a href="http://slashdotmedia.com/opt-out-choices">Cookies/Opt Out</a>

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeImporters/forgeimporters/trac/tests/data/trac-export.json
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/trac/tests/data/trac-export.json b/ForgeImporters/forgeimporters/trac/tests/data/trac-export.json
index 82d7b89..597475e 100644
--- a/ForgeImporters/forgeimporters/trac/tests/data/trac-export.json
+++ b/ForgeImporters/forgeimporters/trac/tests/data/trac-export.json
@@ -12,7 +12,7 @@
               "description": "Shows the display error", 
               "filename": "SF%20display%20error.JPG", 
               "size": 184728, 
-              "url": "http://sourceforge.net/apps/trac/sourceforge/raw-attachment/ticket/204/SF%20display%20error.JPG"
+              "url": "http://domain.net/apps/trac/project/raw-attachment/ticket/204/SF%20display%20error.JPG"
             }
           ], 
           "cc": "ma_boehm", 
@@ -26,7 +26,7 @@
             }, 
             {
               "class": "COMMENT", 
-              "comment": "  * **owner** set to _hinojosa_\n\n  * **status** changed from _new_ to _assigned_\n\nHi,\n\nI'm investigating this. I need to fire up my system with this browser.\n\nIf you need anything else, please post a response to this request.\n\nCheers!,\n\nDaniel Hinojosa - Sr. Manager, [SourceForge][1].net Support\n\nP.S., Be sure to monitor our Site Status page,\n[https://sourceforge.net/sitestatus][2].\n\n   [1]: http://sourceforge.net/apps/trac/sourceforge/wiki/SourceForge\n\n   [2]: https://sourceforge.net/sitestatus\n\n", 
+              "comment": "  * **owner** set to _hinojosa_\n\n  * **status** changed from _new_ to _assigned_\n\nHi,\n\nI'm investigating this. I need to fire up my system with this browser.\n\nIf you need anything else, please post a response to this request.\n\nCheers!,\n\nDaniel Hinojosa - Sr. Manager, Support\n\nP.S., Be sure to monitor our Site Status page,\n\n", 
               "date": "2009-04-13T15:46:18Z", 
               "submitter": "hinojosa"
             }, 
@@ -38,20 +38,20 @@
             }, 
             {
               "class": "COMMENT", 
-              "comment": "  * **status** changed from _accepted_ to _closed_\n\n  * **resolution** set to _fixed_\n\nHello,\n\nThis issue is should be resolved with the site redesign.\n\nRegards, Chris Tsai, SourceForge.net Support\n\n", 
+              "comment": "  * **status** changed from _accepted_ to _closed_\n\n  * **resolution** set to _fixed_\n\nHello,\n\nThis issue is should be resolved with the site redesign.\n\nRegards, Chris Tsai, Support\n\n", 
               "date": "2009-07-20T15:44:32Z", 
               "submitter": "ctsai"
             },
             {
               "class": "COMMENT",
-              "comment": "test link [[2496]](http://testlink.com)  test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201)) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:45)",
+              "comment": "test link [[2496]](http://testlink.com)  test ticket ([#201](http://domain.net/apps/trac/project/ticket/201)) \n [test comment](http://domain.net/apps/trac/project/ticket/204#comment:1) \n [test comment](http://domain.net/apps/trac/project/ticket/204#comment:45)",
               "date": "2009-07-21T15:44:32Z",
               "submitter": "ctsai"
             }
           ], 
           "date": "2009-04-13T08:49:13Z", 
           "date_updated": "2009-07-20T15:44:32Z", 
-          "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://sourceforge.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
+          "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://domain.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
           "id": 204, 
           "keywords": "ENGR",
           "milestone": "test_milestone",

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeLink/forgelink/tests/test_app.py
----------------------------------------------------------------------
diff --git a/ForgeLink/forgelink/tests/test_app.py b/ForgeLink/forgelink/tests/test_app.py
index 8149815..f4bbe84 100644
--- a/ForgeLink/forgelink/tests/test_app.py
+++ b/ForgeLink/forgelink/tests/test_app.py
@@ -39,8 +39,8 @@ class TestBulkExport(object):
 
         project = M.Project.query.get(shortname='test')
         link = project.app_instance('link')
-        link.config.options['url'] = 'http://sf.net'
+        link.config.options['url'] = 'http://domain.net'
         f = tempfile.TemporaryFile()
         link.bulk_export(f)
         f.seek(0)
-        assert_equal(json.loads(f.read())['url'], 'http://sf.net')
+        assert_equal(json.loads(f.read())['url'], 'http://domain.net')

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeSVN/forgesvn/templates/svn/index.html
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/templates/svn/index.html b/ForgeSVN/forgesvn/templates/svn/index.html
index 9b81fe3..8625b0b 100644
--- a/ForgeSVN/forgesvn/templates/svn/index.html
+++ b/ForgeSVN/forgesvn/templates/svn/index.html
@@ -87,7 +87,7 @@ svn import {{c.app.repo.clone_url('rw', c.user.username)}} -m "Initial commit"</
     &nbsp;
     <div class="message info scm-ssh-key">
       <div class="content">
-        Did you get asked for your SourceForge password during this process? You can securely use your Subversion repository and avoid having to re-enter your password by <a href="https://sourceforge.net/account/ssh">setting up an ssh-key</a>.
+      Did you get asked for your {{config.site_name}} password during this process? You can securely use your Subversion repository and avoid having to re-enter your password by <a href="https://{{config.domain}}/account/ssh">setting up an ssh-key</a>.
       </div>
     </div>
     {% else %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeSVN/forgesvn/tests/data/testsvn-trunk-tags-branches/hooks/post-commit
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-trunk-tags-branches/hooks/post-commit b/ForgeSVN/forgesvn/tests/data/testsvn-trunk-tags-branches/hooks/post-commit
index 1ad70a4..6c22c26 100755
--- a/ForgeSVN/forgesvn/tests/data/testsvn-trunk-tags-branches/hooks/post-commit
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-trunk-tags-branches/hooks/post-commit
@@ -1,8 +1,8 @@
 #!/bin/bash
 # The following is required for site integration, do not remove/modify.
 # Place user hook code in post-commit-user and it will be called from here.
-curl -s http://sf-fortytwo-7045.sb.sf.net/auth/refresh_repo/p/test/code-1/
+curl -s http://domain.net/auth/refresh_repo/p/test/code-1/
 
 DIR="$(dirname "${BASH_SOURCE[0]}")"
 if [ -x $DIR/post-commit-user ]; then  exec $DIR/post-commit-user "$@"
-fi
\ No newline at end of file
+fi

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeSVN/forgesvn/tests/data/testsvn/hooks/post-commit
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn/hooks/post-commit b/ForgeSVN/forgesvn/tests/data/testsvn/hooks/post-commit
index d6f67b5..5534ed7 100755
--- a/ForgeSVN/forgesvn/tests/data/testsvn/hooks/post-commit
+++ b/ForgeSVN/forgesvn/tests/data/testsvn/hooks/post-commit
@@ -1,9 +1,5 @@
 #!/bin/sh
 # THIS FILE IS AUTOGENERATED - DO NOT EDIT
-/var/local/mastertree/host/sfp-svn/hook-scripts/sf-svn-stats-hook.py $*
-/var/local/mastertree/host/sfp-svn/hook-scripts/keepsake -p "$1"
-/var/local/mastertree/host/sfp-svn/hook-scripts/ciabot_svn.py --revisionURI="http://t2809.svn.sourceforge.net/%(project)s/?view=rev&rev=%(revision)s" --repositoryURI=https://t2809.svn.sourceforge.net/svnroot/t2809 "$1" "$2" t2809
-/var/local/mastertree/host/sfp-svn/hook-scripts/ciabot_svn.py --revisionURI="http://t2809.svn.sourceforge.net/t2809/?view=rev&rev=%(revision)s" --repositoryURI=https://t2809.svn.sourceforge.net/svnroot/t2809 "$1" "$2" "foo"
-/var/local/mastertree/host/sfp-svn/hook-scripts/svnnotify --repos-path "$1" --revision "$2" --to "test@example.com" --subject-prefix "SF.net SVN: t2809:" --subject-cx --no-first-line --with-diff --viewcvs-url "http://t2809.svn.sourceforge.net/t2809/?rev=%s&view=rev" --user-domain "users.sourceforge.net" --footer "This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site." -l /usr/bin/svnlook --max-diff-length 100000
-/var/local/mastertree/host/sfp-svn/hook-scripts/svnnotify --repos-path "$1" --revision "$2" --to "test@example.com" --subject-prefix "SF.net SVN: t2809:" --subject-cx --no-first-line --viewcvs-url "http://t2809.svn.sourceforge.net/t2809/?rev=%s&view=rev" --user-domain "users.sourceforge.net" --footer "This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site." -l /usr/bin/svnlook --max-diff-length 100000
+/hook-scripts/sf-svn-stats-hook.py $*
+/hook-scripts/keepsake -p "$1"
 exit 0

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeSVN/forgesvn/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index 7f0c7b9..9b527f0 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -162,10 +162,11 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
         assert os.access(
             os.path.join(g.tmpdir, 'testsvn/hooks/post-commit'), os.X_OK)
         with open(os.path.join(g.tmpdir, 'testsvn/hooks/post-commit')) as f:
-            c = f.read()
+            hook_data = f.read()
         self.assertIn(
-            'curl -s http://localhost/auth/refresh_repo/p/test/src/\n', c)
-        self.assertIn('exec $DIR/post-commit-user "$@"\n', c)
+            'curl -s http://localhost/auth/refresh_repo/p/test/src/\n',
+            hook_data)
+        self.assertIn('exec $DIR/post-commit-user "$@"\n', hook_data)
 
         repo.refresh(notify=False)
         assert len(list(repo.log()))

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeShortUrl/forgeshorturl/tests/functional/test.py
----------------------------------------------------------------------
diff --git a/ForgeShortUrl/forgeshorturl/tests/functional/test.py b/ForgeShortUrl/forgeshorturl/tests/functional/test.py
index 67931aa..0cc8db3 100644
--- a/ForgeShortUrl/forgeshorturl/tests/functional/test.py
+++ b/ForgeShortUrl/forgeshorturl/tests/functional/test.py
@@ -108,12 +108,12 @@ class TestRootController(TestController):
         assert 'exists' in self.webflash(r)
 
     def test_shorturl_chars_restrictions(self):
-        d = dict(short_url='', full_url='http://sf.net/')
+        d = dict(short_url='', full_url='http://domain.net/')
         r = self.app.post('/admin/url/add', params=d)
         assert ShortUrl.query.find(
             dict(app_config_id=c.app.config._id)).count() == 0
         assert 'Please enter a value' in self.webflash(r)
-        d = dict(short_url='g*', full_url='http://sf.net/')
+        d = dict(short_url='g*', full_url='http://domain.net/')
         r = self.app.post('/admin/url/add', params=d)
         assert ShortUrl.query.find(
             dict(app_config_id=c.app.config._id)).count() == 0

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeTracker/forgetracker/tests/functional/data/sf.json
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/data/sf.json b/ForgeTracker/forgetracker/tests/functional/data/sf.json
index 82d7b89..597475e 100644
--- a/ForgeTracker/forgetracker/tests/functional/data/sf.json
+++ b/ForgeTracker/forgetracker/tests/functional/data/sf.json
@@ -12,7 +12,7 @@
               "description": "Shows the display error", 
               "filename": "SF%20display%20error.JPG", 
               "size": 184728, 
-              "url": "http://sourceforge.net/apps/trac/sourceforge/raw-attachment/ticket/204/SF%20display%20error.JPG"
+              "url": "http://domain.net/apps/trac/project/raw-attachment/ticket/204/SF%20display%20error.JPG"
             }
           ], 
           "cc": "ma_boehm", 
@@ -26,7 +26,7 @@
             }, 
             {
               "class": "COMMENT", 
-              "comment": "  * **owner** set to _hinojosa_\n\n  * **status** changed from _new_ to _assigned_\n\nHi,\n\nI'm investigating this. I need to fire up my system with this browser.\n\nIf you need anything else, please post a response to this request.\n\nCheers!,\n\nDaniel Hinojosa - Sr. Manager, [SourceForge][1].net Support\n\nP.S., Be sure to monitor our Site Status page,\n[https://sourceforge.net/sitestatus][2].\n\n   [1]: http://sourceforge.net/apps/trac/sourceforge/wiki/SourceForge\n\n   [2]: https://sourceforge.net/sitestatus\n\n", 
+              "comment": "  * **owner** set to _hinojosa_\n\n  * **status** changed from _new_ to _assigned_\n\nHi,\n\nI'm investigating this. I need to fire up my system with this browser.\n\nIf you need anything else, please post a response to this request.\n\nCheers!,\n\nDaniel Hinojosa - Sr. Manager, Support\n\nP.S., Be sure to monitor our Site Status page,\n\n", 
               "date": "2009-04-13T15:46:18Z", 
               "submitter": "hinojosa"
             }, 
@@ -38,20 +38,20 @@
             }, 
             {
               "class": "COMMENT", 
-              "comment": "  * **status** changed from _accepted_ to _closed_\n\n  * **resolution** set to _fixed_\n\nHello,\n\nThis issue is should be resolved with the site redesign.\n\nRegards, Chris Tsai, SourceForge.net Support\n\n", 
+              "comment": "  * **status** changed from _accepted_ to _closed_\n\n  * **resolution** set to _fixed_\n\nHello,\n\nThis issue is should be resolved with the site redesign.\n\nRegards, Chris Tsai, Support\n\n", 
               "date": "2009-07-20T15:44:32Z", 
               "submitter": "ctsai"
             },
             {
               "class": "COMMENT",
-              "comment": "test link [[2496]](http://testlink.com)  test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201)) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:45)",
+              "comment": "test link [[2496]](http://testlink.com)  test ticket ([#201](http://domain.net/apps/trac/project/ticket/201)) \n [test comment](http://domain.net/apps/trac/project/ticket/204#comment:1) \n [test comment](http://domain.net/apps/trac/project/ticket/204#comment:45)",
               "date": "2009-07-21T15:44:32Z",
               "submitter": "ctsai"
             }
           ], 
           "date": "2009-04-13T08:49:13Z", 
           "date_updated": "2009-07-20T15:44:32Z", 
-          "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://sourceforge.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
+          "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://domain.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
           "id": 204, 
           "keywords": "ENGR",
           "milestone": "test_milestone",

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/5d46b785/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index d6ec7e0..a4688b9 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -31,6 +31,7 @@ from nose.tools import assert_true, assert_false, assert_equal, assert_in
 from nose.tools import assert_raises, assert_not_in, assert_items_equal
 from formencode.variabledecode import variable_encode
 from pylons import tmpl_context as c
+from pylons import app_globals as g
 
 from alluratest.controller import TestController, setup_basic_test
 from allura import model as M
@@ -2259,7 +2260,7 @@ class TestFunctionalController(TrackerTestController):
                 fromaddr=str(c.user._id),
                 destinations=[str(c.user._id)],
                 text=text,
-                reply_to=u'noreply@sf.net',
+                reply_to=g.noreply,
                 subject=email.kwargs.subject,
                 message_id=h.gen_message_id())
             assert_equal(_client.sendmail.call_count, 1)
@@ -2496,7 +2497,7 @@ class TestEmailMonitoring(TrackerTestController):
         M.MonQTask.run_ready()
         email_tasks = M.MonQTask.query.find(
             dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all()
-        assert 'Sent from sourceforge.net because mailinglist@example.com is subscribed to http://localhost/p/test/bugs/' in email_tasks[
+        assert 'Sent from localhost because mailinglist@example.com is subscribed to http://localhost/p/test/bugs/' in email_tasks[
             0].kwargs['text']
         assert 'a project admin can change settings at http://localhost/p/test/admin/bugs/options' in email_tasks[
             0].kwargs['text']