Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
350f98eb
Commit
350f98eb
authored
May 06, 2015
by
Braden MacDonald
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes for compatibility with latest python-social-auth (0.2.7)
parent
390e2c18
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
33 additions
and
102 deletions
+33
-102
common/djangoapps/auth_exchange/forms.py
+3
-2
common/djangoapps/auth_exchange/tests/test_forms.py
+4
-1
common/djangoapps/student/views.py
+7
-4
common/djangoapps/third_party_auth/pipeline.py
+5
-4
common/djangoapps/third_party_auth/provider.py
+6
-30
common/djangoapps/third_party_auth/tests/specs/base.py
+0
-0
common/djangoapps/third_party_auth/tests/test_change_enrollment.py
+3
-3
common/djangoapps/third_party_auth/tests/utils.py
+2
-2
common/test/db_cache/bok_choy_schema.sql
+0
-53
common/test/db_cache/lettuce.db
+0
-0
lms/envs/test.py
+2
-2
requirements/edx/base.txt
+1
-1
No files found.
common/djangoapps/auth_exchange/forms.py
View file @
350f98eb
...
@@ -10,6 +10,7 @@ from provider.oauth2.forms import ScopeChoiceField, ScopeMixin
...
@@ -10,6 +10,7 @@ from provider.oauth2.forms import ScopeChoiceField, ScopeMixin
from
provider.oauth2.models
import
Client
from
provider.oauth2.models
import
Client
from
requests
import
HTTPError
from
requests
import
HTTPError
from
social.backends
import
oauth
as
social_oauth
from
social.backends
import
oauth
as
social_oauth
from
social.exceptions
import
AuthException
from
third_party_auth
import
pipeline
from
third_party_auth
import
pipeline
...
@@ -54,7 +55,7 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm):
...
@@ -54,7 +55,7 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm):
if
self
.
_errors
:
if
self
.
_errors
:
return
{}
return
{}
backend
=
self
.
request
.
social_strategy
.
backend
backend
=
self
.
request
.
backend
if
not
isinstance
(
backend
,
social_oauth
.
BaseOAuth2
):
if
not
isinstance
(
backend
,
social_oauth
.
BaseOAuth2
):
raise
OAuthValidationError
(
raise
OAuthValidationError
(
{
{
...
@@ -89,7 +90,7 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm):
...
@@ -89,7 +90,7 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm):
user
=
None
user
=
None
try
:
try
:
user
=
backend
.
do_auth
(
self
.
cleaned_data
.
get
(
"access_token"
))
user
=
backend
.
do_auth
(
self
.
cleaned_data
.
get
(
"access_token"
))
except
HTTPError
:
except
(
HTTPError
,
AuthException
)
:
pass
pass
if
user
and
isinstance
(
user
,
User
):
if
user
and
isinstance
(
user
,
User
):
self
.
cleaned_data
[
"user"
]
=
user
self
.
cleaned_data
[
"user"
]
=
user
...
...
common/djangoapps/auth_exchange/tests/test_forms.py
View file @
350f98eb
...
@@ -24,8 +24,11 @@ class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin):
...
@@ -24,8 +24,11 @@ class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin):
def
setUp
(
self
):
def
setUp
(
self
):
super
(
AccessTokenExchangeFormTest
,
self
)
.
setUp
()
super
(
AccessTokenExchangeFormTest
,
self
)
.
setUp
()
self
.
request
=
RequestFactory
()
.
post
(
"dummy_url"
)
self
.
request
=
RequestFactory
()
.
post
(
"dummy_url"
)
redirect_uri
=
'dummy_redirect_url'
SessionMiddleware
()
.
process_request
(
self
.
request
)
SessionMiddleware
()
.
process_request
(
self
.
request
)
self
.
request
.
social_strategy
=
social_utils
.
load_strategy
(
self
.
request
,
self
.
BACKEND
)
self
.
request
.
social_strategy
=
social_utils
.
load_strategy
(
self
.
request
)
# pylint: disable=no-member
self
.
request
.
backend
=
social_utils
.
load_backend
(
self
.
request
.
social_strategy
,
self
.
BACKEND
,
redirect_uri
)
def
_assert_error
(
self
,
data
,
expected_error
,
expected_error_description
):
def
_assert_error
(
self
,
data
,
expected_error
,
expected_error_description
):
form
=
AccessTokenExchangeForm
(
request
=
self
.
request
,
data
=
data
)
form
=
AccessTokenExchangeForm
(
request
=
self
.
request
,
data
=
data
)
...
...
common/djangoapps/student/views.py
View file @
350f98eb
...
@@ -1129,7 +1129,7 @@ def login_oauth_token(request, backend):
...
@@ -1129,7 +1129,7 @@ def login_oauth_token(request, backend):
"""
"""
warnings
.
warn
(
"Please use AccessTokenExchangeView instead."
,
DeprecationWarning
)
warnings
.
warn
(
"Please use AccessTokenExchangeView instead."
,
DeprecationWarning
)
backend
=
request
.
social_strategy
.
backend
backend
=
request
.
backend
if
isinstance
(
backend
,
social_oauth
.
BaseOAuth1
)
or
isinstance
(
backend
,
social_oauth
.
BaseOAuth2
):
if
isinstance
(
backend
,
social_oauth
.
BaseOAuth1
)
or
isinstance
(
backend
,
social_oauth
.
BaseOAuth2
):
if
"access_token"
in
request
.
POST
:
if
"access_token"
in
request
.
POST
:
# Tell third party auth pipeline that this is an API call
# Tell third party auth pipeline that this is an API call
...
@@ -1137,7 +1137,7 @@ def login_oauth_token(request, backend):
...
@@ -1137,7 +1137,7 @@ def login_oauth_token(request, backend):
user
=
None
user
=
None
try
:
try
:
user
=
backend
.
do_auth
(
request
.
POST
[
"access_token"
])
user
=
backend
.
do_auth
(
request
.
POST
[
"access_token"
])
except
HTTPError
:
except
(
HTTPError
,
AuthException
)
:
pass
pass
# do_auth can return a non-User object if it fails
# do_auth can return a non-User object if it fails
if
user
and
isinstance
(
user
,
User
):
if
user
and
isinstance
(
user
,
User
):
...
@@ -1447,7 +1447,10 @@ def create_account_with_params(request, params):
...
@@ -1447,7 +1447,10 @@ def create_account_with_params(request, params):
# next, link the account with social auth, if provided
# next, link the account with social auth, if provided
if
should_link_with_social_auth
:
if
should_link_with_social_auth
:
request
.
social_strategy
=
social_utils
.
load_strategy
(
backend
=
params
[
'provider'
],
request
=
request
)
backend_name
=
params
[
'provider'
]
request
.
social_strategy
=
social_utils
.
load_strategy
(
request
)
redirect_uri
=
reverse
(
'social:complete'
,
args
=
(
backend_name
,
))
request
.
backend
=
social_utils
.
load_backend
(
request
.
social_strategy
,
backend_name
,
redirect_uri
)
social_access_token
=
params
.
get
(
'access_token'
)
social_access_token
=
params
.
get
(
'access_token'
)
if
not
social_access_token
:
if
not
social_access_token
:
raise
ValidationError
({
raise
ValidationError
({
...
@@ -1461,7 +1464,7 @@ def create_account_with_params(request, params):
...
@@ -1461,7 +1464,7 @@ def create_account_with_params(request, params):
pipeline_user
=
None
pipeline_user
=
None
error_message
=
""
error_message
=
""
try
:
try
:
pipeline_user
=
request
.
social_strategy
.
backend
.
do_auth
(
social_access_token
,
user
=
user
)
pipeline_user
=
request
.
backend
.
do_auth
(
social_access_token
,
user
=
user
)
except
AuthAlreadyAssociated
:
except
AuthAlreadyAssociated
:
error_message
=
_
(
"The provided access_token is already associated with another user."
)
error_message
=
_
(
"The provided access_token is already associated with another user."
)
except
(
HTTPError
,
AuthException
):
except
(
HTTPError
,
AuthException
):
...
...
common/djangoapps/third_party_auth/pipeline.py
View file @
350f98eb
...
@@ -445,7 +445,7 @@ def parse_query_params(strategy, response, *args, **kwargs):
...
@@ -445,7 +445,7 @@ def parse_query_params(strategy, response, *args, **kwargs):
"""Reads whitelisted query params, transforms them into pipeline args."""
"""Reads whitelisted query params, transforms them into pipeline args."""
auth_entry
=
strategy
.
session
.
get
(
AUTH_ENTRY_KEY
)
auth_entry
=
strategy
.
session
.
get
(
AUTH_ENTRY_KEY
)
if
not
(
auth_entry
and
auth_entry
in
_AUTH_ENTRY_CHOICES
):
if
not
(
auth_entry
and
auth_entry
in
_AUTH_ENTRY_CHOICES
):
raise
AuthEntryError
(
strategy
.
backend
,
'auth_entry missing or invalid'
)
raise
AuthEntryError
(
strategy
.
request
.
backend
,
'auth_entry missing or invalid'
)
return
{
'auth_entry'
:
auth_entry
}
return
{
'auth_entry'
:
auth_entry
}
...
@@ -526,7 +526,7 @@ def _create_redirect_url(url, strategy):
...
@@ -526,7 +526,7 @@ def _create_redirect_url(url, strategy):
@partial.partial
@partial.partial
def
set_logged_in_cookie
(
backend
=
None
,
user
=
None
,
request
=
None
,
auth_entry
=
None
,
*
args
,
**
kwargs
):
def
set_logged_in_cookie
(
backend
=
None
,
user
=
None
,
strategy
=
None
,
auth_entry
=
None
,
*
args
,
**
kwargs
):
"""This pipeline step sets the "logged in" cookie for authenticated users.
"""This pipeline step sets the "logged in" cookie for authenticated users.
Some installations have a marketing site front-end separate from
Some installations have a marketing site front-end separate from
...
@@ -552,6 +552,7 @@ def set_logged_in_cookie(backend=None, user=None, request=None, auth_entry=None,
...
@@ -552,6 +552,7 @@ def set_logged_in_cookie(backend=None, user=None, request=None, auth_entry=None,
"""
"""
if
not
is_api
(
auth_entry
)
and
user
is
not
None
and
user
.
is_authenticated
():
if
not
is_api
(
auth_entry
)
and
user
is
not
None
and
user
.
is_authenticated
():
request
=
strategy
.
request
if
strategy
else
None
if
request
is
not
None
:
if
request
is
not
None
:
# Check that the cookie isn't already set.
# Check that the cookie isn't already set.
# This ensures that we allow the user to continue to the next
# This ensures that we allow the user to continue to the next
...
@@ -692,7 +693,7 @@ def change_enrollment(strategy, auth_entry=None, user=None, *args, **kwargs):
...
@@ -692,7 +693,7 @@ def change_enrollment(strategy, auth_entry=None, user=None, *args, **kwargs):
@partial.partial
@partial.partial
def
associate_by_email_if_login_api
(
auth_entry
,
strategy
,
details
,
user
,
*
args
,
**
kwargs
):
def
associate_by_email_if_login_api
(
auth_entry
,
backend
,
details
,
user
,
*
args
,
**
kwargs
):
"""
"""
This pipeline step associates the current social auth with the user with the
This pipeline step associates the current social auth with the user with the
same email address in the database. It defers to the social library's associate_by_email
same email address in the database. It defers to the social library's associate_by_email
...
@@ -701,7 +702,7 @@ def associate_by_email_if_login_api(auth_entry, strategy, details, user, *args,
...
@@ -701,7 +702,7 @@ def associate_by_email_if_login_api(auth_entry, strategy, details, user, *args,
This association is done ONLY if the user entered the pipeline through a LOGIN API.
This association is done ONLY if the user entered the pipeline through a LOGIN API.
"""
"""
if
auth_entry
==
AUTH_ENTRY_LOGIN_API
:
if
auth_entry
==
AUTH_ENTRY_LOGIN_API
:
association_response
=
associate_by_email
(
strategy
,
details
,
user
,
*
args
,
**
kwargs
)
association_response
=
associate_by_email
(
backend
,
details
,
user
,
*
args
,
**
kwargs
)
if
(
if
(
association_response
and
association_response
and
association_response
.
get
(
'user'
)
and
association_response
.
get
(
'user'
)
and
...
...
common/djangoapps/third_party_auth/provider.py
View file @
350f98eb
...
@@ -36,7 +36,7 @@ class BaseProvider(object):
...
@@ -36,7 +36,7 @@ class BaseProvider(object):
return
'
%
s.
%
s'
%
(
cls
.
BACKEND_CLASS
.
__module__
,
cls
.
BACKEND_CLASS
.
__name__
)
return
'
%
s.
%
s'
%
(
cls
.
BACKEND_CLASS
.
__module__
,
cls
.
BACKEND_CLASS
.
__name__
)
@classmethod
@classmethod
def
get_email
(
cls
,
unused_
provider_details
):
def
get_email
(
cls
,
provider_details
):
"""Gets user's email address.
"""Gets user's email address.
Provider responses can contain arbitrary data. This method can be
Provider responses can contain arbitrary data. This method can be
...
@@ -44,16 +44,16 @@ class BaseProvider(object):
...
@@ -44,16 +44,16 @@ class BaseProvider(object):
extracted by the social_details pipeline step.
extracted by the social_details pipeline step.
Args:
Args:
unused_
provider_details: dict of string -> string. Data about the
provider_details: dict of string -> string. Data about the
user passed back by the provider.
user passed back by the provider.
Returns:
Returns:
String or None. The user's email address, if any.
String or None. The user's email address, if any.
"""
"""
return
None
return
provider_details
.
get
(
'email'
)
@classmethod
@classmethod
def
get_name
(
cls
,
unused_
provider_details
):
def
get_name
(
cls
,
provider_details
):
"""Gets user's name.
"""Gets user's name.
Provider responses can contain arbitrary data. This method can be
Provider responses can contain arbitrary data. This method can be
...
@@ -61,13 +61,13 @@ class BaseProvider(object):
...
@@ -61,13 +61,13 @@ class BaseProvider(object):
extracted by the social_details pipeline step.
extracted by the social_details pipeline step.
Args:
Args:
unused_
provider_details: dict of string -> string. Data about the
provider_details: dict of string -> string. Data about the
user passed back by the provider.
user passed back by the provider.
Returns:
Returns:
String or None. The user's full name, if any.
String or None. The user's full name, if any.
"""
"""
return
None
return
provider_details
.
get
(
'fullname'
)
@classmethod
@classmethod
def
get_register_form_data
(
cls
,
pipeline_kwargs
):
def
get_register_form_data
(
cls
,
pipeline_kwargs
):
...
@@ -121,14 +121,6 @@ class GoogleOauth2(BaseProvider):
...
@@ -121,14 +121,6 @@ class GoogleOauth2(BaseProvider):
'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET'
:
None
,
'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET'
:
None
,
}
}
@classmethod
def
get_email
(
cls
,
provider_details
):
return
provider_details
.
get
(
'email'
)
@classmethod
def
get_name
(
cls
,
provider_details
):
return
provider_details
.
get
(
'fullname'
)
class
LinkedInOauth2
(
BaseProvider
):
class
LinkedInOauth2
(
BaseProvider
):
"""Provider for LinkedIn's Oauth2 auth system."""
"""Provider for LinkedIn's Oauth2 auth system."""
...
@@ -141,14 +133,6 @@ class LinkedInOauth2(BaseProvider):
...
@@ -141,14 +133,6 @@ class LinkedInOauth2(BaseProvider):
'SOCIAL_AUTH_LINKEDIN_OAUTH2_SECRET'
:
None
,
'SOCIAL_AUTH_LINKEDIN_OAUTH2_SECRET'
:
None
,
}
}
@classmethod
def
get_email
(
cls
,
provider_details
):
return
provider_details
.
get
(
'email'
)
@classmethod
def
get_name
(
cls
,
provider_details
):
return
provider_details
.
get
(
'fullname'
)
class
FacebookOauth2
(
BaseProvider
):
class
FacebookOauth2
(
BaseProvider
):
"""Provider for LinkedIn's Oauth2 auth system."""
"""Provider for LinkedIn's Oauth2 auth system."""
...
@@ -161,14 +145,6 @@ class FacebookOauth2(BaseProvider):
...
@@ -161,14 +145,6 @@ class FacebookOauth2(BaseProvider):
'SOCIAL_AUTH_FACEBOOK_SECRET'
:
None
,
'SOCIAL_AUTH_FACEBOOK_SECRET'
:
None
,
}
}
@classmethod
def
get_email
(
cls
,
provider_details
):
return
provider_details
.
get
(
'email'
)
@classmethod
def
get_name
(
cls
,
provider_details
):
return
provider_details
.
get
(
'fullname'
)
class
Registry
(
object
):
class
Registry
(
object
):
"""Singleton registry of third-party auth providers.
"""Singleton registry of third-party auth providers.
...
...
common/djangoapps/third_party_auth/tests/specs/base.py
View file @
350f98eb
This diff is collapsed.
Click to expand it.
common/djangoapps/third_party_auth/tests/test_change_enrollment.py
View file @
350f98eb
...
@@ -182,6 +182,6 @@ class PipelineEnrollmentTest(UrlResetMixin, ModuleStoreTestCase):
...
@@ -182,6 +182,6 @@ class PipelineEnrollmentTest(UrlResetMixin, ModuleStoreTestCase):
request
.
user
=
self
.
user
request
.
user
=
self
.
user
request
.
session
=
cache
.
SessionStore
()
request
.
session
=
cache
.
SessionStore
()
re
turn
social_utils
.
load_strategy
(
re
quest
.
social_strategy
=
social_utils
.
load_strategy
(
request
)
backend
=
self
.
BACKEND_NAME
,
request
=
request
request
.
backend
=
social_utils
.
load_backend
(
request
.
social_strategy
,
self
.
BACKEND_NAME
,
redirect_uri
=
''
)
)
return
request
.
social_strategy
common/djangoapps/third_party_auth/tests/utils.py
View file @
350f98eb
...
@@ -66,7 +66,7 @@ class ThirdPartyOAuthTestMixin(object):
...
@@ -66,7 +66,7 @@ class ThirdPartyOAuthTestMixin(object):
class
ThirdPartyOAuthTestMixinFacebook
(
object
):
class
ThirdPartyOAuthTestMixinFacebook
(
object
):
"""Tests oauth with the Facebook backend"""
"""Tests oauth with the Facebook backend"""
BACKEND
=
"facebook"
BACKEND
=
"facebook"
USER_URL
=
"https://graph.facebook.com/me"
USER_URL
=
"https://graph.facebook.com/
v2.3/
me"
# In facebook responses, the "id" field is used as the user's identifier
# In facebook responses, the "id" field is used as the user's identifier
UID_FIELD
=
"id"
UID_FIELD
=
"id"
...
@@ -74,6 +74,6 @@ class ThirdPartyOAuthTestMixinFacebook(object):
...
@@ -74,6 +74,6 @@ class ThirdPartyOAuthTestMixinFacebook(object):
class
ThirdPartyOAuthTestMixinGoogle
(
object
):
class
ThirdPartyOAuthTestMixinGoogle
(
object
):
"""Tests oauth with the Google backend"""
"""Tests oauth with the Google backend"""
BACKEND
=
"google-oauth2"
BACKEND
=
"google-oauth2"
USER_URL
=
"https://www.googleapis.com/
oauth2/v1/userinfo
"
USER_URL
=
"https://www.googleapis.com/
plus/v1/people/me
"
# In google-oauth2 responses, the "email" field is used as the user's identifier
# In google-oauth2 responses, the "email" field is used as the user's identifier
UID_FIELD
=
"email"
UID_FIELD
=
"email"
common/test/db_cache/bok_choy_schema.sql
View file @
350f98eb
...
@@ -2236,59 +2236,6 @@ CREATE TABLE `shoppingcart_registrationcoderedemption` (
...
@@ -2236,59 +2236,6 @@ CREATE TABLE `shoppingcart_registrationcoderedemption` (
CONSTRAINT
`registration_code_id_refs_id_4d01e47b`
FOREIGN
KEY
(
`registration_code_id`
)
REFERENCES
`shoppingcart_courseregistrationcode`
(
`id`
)
CONSTRAINT
`registration_code_id_refs_id_4d01e47b`
FOREIGN
KEY
(
`registration_code_id`
)
REFERENCES
`shoppingcart_courseregistrationcode`
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
/*!40101 SET character_set_client = @saved_cs_client */
;
/*!40101 SET character_set_client = @saved_cs_client */
;
DROP
TABLE
IF
EXISTS
`social_auth_association`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
CREATE
TABLE
`social_auth_association`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`server_url`
varchar
(
255
)
NOT
NULL
,
`handle`
varchar
(
255
)
NOT
NULL
,
`secret`
varchar
(
255
)
NOT
NULL
,
`issued`
int
(
11
)
NOT
NULL
,
`lifetime`
int
(
11
)
NOT
NULL
,
`assoc_type`
varchar
(
64
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
/*!40101 SET character_set_client = @saved_cs_client */
;
DROP
TABLE
IF
EXISTS
`social_auth_code`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
CREATE
TABLE
`social_auth_code`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`email`
varchar
(
75
)
NOT
NULL
,
`code`
varchar
(
32
)
NOT
NULL
,
`verified`
tinyint
(
1
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
UNIQUE
KEY
`email`
(
`email`
,
`code`
),
KEY
`social_auth_code_65da3d2c`
(
`code`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
/*!40101 SET character_set_client = @saved_cs_client */
;
DROP
TABLE
IF
EXISTS
`social_auth_nonce`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
CREATE
TABLE
`social_auth_nonce`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`server_url`
varchar
(
255
)
NOT
NULL
,
`timestamp`
int
(
11
)
NOT
NULL
,
`salt`
varchar
(
65
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
/*!40101 SET character_set_client = @saved_cs_client */
;
DROP
TABLE
IF
EXISTS
`social_auth_usersocialauth`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
CREATE
TABLE
`social_auth_usersocialauth`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`user_id`
int
(
11
)
NOT
NULL
,
`provider`
varchar
(
32
)
NOT
NULL
,
`uid`
varchar
(
255
)
NOT
NULL
,
`extra_data`
longtext
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
UNIQUE
KEY
`provider`
(
`provider`
,
`uid`
),
KEY
`social_auth_usersocialauth_fbfc09f1`
(
`user_id`
),
CONSTRAINT
`user_id_refs_id_60fa311b`
FOREIGN
KEY
(
`user_id`
)
REFERENCES
`auth_user`
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
/*!40101 SET character_set_client = @saved_cs_client */
;
DROP
TABLE
IF
EXISTS
`south_migrationhistory`
;
DROP
TABLE
IF
EXISTS
`south_migrationhistory`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
/*!40101 SET character_set_client = utf8 */
;
...
...
common/test/db_cache/lettuce.db
View file @
350f98eb
No preview for this file type
lms/envs/test.py
View file @
350f98eb
...
@@ -242,8 +242,8 @@ THIRD_PARTY_AUTH = {
...
@@ -242,8 +242,8 @@ THIRD_PARTY_AUTH = {
"SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET"
:
"test"
,
"SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET"
:
"test"
,
},
},
"Facebook"
:
{
"Facebook"
:
{
"SOCIAL_AUTH_
GOOGLE_OAUTH2
_KEY"
:
"test"
,
"SOCIAL_AUTH_
FACEBOOK
_KEY"
:
"test"
,
"SOCIAL_AUTH_
GOOGLE_OAUTH2
_SECRET"
:
"test"
,
"SOCIAL_AUTH_
FACEBOOK
_SECRET"
:
"test"
,
},
},
}
}
...
...
requirements/edx/base.txt
View file @
350f98eb
...
@@ -69,7 +69,7 @@ pyparsing==2.0.1
...
@@ -69,7 +69,7 @@ pyparsing==2.0.1
python-memcached==1.48
python-memcached==1.48
python-openid==2.2.5
python-openid==2.2.5
python-dateutil==2.1
python-dateutil==2.1
python-social-auth==0.
1.23
python-social-auth==0.
2.7
pytz==2015.2
pytz==2015.2
pysrt==0.4.7
pysrt==0.4.7
PyYAML==3.10
PyYAML==3.10
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment