Skip to content

Commit

Permalink
clean deleted accounts and projects
Browse files Browse the repository at this point in the history
  • Loading branch information
pmgl committed Apr 20, 2022
1 parent f98e162 commit 1cdc4c4
Show file tree
Hide file tree
Showing 10 changed files with 286 additions and 126 deletions.
43 changes: 43 additions & 0 deletions server/content/cleaner.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class @Cleaner
constructor:(@content)->
@start()

start:()->
@stop()
@users = Object.keys @content.users
@index = 0
@activity_limit = Date.now()-60*24*3600*1000
@deleted = 0
@deleted_projects = 0
@interval = setInterval (()=>@processOne()),1000

stop:()->
if @interval?
clearInterval @interval

deleteGuest:(user)->
console.info "Deleting guest user #{user.id} - #{user.nick} last active: "+new Date(user.last_active).toString()
if user? and user.flags.guest
user.delete()

processOne:()->
while @index < @users.length
userid = @users[@index++]
if userid?
user = @content.users[userid]
if user? and user.flags.guest
if user.last_active<@activity_limit
try
@deleted += 1
@deleted_projects += Object.keys(user.projects).length
@deleteGuest(user)
catch err
console.error err
break

if @index >= @users.length
@stop()
console.info "Deleted guests: "+@deleted
console.info "Deleted projects: "+@deleted_projects

module.exports = @Cleaner
66 changes: 66 additions & 0 deletions server/content/cleaner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
this.Cleaner = (function() {
function Cleaner(content) {
this.content = content;
this.start();
}

Cleaner.prototype.start = function() {
this.stop();
this.users = Object.keys(this.content.users);
this.index = 0;
this.activity_limit = Date.now() - 60 * 24 * 3600 * 1000;
this.deleted = 0;
this.deleted_projects = 0;
return this.interval = setInterval(((function(_this) {
return function() {
return _this.processOne();
};
})(this)), 1000);
};

Cleaner.prototype.stop = function() {
if (this.interval != null) {
return clearInterval(this.interval);
}
};

Cleaner.prototype.deleteGuest = function(user) {
console.info(("Deleting guest user " + user.id + " - " + user.nick + " last active: ") + new Date(user.last_active).toString());
if ((user != null) && user.flags.guest) {
return user["delete"]();
}
};

Cleaner.prototype.processOne = function() {
var err, user, userid;
while (this.index < this.users.length) {
userid = this.users[this.index++];
if (userid != null) {
user = this.content.users[userid];
if ((user != null) && user.flags.guest) {
if (user.last_active < this.activity_limit) {
try {
this.deleted += 1;
this.deleted_projects += Object.keys(user.projects).length;
this.deleteGuest(user);
} catch (error) {
err = error;
console.error(err);
}
break;
}
}
}
}
if (this.index >= this.users.length) {
this.stop();
console.info("Deleted guests: " + this.deleted);
return console.info("Deleted projects: " + this.deleted_projects);
}
};

return Cleaner;

})();

module.exports = this.Cleaner;
9 changes: 6 additions & 3 deletions server/content/content.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Tag = require __dirname+"/tag.js"
Token = require __dirname+"/token.js"
Translator = require __dirname+"/translator.js"
Forum = require __dirname+"/../forum/forum.js"
Cleaner = require __dirname+"/cleaner.js"

class @Content
constructor:(@server,@db,@files)->
Expand Down Expand Up @@ -34,13 +35,14 @@ class @Content

@translator = new Translator @
@forum = new Forum @
#@test_data = new TestData @

@cleaner = new Cleaner @

close:()->
clearInterval @top_interval
clearInterval @log_interval
@forum.close()
@test_data.close() if @test_data?
@cleaner.stop() if @cleaner?

statusLog:()->
usage process.pid,(err,result)=>
Expand Down Expand Up @@ -121,7 +123,8 @@ class @Content
loadToken:(record)->
data = record.get()
token = new Token @,record
@tokens[token.value] = token
if token.user?
@tokens[token.value] = token
token

