Added patreon tier refresh button, autorefresh tier on login daily

This commit is contained in:
Stefan Zermatten
2020-09-09 13:55:21 +02:00
parent a5c16ba83a
commit dedab7b046
9 changed files with 374 additions and 72 deletions

View File

@@ -1,5 +1,4 @@
import request from 'request';
if (!Meteor.isServer) throw 'Server only, do not import this code in the client';
const config = ServiceConfiguration.configurations.findOne({service: 'patreon'});
@@ -85,7 +84,7 @@ const updatePatreonDetails = function(user){
throw new Meteor.Error('no-patreon-access', 'Patreon access token not found for this user');
}
let accessToken = user.services.patreon.accessToken;
if (user.services.patreon.tokenExpiryDate < new Date()){
if (user.services.patreon.expiresAt < new Date()){
// Token expired, refresh it before continuing
accessToken = refreshAccessToken(user.services.patreon.refreshToken, user._id);
}
@@ -96,7 +95,7 @@ Meteor.methods({
updateMyPatreonDetails(){
const userId = this.userId;
if (!userId) throw new Meteor.Error('not-logged-in', 'You must be logged in to update Patreon details');
const user = Meteor.users.findOne(userId, {fields: {patreon: 1}});
const user = Meteor.users.findOne(userId, {fields: {services: 1}});
updatePatreonDetails(user);
},
});
@@ -115,7 +114,7 @@ const writePatreonToken = function(userId, {
$set: {
'patreon.accessToken': access_token,
'patreon.refreshToken': refresh_token,
'patreon.tokenExpiryDate': expiryDate,
'patreon.expiresAt': expiryDate,
},
$unset: {
'patreon.error': 1,
@@ -127,6 +126,7 @@ const writeEntitledCents = function(userId, amount){
Meteor.users.update(userId, {
$set: {
'services.patreon.entitledCents': amount,
'services.patreon.lastUpdatedIdentity': new Date(),
},
$unset: {
'patreon.error': 1,
@@ -134,4 +134,4 @@ const writeEntitledCents = function(userId, amount){
});
};
export { updatePatreonDetails };
export default updatePatreonDetails;

View File

@@ -0,0 +1,12 @@
import updatePatreonDetails from '/imports/api/users/patreon/updatePatreonDetails.js';
const ONE_DAY = 24 * 60 * 60 * 1000;
Accounts.onLogin(({user}) => {
let patreon = user.services && user.services.patreon;
if (patreon){
const timeSinceIdentityUpdate = new Date() - patreon.lastUpdatedIdentity;
if (timeSinceIdentityUpdate > ONE_DAY){
updatePatreonDetails(user);
}
}
});