Skip to content

Commit

Permalink
Add AUTO_GREYLIST_OVERRIDE to project status
Browse files Browse the repository at this point in the history
This allows the automatic greylist to be overridden for a project
if for some reason it is not functioning correctly.
  • Loading branch information
jamescowens committed Jan 19, 2025
1 parent 3783458 commit cf9fb42
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 24 deletions.
1 change: 1 addition & 0 deletions src/gridcoin/fwd.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ enum class ProjectEntryStatus
ACTIVE,
MAN_GREYLISTED,
AUTO_GREYLISTED,
AUTO_GREYLIST_OVERRIDE,
OUT_OF_BOUND
};
} // namespace GRC
Expand Down
50 changes: 35 additions & 15 deletions src/gridcoin/project.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,24 +109,26 @@ std::string ProjectEntry::StatusToString(const ProjectEntryStatus& status, const
{
if (translated) {
switch(status) {
case ProjectEntryStatus::UNKNOWN: return _("Unknown");
case ProjectEntryStatus::DELETED: return _("Deleted");
case ProjectEntryStatus::MAN_GREYLISTED: return _("Manually Greylisted");
case ProjectEntryStatus::AUTO_GREYLISTED: return _("Automatically Greylisted");
case ProjectEntryStatus::ACTIVE: return _("Active");
case ProjectEntryStatus::OUT_OF_BOUND: break;
case ProjectEntryStatus::UNKNOWN: return _("Unknown");
case ProjectEntryStatus::DELETED: return _("Deleted");
case ProjectEntryStatus::MAN_GREYLISTED: return _("Manually Greylisted");
case ProjectEntryStatus::AUTO_GREYLISTED: return _("Automatically Greylisted");
case ProjectEntryStatus::ACTIVE: return _("Active");
case ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE: return _("Active by Greylist Override");
case ProjectEntryStatus::OUT_OF_BOUND: break;
}

assert(false); // Suppress warning
} else {
// The untranslated versions are really meant to serve as the string equivalent of the enum values.
switch(status) {
case ProjectEntryStatus::UNKNOWN: return "Unknown";
case ProjectEntryStatus::DELETED: return "Deleted";
case ProjectEntryStatus::MAN_GREYLISTED: return "Manually Greylisted";
case ProjectEntryStatus::AUTO_GREYLISTED: return "Automatically Greylisted";
case ProjectEntryStatus::ACTIVE: return "Active";
case ProjectEntryStatus::OUT_OF_BOUND: break;
case ProjectEntryStatus::UNKNOWN: return "Unknown";
case ProjectEntryStatus::DELETED: return "Deleted";
case ProjectEntryStatus::MAN_GREYLISTED: return "Manually Greylisted";
case ProjectEntryStatus::AUTO_GREYLISTED: return "Automatically Greylisted";
case ProjectEntryStatus::ACTIVE: return "Active";
case ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE: return "Active by Greylist Override";
case ProjectEntryStatus::OUT_OF_BOUND: break;
}

assert(false); // Suppress warning
Expand Down Expand Up @@ -604,18 +606,27 @@ WhitelistSnapshot Whitelist::Snapshot(const ProjectEntry::ProjectFilterFlag& fil

bool in_greylist = greylist_ptr->Contains(iter.first);

if ((iter.second->m_status == ProjectEntryStatus::ACTIVE || iter.second->m_status == ProjectEntryStatus::MAN_GREYLISTED)
// If the project does NOT have a status of auto greylist override, and it is either active or already manually
// greylisted, then if it is in the greylist, mark with the status auto greylisted.
if (!(iter.second->m_status == ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE)
&& (iter.second->m_status == ProjectEntryStatus::ACTIVE || iter.second->m_status == ProjectEntryStatus::MAN_GREYLISTED)
&& in_greylist) {
iter.second->m_status = ProjectEntryStatus::AUTO_GREYLISTED;
}
}

switch (filter) {
case ProjectEntry::ProjectFilterFlag::ACTIVE:
case ProjectEntry::ProjectFilterFlag::REG_ACTIVE:
if (iter.second->m_status == ProjectEntryStatus::ACTIVE) {
projects.push_back(*iter.second);
}
break;
case ProjectEntry::ProjectFilterFlag::ACTIVE:
if (iter.second->m_status == ProjectEntryStatus::ACTIVE
|| iter.second->m_status == ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE) {
projects.push_back(*iter.second);
}
break;
case ProjectEntry::ProjectFilterFlag::MAN_GREYLISTED:
if (iter.second->m_status == ProjectEntryStatus::MAN_GREYLISTED) {
projects.push_back(*iter.second);
Expand All @@ -626,6 +637,11 @@ WhitelistSnapshot Whitelist::Snapshot(const ProjectEntry::ProjectFilterFlag& fil
projects.push_back(*iter.second);
}
break;
case ProjectEntry::ProjectFilterFlag::AUTO_GREYLIST_OVERRIDE:
if (iter.second->m_status == ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE) {
projects.push_back(*iter.second);
}
break;
case ProjectEntry::ProjectFilterFlag::GREYLISTED:
if (iter.second->m_status == ProjectEntryStatus::MAN_GREYLISTED
|| iter.second->m_status == ProjectEntryStatus::AUTO_GREYLISTED) {
Expand All @@ -647,7 +663,8 @@ WhitelistSnapshot Whitelist::Snapshot(const ProjectEntry::ProjectFilterFlag& fil
case ProjectEntry::ProjectFilterFlag::ALL_BUT_DELETED:
if (iter.second->m_status == ProjectEntryStatus::ACTIVE
|| iter.second->m_status == ProjectEntryStatus::MAN_GREYLISTED
|| iter.second->m_status == ProjectEntryStatus::AUTO_GREYLISTED) {
|| iter.second->m_status == ProjectEntryStatus::AUTO_GREYLISTED
|| iter.second->m_status == ProjectEntryStatus::AUTO_GREYLIST_OVERRIDE) {
projects.push_back(*iter.second);
}
break;
Expand All @@ -671,6 +688,9 @@ void Whitelist::Reset()
m_expired_project_entries.clear();
m_project_first_actives.clear();
m_project_db.clear();

// If the whitelist registry is reset, the auto greylist cache should be reset as well.
AutoGreylist::GetAutoGreylistCache()->Reset();
}

void Whitelist::AddDelete(const ContractContext& ctx)
Expand Down
20 changes: 11 additions & 9 deletions src/gridcoin/project.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,17 @@ class ProjectEntry
//! This controls what project entries by status are in the project whitelist snapshot.
//!
enum ProjectFilterFlag : uint8_t {
NONE = 0b0000,
DELETED = 0b0001,
MAN_GREYLISTED = 0b0010,
AUTO_GREYLISTED = 0b0100,
GREYLISTED = MAN_GREYLISTED | AUTO_GREYLISTED,
ACTIVE = 0b1000,
NOT_ACTIVE = 0b0111,
ALL_BUT_DELETED = 0b1110,
ALL = 0b1111
NONE = 0b00000,
DELETED = 0b00001,
MAN_GREYLISTED = 0b00010,
AUTO_GREYLISTED = 0b00100,
GREYLISTED = MAN_GREYLISTED | AUTO_GREYLISTED,
REG_ACTIVE = 0b01000,
AUTO_GREYLIST_OVERRIDE = 0b10000,
ACTIVE = REG_ACTIVE | AUTO_GREYLIST_OVERRIDE,
NOT_ACTIVE = 0b00111,
ALL_BUT_DELETED = 0b11110,
ALL = 0b11111
};

//!
Expand Down

0 comments on commit cf9fb42

Please sign in to comment.