initLikes:()->
Expand Down
13 changes: 9 additions & 4 deletions server/content/content.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var DEFAULT_CODE, Forum, Project, Tag, Token, Translator, User, usage;
var Cleaner, DEFAULT_CODE, Forum, Project, Tag, Token, Translator, User, usage;

usage = require("pidusage");

Expand All @@ -14,6 +14,8 @@ Translator = require(__dirname + "/translator.js");

Forum = require(__dirname + "/../forum/forum.js");

Cleaner = require(__dirname + "/cleaner.js");

this.Content = (function() {
function Content(server, db, files) {
this.server = server;
Expand Down Expand Up @@ -46,14 +48,15 @@ this.Content = (function() {
})(this)), 6000);
this.translator = new Translator(this);
this.forum = new Forum(this);
this.cleaner = new Cleaner(this);
}

Content.prototype.close = function() {
clearInterval(this.top_interval);
clearInterval(this.log_interval);
this.forum.close();
if (this.test_data != null) {
return this.test_data.close();
if (this.cleaner != null) {
return this.cleaner.stop();
}
};

Expand Down Expand Up @@ -162,7 +165,9 @@ this.Content = (function() {
var data, token;
data = record.get();
token = new Token(this, record);
this.tokens[token.value] = token;
if (token.user != null) {
this.tokens[token.value] = token;
}
return token;
};

Expand Down
87 changes: 46 additions & 41 deletions server/content/project.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -22,47 +22,53 @@ class ProjectLink
class @Project
constructor:(@content,@record)->
data = @record.get()
@id = data.id
@title = data.title
@slug = data.slug
@code = data.code or @createCode()
@tags = data.tags or []
@description = data.description or ""
@likes = 0
@public = data.public
@unlisted = data.unlisted
@date_created = data.date_created
@last_modified = data.last_modified
@first_published = data.first_published or 0
@orientation = data.orientation or "any"
@aspect = data.aspect or "free"
@graphics = data.graphics or "M1"
@language = data.language or "microscript_v2"
@platforms = data.platforms or ["computer","phone","tablet"]
@controls = data.controls or ["touch","mouse"]
@libs = data.libs or []
@tabs = data.tabs
@type = data.type or "app"
@deleted = data.deleted
@users = []
@comments = new Comments @,data.comments
if @deleted
if data.slug?
@record.set
deleted: true

if not @deleted
@owner = @content.users[data.owner]
if @owner?
@owner.addProject @

if data.users?
for u in data.users
link = new ProjectLink @,u
if link.user?
@users.push link

if data.files? and not @deleted
@files = data.files
else
@files = {}
@id = data.id
@title = data.title
@slug = data.slug
@code = data.code or @createCode()
@tags = data.tags or []
@description = data.description or ""
@likes = 0
@public = data.public
@unlisted = data.unlisted
@date_created = data.date_created
@last_modified = data.last_modified
@first_published = data.first_published or 0
@orientation = data.orientation or "any"
@aspect = data.aspect or "free"
@graphics = data.graphics or "M1"
@language = data.language or "microscript_v2"
@platforms = data.platforms or ["computer","phone","tablet"]
@controls = data.controls or ["touch","mouse"]
@libs = data.libs or []
@tabs = data.tabs
@type = data.type or "app"
@users = []
@comments = new Comments @,data.comments
if not @deleted
@owner = @content.users[data.owner]
if @owner?
@owner.addProject @

if data.users?
for u in data.users
link = new ProjectLink @,u
if link.user?
@users.push link

if data.files? and not @deleted
@files = data.files
else
@files = {}

@update_project_size = true
@update_project_size = true

createCode:()->
letters = "ABCDEFGHJKMNPRSTUVWXYZ23456789"
Expand Down Expand Up @@ -155,9 +161,8 @@ class @Project

delete:()->
@deleted = true
data = @record.get()
data.deleted = @deleted
@record.set data
@record.set
deleted: true
@content.projectDeleted @
for i in [@users.length-1..0] by -1
link = @users[i]
Expand Down
Loading

0 comments on commit 1cdc4c4

Please sign in to comment.