diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2018-04-14 12:41:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-14 12:41:08 +0200 |
commit | 78ed4ab75ff77d7cba60d478aa1f45d1c104785d (patch) | |
tree | 0aeea69a41847df51ef1f2ef530b3810f460a601 /app/models | |
parent | 85ab30abf7f8da61d37e4711cba350877bfb6f2b (diff) |
Add bio fields (#6645)
* Add bio fields - Fix #3211 - Fix #232 - Fix #121 * Display bio fields in web UI * Fix output of links and missing fields * Federate bio fields over ActivityPub as PropertyValue * Improve how the fields are stored, add to Edit profile form * Add rel=me to links in fields Fix #121
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index 5bdcfa99e..05e817f63 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -44,6 +44,7 @@ # memorial :boolean default(FALSE), not null # moved_to_account_id :integer # featured_collection_url :string +# fields :jsonb # class Account < ApplicationRecord @@ -189,6 +190,30 @@ class Account < ApplicationRecord @keypair ||= OpenSSL::PKey::RSA.new(private_key || public_key) end + def fields + (self[:fields] || []).map { |f| Field.new(self, f) } + end + + def fields_attributes=(attributes) + fields = [] + + attributes.each_value do |attr| + next if attr[:name].blank? + fields << attr + end + + self[:fields] = fields + end + + def build_fields + return if fields.size >= 4 + + raw_fields = self[:fields] || [] + add_fields = 4 - raw_fields.size + add_fields.times { raw_fields << { name: '', value: '' } } + self.fields = raw_fields + end + def magic_key modulus, exponent = [keypair.public_key.n, keypair.public_key.e].map do |component| result = [] @@ -238,6 +263,17 @@ class Account < ApplicationRecord shared_inbox_url.presence || inbox_url end + class Field < ActiveModelSerializers::Model + attributes :name, :value, :account, :errors + + def initialize(account, attr) + @account = account + @name = attr['name'] + @value = attr['value'] + @errors = {} + end + end + class << self def readonly_attributes super - %w(statuses_count following_count followers_count) |