diff --git a/src/app/User.php b/src/app/User.php --- a/src/app/User.php +++ b/src/app/User.php @@ -628,31 +628,21 @@ */ public function setStatusAttribute($status) { - $new_status = 0; - - $allowed_values = [ - self::STATUS_NEW, - self::STATUS_ACTIVE, - self::STATUS_SUSPENDED, - self::STATUS_DELETED, - self::STATUS_LDAP_READY, - self::STATUS_IMAP_READY, - self::STATUS_DEGRADED, - self::STATUS_RESTRICTED, - ]; - - foreach ($allowed_values as $value) { - if ($status & $value) { - $new_status |= $value; - $status ^= $value; - } - } - - if ($status > 0) { + $bitmask = self::STATUS_NEW | + self::STATUS_ACTIVE | + self::STATUS_SUSPENDED | + self::STATUS_DELETED | + self::STATUS_LDAP_READY | + self::STATUS_IMAP_READY | + self::STATUS_DEGRADED | + self::STATUS_RESTRICTED; + + //Detect invalid flags + if ($status & ~$bitmask) { throw new \Exception("Invalid user status: {$status}"); } - $this->attributes['status'] = $new_status; + $this->attributes['status'] = $status & $bitmask; } /**