Commit bc69b6bd authored by Zosman's avatar Zosman
Browse files

fixed 'css shit' and merged in 2.2-dev

parents 8aaaf46e b81565da
Pipeline #826 passed with stage
in 1 minute and 7 seconds
image: ubuntu:14.04
services:
- mysql:latest
......@@ -10,29 +8,35 @@ variables:
MYSQL_DATABASE: go
MYSQL_ROOT_PASSWORD: root
test_Go:
before_script:
- apt-get update -qy
- apt-get install -y libldap2-dev libsasl2-dev mysql-client libmysqlclient-dev python-mysqldb
- pip install -r requirements.txt
- cd go/
- cp settings/settings.py.template settings/settings.py
- cp settings/secret.py.template settings/secret.py
- export SECRET_KEY=$(dd if=/dev/urandom count=100 | tr -dc "A-Za-z0-9" | fold -w 60 | head -n1 2>/dev/null)
- export DJANGO_DEBUG="True"
- sed -i settings/secret.py -e 's/DB_NAME.*/DB_NAME = \"go\"/'
- sed -i settings/secret.py -e 's/DB_USER.*/DB_USER = \"root\"/'
- sed -i settings/secret.py -e 's/DB_PASSWORD.*/DB_PASSWORD = \"root\"/'
- sed -i settings/secret.py -e 's/DB_HOST.*/DB_HOST = \"mysql\"/'
- sed -i settings/secret.py -e 's/SECRET_KEY.*/SECRET_KEY = \"${SECRET_KEY}\"/'
- python manage.py makemigrations
- python manage.py makemigrations go
- python manage.py migrate
- echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('root', 'root@srct.gmu.edu', 'root') " | python manage.py shell
Go-py2.7:
image: library/python:2.7
type: test
before_script:
- apt-get update -qy
- apt-get install -y python-dev python-pip python-pip libldap2-dev mysql-client libmysqlclient-dev python-mysqldb libsasl2-dev libjpeg-dev git
- pip install -r requirements.txt
- pip install coverage
- cp go/settings/settings.py.template go/settings/settings.py
- cp go/settings/secret.py.template go/settings/secret.py
- export SECRET_KEY=$(dd if=/dev/urandom count=100 | tr -dc "A-Za-z0-9" | fold -w 60 | head -n1 2>/dev/null)
- sed -i go/settings/secret.py -e 's/DB_NAME.*/DB_NAME = \"go\"/'
- sed -i go/settings/secret.py -e 's/DB_USER.*/DB_USER = \"root\"/'
- sed -i go/settings/secret.py -e 's/DB_PASSWORD.*/DB_PASSWORD = \"root\"/'
- sed -i go/settings/secret.py -e 's/DB_HOST.*/DB_HOST = \"mysql\"/'
- sed -i go/settings/secret.py -e 's/SECRET_KEY.*/SECRET_KEY = \"${SECRET_KEY}\"/'
- cd go
- export DJANGO_DEBUG="True"
- python manage.py makemigrations
- python manage.py makemigrations go
- python manage.py migrate
- echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('root', 'root@srct.gmu.edu', 'root') " | python ./manage.py shell
script:
- cd ..
- coverage run --source=go ./go/manage.py test
- coverage html
- grep pc_cov htmlcov/index.html | egrep -o "[0-9]+\%" | awk '{ print "covered " $1;}'
- python manage.py test
Go-py3.6:
image: library/python:3.6
type: test
script:
- pip install coverage
- coverage run --source=go --omit=*migrations/* manage.py test
- coverage html -i && grep pc_cov htmlcov/index.html | egrep -o "[0-9]+\%" | awk '{ print "covered " $1;}'
......@@ -5,6 +5,10 @@ First take a look at [github flow](https://guides.github.com/introduction/flow/)
as this page gives a good starting point on understanding how to work with `git`
in an open source repo.
**Note:**
You will need to be a member before making any contributions. Join the slack #go channel and ask nicely.
### Branches
Each branch off of the development branch serves one and only one purpose: to
......
FROM python:2.7
FROM python:3.6
ENV PYTHONUNBUFFERED 1
# HEALTHCHECK CMD curl --fail http://localhost:8000/ || exit 1
RUN mkdir /go
WORKDIR /go
ADD requirements.txt /go/
RUN apt-get update
RUN apt-get install git-all -y
RUN apt-get install python2.7-dev -y
RUN apt-get install libsasl2-dev -y
RUN apt-get install libldap2-dev -y
RUN apt-get install netcat -y
RUN apt-get install
RUN mkdir /go
WORKDIR /go
ADD requirements.txt /go/
RUN pip install -r requirements.txt
ADD . /go/
# Go
[![build status](https://git.gmu.edu/srct/go/badges/master/build.svg)](https://git.gmu.edu/srct/go/commits/master) [![coverage report](https://git.gmu.edu/srct/go/badges/master/coverage.svg)](https://git.gmu.edu/srct/go/commits/master) [![python version](https://img.shields.io/badge/python-2.7-blue.svg)]() [![Django version](https://img.shields.io/badge/Django-1.10-brightgreen.svg)]() [![SemVer version](https://img.shields.io/badge/SemVer Version-2.1.1-yellowgreen.svg)]()
[![build status](https://git.gmu.edu/srct/go/badges/master/build.svg)](https://git.gmu.edu/srct/go/commits/master) [![coverage report](https://git.gmu.edu/srct/go/badges/master/coverage.svg)](https://git.gmu.edu/srct/go/commits/master) [![python version](https://img.shields.io/badge/python-2.7,3.6-blue.svg)]() [![Django version](https://img.shields.io/badge/Django-1.10-brightgreen.svg)]() [![SemVer version](https://img.shields.io/badge/SemVer Version-2.1.1-yellowgreen.svg)]()
#### A project of [GMU SRCT](http://srct.gmu.edu).
#### A project of [GMU SRCT](https://srct.gmu.edu).
Go is a drop-in URL shortening service. This project aims to provide an easy to use
URL branding service for institutions that wish to widely disseminate information
without unnecessarily outsourcing branding.
Go is currently a `Python 2.7` project written in the `Django` web framework, with
Go is currently a `Python 3` (with backwards compatability foor `Python 2.7` until
Django 2.0 in December 2017) project written in the `Django` web framework, with
`MySQL` as our backend database.
# Setup instructions for local development
......@@ -70,12 +71,12 @@ Instructions on how to setup git on Windows goes here.
## 2) Clone the Go codebase.
Now, we're going to clone down a copy of the Go codebase from [git.gmu.edu](http://git.gmu.edu/srct/go),
Now, we're going to clone down a copy of the Go codebase from [git.gmu.edu](https://git.gmu.edu/srct/go),
the SRCT code respository with SSH.
**a)** Configure your ssh keys by following the directions at:
[git.gmu.edu/help/ssh/README](http://git.gmu.edu/help/ssh/README).
[git.gmu.edu/help/ssh/README](https://git.gmu.edu/help/ssh/README).
**b)** Now, on your computer, navigate to the directory in which you want to download the project (ie. perhaps one called `development/SRCT`), and run
......
......@@ -16,12 +16,10 @@ services:
- email_domain=@masonlive.gmu.edu
- cas_url=https://cas.srct.gmu.edu/
- superuser=dhaynes3
# - SECRET_KEY=much-secret
- DB_NAME=go
- DB_USER=go
- DB_PASSWORD=go
- DB_HOST=db
- PIWIK_SITE_ID=
- PIWIK_URL=
- EMAIL_HOST=
- EMAIL_PORT=
......
# Future Imports
from __future__ import unicode_literals, absolute_import, print_function, division
# Django Imports
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
......
from __future__ import absolute_import, print_function
# python 3 imports ^^^
# Future Imports
from __future__ import unicode_literals, absolute_import, print_function, division
# Django Imports
from django.contrib.auth.models import User
from django.conf import settings
from django.contrib import messages
# third party imports
import requests
......@@ -38,10 +37,10 @@ def pfinfo(uname):
metadata = requests.get(url, timeout=5)
print("Retrieving information from the peoplefinder api.")
metadata.raise_for_status()
except requests.exceptions.RequestException as e:
print("Cannot resolve to peoplefinder api:", e)
except requests.exceptions.RequestException as ex:
print("Cannot resolve to peoplefinder api:", ex)
print("Returning empty user info tuple.")
return [u'', u'']
return ['', '']
else:
pfjson = metadata.json()
try:
......@@ -64,13 +63,13 @@ def pfinfo(uname):
name = pfjson['results'][0]['name']
return name
# if the name is not in peoplefinder, return empty first and last name
except IndexError:
except IndexError as ex:
print("Name not found in peoplefinder.")
return [u'',u'']
except Exception as e:
print("Unknown peoplefinder error:", e)
return ['','']
except Exception as ex:
print("Unknown peoplefinder error:", ex)
print("Returning empty user info tuple.")
return [u'', u'']
return ['', '']
"""
create a django user based off of the peoplefinder info we parsed earlier
......@@ -81,8 +80,8 @@ def create_user(tree):
try:
username = tree[0][0].text
user, user_created = User.objects.get_or_create(username=username)
except Exception as e:
print("CAS callback unsuccessful:", e)
except Exception as ex:
print("CAS callback unsuccessful:", ex)
# error handling in pfinfo function
info_name = pfinfo(username)
......@@ -111,5 +110,5 @@ def create_user(tree):
print("User object already exists.")
print("CAS callback successful.")
except Exception as e:
print("Unhandled user creation error:", e)
except Exception as ex:
print("Unhandled user creation error:", ex)
# Future Imports
from __future__ import unicode_literals, absolute_import, print_function, division
# Django Imports
from django import forms
from django.core.exceptions import ValidationError
......@@ -44,7 +47,7 @@ class URLForm(forms.ModelForm):
try:
# if we're able to get a URL with the same short url
URL.objects.get(short__iexact=value)
except URL.DoesNotExist:
except URL.DoesNotExist as ex:
return
# then raise a ValidationError
raise ValidationError('Short url already exists.')
......
# Future Imports
from __future__ import unicode_literals, absolute_import, print_function, division
# Django Imports
from django.core.management.base import BaseCommand
from django.utils import timezone
......
# Future Imports
from __future__ import unicode_literals, absolute_import, print_function, division
# Django Imports
from django.db import models
from django.contrib.auth.models import User
......@@ -5,11 +8,11 @@ from django.utils import timezone
from django.core.cache import cache
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils.encoding import python_2_unicode_compatible
# Other Imports
from hashids import Hashids # http://hashids.org/python/
import string
# http://hashids.org/python/
from hashids import Hashids
# generate the salt and initialize Hashids
hashids = Hashids(salt="srct.gmu.edu", alphabet=(string.ascii_lowercase + string.digits))
......@@ -18,37 +21,38 @@ hashids = Hashids(salt="srct.gmu.edu", alphabet=(string.ascii_lowercase + string
This is simply a wrapper model for the user object which, if an object
exists, indicates that that user is registered.
"""
@python_2_unicode_compatible
class RegisteredUser(models.Model):
# Is this User Blocked?
blocked = models.BooleanField(default=False)
blocked = models.BooleanField(default = False)
# Let's associate a User to this RegisteredUser
user = models.OneToOneField(User)
# What is your name?
full_name = models.CharField(
blank=False,
max_length=100,
blank = False,
max_length = 100,
)
# What organization are you associated with?
organization = models.CharField(
blank=False,
max_length=100,
blank = False,
max_length = 100,
)
# Why do you want to use Go?
description = models.TextField(blank=True)
description = models.TextField(blank = True)
# Have you filled out the registration form?
registered = models.BooleanField(default=False)
registered = models.BooleanField(default = False)
# Are you approved to use Go?
approved = models.BooleanField(default=False)
approved = models.BooleanField(default = False)
# print(RegisteredUser)
def __unicode__(self):
def __str__(self):
return '<Registered User: %s - Approval Status: %s>' % (self.user, self.approved)
......@@ -65,30 +69,31 @@ def handle_regUser_creation(sender, instance, created, **kwargs):
owner, target url, short identifier, click counter, and expiration
date.
"""
@python_2_unicode_compatible
class URL(models.Model):
# Who is the owner of this Go link
owner = models.ForeignKey(RegisteredUser)
# When was this link created?
date_created = models.DateTimeField(default=timezone.now)
date_created = models.DateTimeField(default = timezone.now)
# What is the target URL for this Go link
target = models.URLField(max_length=1000)
target = models.URLField(max_length = 1000)
# What is the actual go link (short url) for this URL
short = models.SlugField(max_length=20, primary_key=True)
short = models.SlugField(max_length = 20, primary_key = True)
# how many people have visited this Go link
clicks = models.IntegerField(default=0)
clicks = models.IntegerField(default = 0)
# how many people have visited this Go link through the qr code
qrclicks = models.IntegerField(default=0)
qrclicks = models.IntegerField(default = 0)
# how many people have visited the go link through social media
socialclicks = models.IntegerField(default=0)
socialclicks = models.IntegerField(default = 0)
# does this Go link expire on a certain date
expires = models.DateTimeField(blank=True, null=True)
expires = models.DateTimeField(blank = True, null = True)
# print(URL)
def __unicode__(self):
def __str__(self):
return '<%s : %s>' % (self.owner.user, self.target)
# metadata for URL's
......@@ -107,9 +112,9 @@ class URL(models.Model):
tries = 1
while tries < 100:
try:
URL.objects.get(short__iexact=short)
URL.objects.get(short__iexact = short)
tries += 1
cache.incr("hashids_counter")
except URL.DoesNotExist:
except URL.DoesNotExist as ex:
return short
return None
......@@ -9,6 +9,9 @@
<!-- define the content block for the page -->
{% block content %}
<!-- Tell Django to load static files -->
{% load staticfiles %}
<!-- div that contains the 404 page content -->
<div class="row">
<div class="col-md-10 col-md-offset-1 text-center">
......
......@@ -9,6 +9,10 @@
<!-- define the content block for the page -->
{% block content %}
<!-- Tell Django to load static files -->
{% load staticfiles %}
<!-- div that contains the 500 page content -->
<div class="row">
<div class="col-md-10 col-md-offset-1 text-center">
......
......@@ -71,9 +71,71 @@ SRCT Go &bull; Administration Panel
<!-- a div containing our form submission buttons -->
<div class="form-group">
<input type="submit" name="_approve" value="Approve" class="btn btn-primary btn-sm">
<input type="submit" name="_deny" value="Deny" class="btn btn-danger btn-sm">
<input type="submit" name="_block" value="Block" class="btn btn-default btn-sm btn-blockUsr" style="background-color: black; color: white;">
<!-- the modal for approve doesn't work-->
<a class="btn btn-primary btn-sm" data-target="#approveModal" data-toggle="modal"> Approve </a>
<!-- input type="submit" name="_approve" value="Approve" class="btn btn-primary btn-sm"-->
<a class="btn btn-danger btn-sm" data-target="#denyModal" data-toggle="modal"> Deny </a>
<a class="btn btn-default btn-sm btn-blockUsr" data-target="#blockModal" data-toggle="modal" style="background-color: black; color: white;"> Block </a>
<!--Define Approve Modal-->
<div id="approveModal" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to approve a user?</h4>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_approve" value="Approve" class="btn btn-primary btn-lg" style="border-width: 0px;float:right; width:49%; background-color: #00331a; color: #ffffff; border-radius: 4px;">
</div>
</div>
</div>
</div>
<!--Define Deny Modal-->
<div id="denyModal" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to deny a user?</h4>
<h6 style="font-weight:500; margin-top: 0px; margin-bottom: 0px;">
Please remember the user's feelings</h6>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_deny" value="Deny" class="btn btn-danger btn-lg" style="border-width: 0px;float:right; width:49%; background-color: #ac1d37; color: #ffffff; border-radius: 4px;">
</div>
</div>
</div>
</div>
<!--Define Block Modal-->
<!-- Note there is another block modal for the other block button below -->
<div id="blockModal" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to block a user?</h4>
<h6 style="font-weight:500; margin-top: 0px; margin-bottom: 0px;">
Please remember the user's feelings</h6>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_block" value="Block" class="btn btn-danger btn-lg" style="border-width: 0px; float:right; width:49%;background-color: #000000; color: #ffffff; border-radius: 4px;">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
......@@ -127,7 +189,27 @@ SRCT Go &bull; Administration Panel
<!-- define an unblock button -->
<div class="form-group">
<input type="submit" name="_unblock" value="Un-Block" class="btn btn-default btn-sm btn-Unblock">
<!-- input type="submit" name="_unblock" value="Un-Block" class="btn btn-default btn-sm btn-Unblock"-->
<a class="btn btn-default btn-sm btn-Unblock" data-target="#unblockModal" data-toggle="modal"> Unblock </a>
<!--Define Un-Block Modal-->
<div id="unblockModal" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to unblock a user?</h4>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_unblock" value="Un-Block" class="btn btn-default btn-lg" style="border-width: 0px;float:right; width:49%; background-color: #e7e7e7; color: #000000; border-radius: 4px;">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
......@@ -176,13 +258,62 @@ SRCT Go &bull; Administration Panel
</tbody>
</table>
<!-- display our removal and blacking buttons -->
<!-- display our removal and blocking buttons -->
<div class="form-group">
<input type="submit" name="_remove" value="Remove" class="btn btn-danger btn-sm">
<input type="submit" name="_block" value="Block" class="btn btn-default btn-sm btn-blockUsr" style="background-color: black; color: white;">
<a class="btn btn-danger btn-sm" data-target="#removeModal" data-toggle="modal"> Remove </a>
<a class="btn btn-default btn-sm btn-blockUsr" data-target="#blockModal2" data-toggle="modal" style="background-color: black; color: white;"> Block </a>
<!--Define Remove Modal-->
<div id="removeModal" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to remove a user?</h4>
<h6 style="font-weight:500; margin-top: 0px; margin-bottom: 0px;">
Please remember the user's feelings</h6>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_remove" value="Remove" class="btn btn-danger btn-lg" style="border-width: 0px; float:right; width:49%;background-color: #ac1d37; color: #ffffff; border-radius: 4px;">
</div>
</div>
</div>
</div>
<!--Define Block Modal 2-->
<div id="blockModal2" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" style="background-color:#f5f5f5; border-radius: 7px">
<div class="modal-header" style="text-align:center;">
<h4 class="modal-title text-center"
style="font-weight:bold; font-size: 21px !important;">
Are you sure you would like to block a user?</h4>
<h6 style="font-weight:500; margin-top: 0px; margin-bottom: 0px;">
Please remember the user's feelings</h6>
</div>
<div class="modal-body" style="padding-bottom: 80px">
<a type="button" class="btn btn-success btn-lg" style="border-width: 0px;float:left; width:49%; background-color: #A9B0AD; color: #ffffff; border-radius: 4px;" data-dismiss="modal">Cancel</a>
<input type="submit" name="_block" value="Block" class="btn btn-danger btn-lg" style="border-width: 0px; float:right; width:49%;background-color: #000000; color: #ffffff; border-radius: 4px;">
</div>
</div>
</div>
</div>
</div>
<<<<<<< HEAD
</form>
</div>
</div>
<script src = "../../static/js/useradmin.js"> </script>
=======
</form>
</div>
</div>
>>>>>>> origin/2.2-dev
{% endblock %}
......@@ -42,7 +42,7 @@ SRCT Go &bull; About
<br></br>
Since Go falls under the gmu.edu domain, users who use this service will act in compliance with the
GMU <a
href="http://universitypolicy.gmu.edu/policies/responsible-use-of-computing/">
href="https://universitypolicy.gmu.edu/policies/responsible-use-of-computing/">
Responsible Use of Computing</a>
policies.
</p>
......
......@@ -5,7 +5,8 @@
<span class="text-muted">A project of
<a href="http://srct.gmu.edu/">GMU<strong> SRCT</strong></a>. |
Read and contribute to our <a href="https://git.gmu.edu/srct/go/">source code</a>. |
Freely-licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
Freely-licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. |
Go Version 2.1.1
</span>
</div>
</footer>
......@@ -139,12 +139,12 @@
{% with the_url|add:"?social" as social_url %}
<!-- twitter -->
<a class="share" href="http://twitter.com/share?url={{ social_url }}" target="_blank" title="Share via Twitter">
<a class="share" href="https://twitter.com/share?url={{ social_url }}" target="_blank" title="Share via Twitter">
<i class="fa fa-twitter-square fa-3x"></i>
</a>
<!-- facebook -->
<a class="share" href="http://www.facebook.com/share.php?u={{ social_url }}" target="_blank" title="Share via Facebook">
<a class="share" href="https://www.facebook.com/share.php?u={{ social_url }}" target="_blank" title="Share via Facebook">
<i class="fa fa-facebook-square fa-3x"></i>
</a>
......@@ -154,7 +154,7 @@
</a>
<!-- linkedin -->
<a class="share" href="http://www.linkedin.com/shareArticle?mini=true&amp;url={{ social_url }}&amp;ro=false&amp;summary=&amp;source=" target="_blank" title="Share via LinkedIn">
<a class="share" href="https://www.linkedin.com/shareArticle?mini=true&amp;url={{ social_url }}&amp;ro=false&amp;summary=&amp;source=" target="_blank" title="Share via LinkedIn">
<i class="fa fa-linkedin-square fa-3x"></i>
</a>
{% endwith %}
......
......@@ -42,11 +42,11 @@ SRCT Go &bull; Welcome
<p>
Go provides University-branded URL shortening for student organizations,
administration, and ULife groups. Any approved user can generate a
<a href="http://go.gmu.edu">go.gmu.edu</a> address
<a href="https://go.gmu.edu">go.gmu.edu</a> address
that can redirect to a longer URL.
<br></br>
Go is a product of the
George Mason University <a href="http://srct.gmu.edu">Student-Run Computing and Technology</a>
George Mason University <a href="https://srct.gmu.edu">Student-Run Computing and Technology</a>
student organization.
</p>
</div>
......