diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b4ff532..e1db189 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_04_03_124644) do +ActiveRecord::Schema[7.0].define(version: 2022_04_05_200937) do create_table "authorities", force: :cascade do |t| t.string "name" t.string "signature" end + create_table "statuses", force: :cascade do |t| + t.string "text" + t.integer "lifetime" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_statuses_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "uuid" t.string "username" diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b4ff532..e1db189 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_04_03_124644) do +ActiveRecord::Schema[7.0].define(version: 2022_04_05_200937) do create_table "authorities", force: :cascade do |t| t.string "name" t.string "signature" end + create_table "statuses", force: :cascade do |t| + t.string "text" + t.integer "lifetime" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_statuses_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "uuid" t.string "username" diff --git a/test/fixtures/statuses.yml b/test/fixtures/statuses.yml new file mode 100644 index 0000000..1324f7a --- /dev/null +++ b/test/fixtures/statuses.yml @@ -0,0 +1,11 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 + +two: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b4ff532..e1db189 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_04_03_124644) do +ActiveRecord::Schema[7.0].define(version: 2022_04_05_200937) do create_table "authorities", force: :cascade do |t| t.string "name" t.string "signature" end + create_table "statuses", force: :cascade do |t| + t.string "text" + t.integer "lifetime" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_statuses_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "uuid" t.string "username" diff --git a/test/fixtures/statuses.yml b/test/fixtures/statuses.yml new file mode 100644 index 0000000..1324f7a --- /dev/null +++ b/test/fixtures/statuses.yml @@ -0,0 +1,11 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 + +two: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 diff --git a/test/fixtures/texts.yml b/test/fixtures/texts.yml new file mode 100644 index 0000000..1dbf52d --- /dev/null +++ b/test/fixtures/texts.yml @@ -0,0 +1,9 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + lifetime: 1 + postTime: 2022-04-05 22:08:54 + +two: + lifetime: 1 + postTime: 2022-04-05 22:08:54 diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b4ff532..e1db189 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_04_03_124644) do +ActiveRecord::Schema[7.0].define(version: 2022_04_05_200937) do create_table "authorities", force: :cascade do |t| t.string "name" t.string "signature" end + create_table "statuses", force: :cascade do |t| + t.string "text" + t.integer "lifetime" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_statuses_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "uuid" t.string "username" diff --git a/test/fixtures/statuses.yml b/test/fixtures/statuses.yml new file mode 100644 index 0000000..1324f7a --- /dev/null +++ b/test/fixtures/statuses.yml @@ -0,0 +1,11 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 + +two: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 diff --git a/test/fixtures/texts.yml b/test/fixtures/texts.yml new file mode 100644 index 0000000..1dbf52d --- /dev/null +++ b/test/fixtures/texts.yml @@ -0,0 +1,9 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + lifetime: 1 + postTime: 2022-04-05 22:08:54 + +two: + lifetime: 1 + postTime: 2022-04-05 22:08:54 diff --git a/test/models/status_test.rb b/test/models/status_test.rb new file mode 100644 index 0000000..6065280 --- /dev/null +++ b/test/models/status_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class StatusTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 1cbd27c..0178383 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -9,27 +9,15 @@ return @data end - def getUsername - return digParameter('username') - end - - def getPasswordHash - return digParameter('passwordHash') - end - - def getToken - return digParameter('token') - end - def getUser - return nil if !@username = getUsername + return nil if !@username = digParameter('username') @user = User.where(["username = ?", params[:username]]).first renderError if !@user return @user end def isUserPasswordCorrect(user) - return if !@passwordHash = getPasswordHash + return if !@passwordHash = digParameter('passwordHash') @correct = user.passwordHash == Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) renderError if !@correct return @correct @@ -70,18 +58,44 @@ def checkToken return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) render :json => { 'success' => true, 'valid' => true } end def changePassword return if !@user = getUser - return if !@token = getToken + return if !@token = digParameter('token') return if !isTokenValid(@token, @user) return if !@passwordHash = digParameter('passwordHash') @user.passwordHash = Digest::SHA256.hexdigest(@passwordHash + @user.secretSalt) @user.save() render :json => { 'success' => true } end + + def status + @userStatuses = Array.new + Status.all.each do |status| + if status.created_at.to_i + status.lifetime < Time.now.to_i + status.destroy + next + end + @userStatuses.push({ 'user' => status.user.username, 'message' => status.text }) + end + render :json => { 'success' => true, 'userStatuses' => @userStatuses } + end + + def postStatus + return if !@user = getUser + return if !@token = digParameter('token') + return if !isTokenValid(@token, @user) + return if !@message = digParameter('status') + return if !@lifetime = digParameter('lifetime') + if @lifetime > 24 * 3600 + renderError + return + end + @user.statuses.create(text: @message, lifetime: @lifetime) + render :json => { 'success' => true } + end end diff --git a/app/models/status.rb b/app/models/status.rb new file mode 100644 index 0000000..2945919 --- /dev/null +++ b/app/models/status.rb @@ -0,0 +1,3 @@ +class Status < ApplicationRecord + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a..c213176 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ApplicationRecord + has_many :statuses, dependent: :destroy end diff --git a/config/routes.rb b/config/routes.rb index 9631e44..c188282 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,4 +4,6 @@ post @root+'users/presalt' post @root+'users/checkToken' post @root+'users/changePassword' + post @root+'users/postStatus' + get @root+'users/status', to: 'api/users#status' end diff --git a/db/migrate/20220405200937_create_statuses.rb b/db/migrate/20220405200937_create_statuses.rb new file mode 100644 index 0000000..2a70246 --- /dev/null +++ b/db/migrate/20220405200937_create_statuses.rb @@ -0,0 +1,10 @@ +class CreateStatuses < ActiveRecord::Migration[7.0] + def change + create_table :statuses do |t| + t.string :text + t.integer :lifetime + t.belongs_to :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b4ff532..e1db189 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_04_03_124644) do +ActiveRecord::Schema[7.0].define(version: 2022_04_05_200937) do create_table "authorities", force: :cascade do |t| t.string "name" t.string "signature" end + create_table "statuses", force: :cascade do |t| + t.string "text" + t.integer "lifetime" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_statuses_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "uuid" t.string "username" diff --git a/test/fixtures/statuses.yml b/test/fixtures/statuses.yml new file mode 100644 index 0000000..1324f7a --- /dev/null +++ b/test/fixtures/statuses.yml @@ -0,0 +1,11 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 + +two: + text: MyString + lifetime: 1 + postTime: 2022-04-05 22:09:37 diff --git a/test/fixtures/texts.yml b/test/fixtures/texts.yml new file mode 100644 index 0000000..1dbf52d --- /dev/null +++ b/test/fixtures/texts.yml @@ -0,0 +1,9 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + lifetime: 1 + postTime: 2022-04-05 22:08:54 + +two: + lifetime: 1 + postTime: 2022-04-05 22:08:54 diff --git a/test/models/status_test.rb b/test/models/status_test.rb new file mode 100644 index 0000000..6065280 --- /dev/null +++ b/test/models/status_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class StatusTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/models/text_test.rb b/test/models/text_test.rb new file mode 100644 index 0000000..66d9508 --- /dev/null +++ b/test/models/text_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class TextTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end