Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
ccadd7fc
Commit
ccadd7fc
authored
Oct 05, 2016
by
Vincent Petry
Committed by
GitHub
Oct 05, 2016
Browse files
Merge pull request #26206 from owncloud/first-login-event
First login event
parents
8ddd74c9
a68d6313
Changes
11
Hide whitespace changes
Inline
Side-by-side
apps/dav/lib/AppInfo/Application.php
View file @
ccadd7fc
...
...
@@ -29,6 +29,7 @@ use OCA\DAV\CardDAV\SyncService;
use
OCA\DAV\HookManager
;
use
\
OCP\AppFramework\App
;
use
OCP\Contacts\IManager
;
use
OCP\IUser
;
use
Symfony\Component\EventDispatcher\GenericEvent
;
class
Application
extends
App
{
...
...
@@ -58,6 +59,16 @@ class Application extends App {
$hm
=
$this
->
getContainer
()
->
query
(
HookManager
::
class
);
$hm
->
setup
();
$dispatcher
=
$this
->
getContainer
()
->
getServer
()
->
getEventDispatcher
();
// first time login event setup
$dispatcher
->
addListener
(
IUser
::
class
.
'::firstLogin'
,
function
(
$event
)
use
(
$hm
)
{
if
(
$event
instanceof
GenericEvent
)
{
$hm
->
firstLogin
(
$event
->
getSubject
());
}
});
// carddav/caldav sync event setup
$listener
=
function
(
$event
)
{
if
(
$event
instanceof
GenericEvent
)
{
/** @var BirthdayService $b */
...
...
@@ -70,7 +81,6 @@ class Application extends App {
}
};
$dispatcher
=
$this
->
getContainer
()
->
getServer
()
->
getEventDispatcher
();
$dispatcher
->
addListener
(
'\OCA\DAV\CardDAV\CardDavBackend::createCard'
,
$listener
);
$dispatcher
->
addListener
(
'\OCA\DAV\CardDAV\CardDavBackend::updateCard'
,
$listener
);
$dispatcher
->
addListener
(
'\OCA\DAV\CardDAV\CardDavBackend::deleteCard'
,
function
(
$event
)
{
...
...
apps/dav/lib/HookManager.php
View file @
ccadd7fc
...
...
@@ -84,10 +84,6 @@ class HookManager {
'changeUser'
,
$this
,
'changeUser'
);
Util
::
connectHook
(
'OC_User'
,
'post_login'
,
$this
,
'postLogin'
);
}
public
function
postCreateUser
(
$params
)
{
...
...
@@ -123,8 +119,7 @@ class HookManager {
$this
->
syncService
->
updateUser
(
$user
);
}
public
function
postLogin
(
$params
)
{
$user
=
$this
->
userManager
->
get
(
$params
[
'uid'
]);
public
function
firstLogin
(
IUser
$user
=
null
)
{
if
(
!
is_null
(
$user
))
{
$principal
=
'principals/users/'
.
$user
->
getUID
();
$calendars
=
$this
->
calDav
->
getCalendarsForUser
(
$principal
);
...
...
apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php
View file @
ccadd7fc
...
...
@@ -86,6 +86,7 @@ class UploadTest extends RequestTest {
public
function
testUploadOverWriteWriteLocked
()
{
$user
=
$this
->
getUniqueID
();
$view
=
$this
->
setupUser
(
$user
,
'pass'
);
$this
->
loginAsUser
(
$user
);
$view
->
file_put_contents
(
'foo.txt'
,
'bar'
);
...
...
apps/dav/tests/unit/DAV/HookManagerTest.php
View file @
ccadd7fc
...
...
@@ -60,7 +60,6 @@ class HookManagerTest extends TestCase {
$userManager
=
$this
->
getMockBuilder
(
IUserManager
::
class
)
->
disableOriginalConstructor
()
->
getMock
();
$userManager
->
expects
(
$this
->
once
())
->
method
(
'get'
)
->
willReturn
(
$user
);
/** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $syncService */
$syncService
=
$this
->
getMockBuilder
(
SyncService
::
class
)
...
...
@@ -90,7 +89,7 @@ class HookManagerTest extends TestCase {
'contacts'
,
[
'{DAV:}displayname'
=>
$this
->
l10n
->
t
(
'Contacts'
)]);
$hm
=
new
HookManager
(
$userManager
,
$syncService
,
$cal
,
$card
,
$this
->
l10n
);
$hm
->
po
stLogin
(
[
'uid'
=>
'newU
ser
'
]
);
$hm
->
fir
stLogin
(
$u
ser
);
}
public
function
testWithExisting
()
{
...
...
@@ -103,7 +102,6 @@ class HookManagerTest extends TestCase {
$userManager
=
$this
->
getMockBuilder
(
IUserManager
::
class
)
->
disableOriginalConstructor
()
->
getMock
();
$userManager
->
expects
(
$this
->
once
())
->
method
(
'get'
)
->
willReturn
(
$user
);
/** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $syncService */
$syncService
=
$this
->
getMockBuilder
(
SyncService
::
class
)
...
...
@@ -129,7 +127,7 @@ class HookManagerTest extends TestCase {
$card
->
expects
(
$this
->
never
())
->
method
(
'createAddressBook'
);
$hm
=
new
HookManager
(
$userManager
,
$syncService
,
$cal
,
$card
,
$this
->
l10n
);
$hm
->
po
stLogin
(
[
'uid'
=>
'newU
ser
'
]
);
$hm
->
fir
stLogin
(
$u
ser
);
}
public
function
testWithBirthdayCalendar
()
{
...
...
@@ -142,7 +140,6 @@ class HookManagerTest extends TestCase {
$userManager
=
$this
->
getMockBuilder
(
IUserManager
::
class
)
->
disableOriginalConstructor
()
->
getMock
();
$userManager
->
expects
(
$this
->
once
())
->
method
(
'get'
)
->
willReturn
(
$user
);
/** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $syncService */
$syncService
=
$this
->
getMockBuilder
(
SyncService
::
class
)
...
...
@@ -174,7 +171,7 @@ class HookManagerTest extends TestCase {
'contacts'
,
[
'{DAV:}displayname'
=>
$this
->
l10n
->
t
(
'Contacts'
)]);
$hm
=
new
HookManager
(
$userManager
,
$syncService
,
$cal
,
$card
,
$this
->
l10n
);
$hm
->
po
stLogin
(
[
'uid'
=>
'newU
ser
'
]
);
$hm
->
fir
stLogin
(
$u
ser
);
}
public
function
testDeleteCalendar
()
{
...
...
apps/files/tests/Command/DeleteOrphanedFilesTest.php
View file @
ccadd7fc
...
...
@@ -23,8 +23,10 @@
namespace
OCA\Files\Tests\Command
;
use
OC\Files\View
;
use
OCA\Files\Command\DeleteOrphanedFiles
;
use
OCP\Files\StorageNotAvailableException
;
use
Test\TestCase
;
/**
* Class DeleteOrphanedFilesTest
...
...
@@ -33,7 +35,7 @@ use OCP\Files\StorageNotAvailableException;
*
* @package OCA\Files\Tests\Command
*/
class
DeleteOrphanedFilesTest
extends
\
Test\
TestCase
{
class
DeleteOrphanedFilesTest
extends
TestCase
{
/**
* @var DeleteOrphanedFiles
...
...
@@ -93,7 +95,7 @@ class DeleteOrphanedFilesTest extends \Test\TestCase {
$this
->
loginAsUser
(
$this
->
user1
);
$view
=
new
\
OC\Files\
View
(
'/'
.
$this
->
user1
.
'/'
);
$view
=
new
View
(
'/'
.
$this
->
user1
.
'/'
);
$view
->
mkdir
(
'files/test'
);
$fileInfo
=
$view
->
getFileInfo
(
'files/test'
);
...
...
@@ -114,7 +116,7 @@ class DeleteOrphanedFilesTest extends \Test\TestCase {
$output
->
expects
(
$this
->
once
())
->
method
(
'writeln'
)
->
with
(
'
4
orphaned file cache entries deleted'
);
->
with
(
'
3
orphaned file cache entries deleted'
);
$this
->
command
->
execute
(
$input
,
$output
);
...
...
lib/private/Files/Node/Root.php
View file @
ccadd7fc
...
...
@@ -349,7 +349,6 @@ class Root extends Folder implements IRootFolder {
$folder
=
$folder
->
get
(
$dir
);
}
catch
(
NotFoundException
$e
)
{
$folder
=
$folder
->
newFolder
(
$dir
);
\
OC_Util
::
copySkeleton
(
$userId
,
$folder
);
}
return
$folder
;
...
...
lib/private/Setup.php
View file @
ccadd7fc
...
...
@@ -366,15 +366,6 @@ class Setup {
$group
=
\
OC
::
$server
->
getGroupManager
()
->
createGroup
(
'admin'
);
$group
->
addUser
(
$user
);
// Create a session token for the newly created user
// The token provider requires a working db, so it's not injected on setup
/* @var $userSession User\Session */
$userSession
=
\
OC
::
$server
->
getUserSession
();
$defaultTokenProvider
=
\
OC
::
$server
->
query
(
'OC\Authentication\Token\DefaultTokenProvider'
);
$userSession
->
setTokenProvider
(
$defaultTokenProvider
);
$userSession
->
login
(
$username
,
$password
);
$userSession
->
createSessionToken
(
$request
,
$userSession
->
getUser
()
->
getUID
(),
$username
,
$password
);
//guess what this does
Installer
::
installShippedApps
();
...
...
@@ -395,6 +386,15 @@ class Setup {
//and we are done
$config
->
setSystemValue
(
'installed'
,
true
);
// Create a session token for the newly created user
// The token provider requires a working db, so it's not injected on setup
/* @var $userSession User\Session */
$userSession
=
\
OC
::
$server
->
getUserSession
();
$defaultTokenProvider
=
\
OC
::
$server
->
query
(
'OC\Authentication\Token\DefaultTokenProvider'
);
$userSession
->
setTokenProvider
(
$defaultTokenProvider
);
$userSession
->
login
(
$username
,
$password
);
$userSession
->
createSessionToken
(
$request
,
$userSession
->
getUser
()
->
getUID
(),
$username
,
$password
);
}
return
$error
;
...
...
lib/private/User/Manager.php
View file @
ccadd7fc
...
...
@@ -78,14 +78,6 @@ class Manager extends PublicEmitter implements IUserManager {
/** @var \OC\User\User $user */
unset
(
$cachedUsers
[
$user
->
getUID
()]);
});
$this
->
listen
(
'\OC\User'
,
'postLogin'
,
function
(
$user
)
{
/** @var \OC\User\User $user */
$user
->
updateLastLoginTimestamp
();
});
$this
->
listen
(
'\OC\User'
,
'postRememberedLogin'
,
function
(
$user
)
{
/** @var \OC\User\User $user */
$user
->
updateLastLoginTimestamp
();
});
}
/**
...
...
lib/private/User/Session.php
View file @
ccadd7fc
...
...
@@ -49,6 +49,7 @@ use OCP\IUserManager;
use
OCP\IUserSession
;
use
OCP\Session\Exceptions\SessionNotAvailableException
;
use
OCP\Util
;
use
Symfony\Component\EventDispatcher\GenericEvent
;
/**
* Class Session
...
...
@@ -371,15 +372,25 @@ class Session implements IUserSession, Emitter {
}
}
protected
function
prepareUserLogin
()
{
protected
function
prepareUserLogin
(
$firstTimeLogin
)
{
// TODO: mock/inject/use non-static
// Refresh the token
\
OC
::
$server
->
getCsrfTokenManager
()
->
refreshToken
();
//we need to pass the user name, which may differ from login name
$user
=
$this
->
getUser
()
->
getUID
();
OC_Util
::
setupFS
(
$user
);
//trigger creation of user home and /files folder
\
OC
::
$server
->
getUserFolder
(
$user
);
if
(
$firstTimeLogin
)
{
// TODO: lock necessary?
//trigger creation of user home and /files folder
$userFolder
=
\
OC
::
$server
->
getUserFolder
(
$user
);
// copy skeleton
\
OC_Util
::
copySkeleton
(
$user
,
$userFolder
);
// trigger any other initialization
\
OC
::
$server
->
getEventDispatcher
()
->
dispatch
(
IUser
::
class
.
'::firstLogin'
,
new
GenericEvent
(
$this
->
getUser
()));
}
}
/**
...
...
@@ -431,9 +442,10 @@ class Session implements IUserSession, Emitter {
if
(
$user
->
isEnabled
())
{
$this
->
setUser
(
$user
);
$this
->
setLoginName
(
$uid
);
$firstTimeLogin
=
$user
->
updateLastLoginTimestamp
();
$this
->
manager
->
emit
(
'\OC\User'
,
'postLogin'
,
[
$user
,
$password
]);
if
(
$this
->
isLoggedIn
())
{
$this
->
prepareUserLogin
();
$this
->
prepareUserLogin
(
$firstTimeLogin
);
return
true
;
}
else
{
// injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
...
...
@@ -688,6 +700,7 @@ class Session implements IUserSession, Emitter {
//login
$this
->
setUser
(
$user
);
$user
->
updateLastLoginTimestamp
();
$this
->
manager
->
emit
(
'\OC\User'
,
'postRememberedLogin'
,
[
$user
]);
return
true
;
}
...
...
lib/private/User/User.php
View file @
ccadd7fc
...
...
@@ -180,9 +180,12 @@ class User implements IUser {
* updates the timestamp of the most recent login of this user
*/
public
function
updateLastLoginTimestamp
()
{
$firstTimeLogin
=
(
$this
->
lastLogin
===
0
);
$this
->
lastLogin
=
time
();
\
OC
::
$server
->
getC
onfig
()
->
setUserValue
(
$this
->
c
onfig
->
setUserValue
(
$this
->
uid
,
'login'
,
'lastLogin'
,
$this
->
lastLogin
);
return
$firstTimeLogin
;
}
/**
...
...
tests/lib/TestCase.php
View file @
ccadd7fc
...
...
@@ -333,6 +333,10 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
self
::
logout
();
\
OC\Files\Filesystem
::
tearDown
();
\
OC_User
::
setUserId
(
$user
);
$userObject
=
\
OC
::
$server
->
getUserManager
()
->
get
(
$user
);
if
(
!
is_null
(
$userObject
))
{
$userObject
->
updateLastLoginTimestamp
();
}
\
OC_Util
::
setupFS
(
$user
);
if
(
\
OC_User
::
userExists
(
$user
))
{
\
OC
::
$server
->
getUserFolder
(
$user
);
...
...
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