Code Monkey home page Code Monkey logo

1dv450-registration's Introduction

För att använda POSTMAN

Postman-collection
Du behöver sätta några miljövariabler

  1. Authentication: Bearer din_jwt_token_du_får_från_api
  2. Api-Key: 52c1aefb58a0afe043f6121e94e2c3cd
  3. Accept: application/vnd.registration-1dv450.v1
  4. Content-Type: application/json

Hur man använder API:t

  1. Registrera dig som användare i registrerings-applikationen och generera en API-nyckel för din applikation
  2. Skicka en förfrågan till https://registration-1dv450.herokuapp.com/knock/auth_token med request-body som ser ut såhär
{
  "auth": {
    "email": "[email protected]",
    "password": "testcreatorpassword"
    }
}

för att få en jwt-token.
Du får då en response som ser ut såhär:

{
  "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NjA1NzM1MDEsImF1ZCI6ZmFsc2UsInN1YiI6MX0.IXR4i8kr1oDm2k6RLtwf6VYWacWQILS8gI2dlE0OuSA"
}
  1. För att läsa från API:t behöver man skicka med Api-Key som header
Api-Key: your_api_key

För att kunna skapa och uppdatera resurser behövs även en JWT-token skickas med

Authorization: Bearer your_jwt_token

API-dokumentation

Pubar

Hämta en specifik pub - GET - https://registration-1dv450.herokuapp.com/api/pubs/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/pubs/1

Hämta alla pubar - GET - https://registration-1dv450.herokuapp.com/api/pubs
Exempel (med offset och limit-params):
https://registration-1dv450.herokuapp.com/api/pubs?offset=1&limit=3

Hämta alla pubar som startar med angiven sträng - GET - https://registration-1dv450.herokuapp.com/api/pubs?starts_with=search_query
Exepel:
https://registration-1dv450.herokuapp.com/api/pubs?starts_with=Sve

Hämta alla pubar nära en adress - GET - https://registration-1dv450.herokuapp.com/api/pubs?near_address=your_adress
Exempel:
https://registration-1dv450.herokuapp.com/api/pubs?near_address=Skräddaretorpsvägen

Hämta alla pubar nära latitud och longitud - GET - https://registration-1dv450.herokuapp.com/api/pubs?lat=XX&lng=XX
Exempel:
https://registration-1dv450.herokuapp.com/api/pubs?lat=56&lng=16

Hämta alla pubar kopplad till en specifik tag - GET - https://registration-1dv450.herokuapp.com/api/tags/:id/pubs
Exempel:
https://registration-1dv450.herokuapp.com/api/tags/1/pubs

Hämta alla pubar kopplad till en specifik creator - GET - https://registration-1dv450.herokuapp.com/api/creators/:id/pubs
Exempel:
https://registration-1dv450.herokuapp.com/api/creators/1/pubs

Skapa en pub - POST - https://registration-1dv450.herokuapp.com/api/pubs
Exempel:

{
    "pub": {
        "name": "Production test pub",
        "phone_number": "0789426349",  
        "description": "En skön pub, jag testar i produktion yolo",
        "position": {
            "address": "Storgatan 17, Sandviken"
        },
        "tags": [
            { "name": "Skönt!" },
            { "name": "Fint!" }
        ]
    }
}

Required params: name, phone_number, description, position

Uppdatera en pub - PUT - https://registration-1dv450.herokuapp.com/api/pubs/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/pubs/1

{
  "pub": {
      "name": "Puben som är uppdaterad hihi!"
  }
}

Ta bort en pub - DELTE - https://registration-1dv450.herokuapp.com/api/pubs/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/pubs/1

Positions

Hämta alla positioner - GET - https://registration-1dv450.herokuapp.com/api/positions

Hämta specifik position - GET - https://registration-1dv450.herokuapp.com/api/positions/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/positions/1

Tags

Hämta alla tags - GET - https://registration-1dv450.herokuapp.com/api/tags/

Hämta specifik tag - GET - https://registration-1dv450.herokuapp.com/api/tags/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/tags/1/

Creators

Hämta alla creators - GET - https://registration-1dv450.herokuapp.com/api/creators

Hämta specifik creator - GET - https://registration-1dv450.herokuapp.com/api/creators/:id
Exempel:
https://registration-1dv450.herokuapp.com/api/creators/1

Registrerings-applikation

Ruby version

  • Ruby 2.1.5
  • Rails 4.2.5

För att köra appen

git clone https://github.com/ad222kr/1dv450-registration.git
bundle install --without production
rake db:setup
rails s

Applikationen hittas nu på localhost:3000

Test-data

email Lösenord
[email protected] adminpassword
[email protected] testuserpassword
[email protected] testuser2password

1dv450-registration's People

Watchers

James Cloos avatar

1dv450-registration's Issues

Logout security

Jag klistra direkt in en issue från min egna peer review som jag fick av Singh, då du lider av samma säkerhets brist

Ett säkerhetshål i applikation som jag fick reda från min peer-review. När man varit inloggad och loggar ut och trycker på tillbaka knappen så visas sidan man tidigare var inne på. T.ex att användaren har domän sida framme (med API nycklar), loggar ut och sen lämnar datorn utan att lämna sidan eller stänga webbläsaren så kan en annan person komma åt informationen på den sidan, bara genom att testa att klicka på backa knappen.

Lösningen som jag har att erbjuda delades med mig av mv222fp/Marco30.
Det hindra cachning genom att lägga till följande i ApplicationController och lägga till data: {no_turbolink: true} i logout länken.

Länken i app/views/layouts/_header.html.erb

<%= link_to "Log out", logout_path, data: {no_turbolink: true}, class: "nav-link-right" %>
app/controllers/application_controller.rb

before_action :no_cache

def no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 09 Jan 2004 00:00:00 GMT"
end

JWT issue #6

JWT har nyligen blivit updaterat till 1.5.4 och JWT 1.5.3 har blivit yankat kan vara det som orsakar POST-felen.

JWT issue cont #7

PUT, POST, DELETE funkar ej, allt som kräver JWT-token funkar ej och get 401, som sagt innan tror jag felet ligger i JWT och inte skaparen(ad222kr) en bundle update jwt eller på något sätt updatera den yankade versionen av JWT borde lösa det.

https://rubygems.org/gems/jwt/versions/1.5.3

Förändra apps struktur

Den här är en alternativ förändring som kommer göra dina url tillhörande apps kortare och snyggare samt minimering av kod

I routes ändra

  resources :users do
    resources :apps
  end

till

    resources :apps, only: [:new, :create, :destroy]
    resources :users, except: [:index, :destroy]

I UserController ändra rad 13 till

@apps = @user

I views/users/show.html.erb ta bort från rad 30 och neråt.
Ersätt med

      <% if @user.admin?
           args = @apps
         else
           args = @apps.apps
         end %>


      <% args.each do |app| %>
          <tr>
            <td><%= app.name %></td>
            <td><%= app.api_key %></td>
            <td><%= app.user.name %></td>
            <td><%= link_to "Remove application", app,
                            method: :delete,
                            data: {confirm: "Are you sure you want to remove this app?"} %></td>
          </tr>

      <% end %>
    </table>

  </div>
</div>

<div class="row">
  <div class="col-mod-4 text-center">
    <%= link_to "Register application", new_app_path, class: "btn btn-primary btn-lg" %>
  </div>
</div>

Nu kan user objektet tas bort i AppsController (se länk)
https://github.com/rn222cx/1dv450-registration/blob/master/app/controllers/apps_controller.rb#L11

Samt i tillhörande vyi rad 4

<%= form_for [@user, @app] do |f| %>

till

<%= form_for(@app) do |f| %>

Peer-Review-1 sumering

Det var inga problem att få igång applikationen samt köra seeds filen. Det är snålt med kommentarer men jag hade inga problem med att förstå koden för det. Koden var talande med bra namngivningar.
Bra uppdelning av koden vad det gäller vyer och kontroller.

Det negativa finns ju såklart i issues.

Jag har inte granskat någon html eller css kod som säkerligen förmodar.

Mvh

Roy

GET #4

Alla GET funkar, borde skriva i API-Doc att search_queary är Case-sensative även adress sökning, annars fint fint

Postman collection issue. #1

När man klickar på Postman länken så öppnas det inte i postman, utan man får en readme. Går att läsa endå men svårare.

Validera på klienten

För att validera inloggningen på klientsidan kan required: true läggas till i innlogningsformuläret.

      <%= f.label :email %>
      <%= f.email_field :email, required: true %>

      <%= f.label :password %>
      <%= f.password_field :password, required: true %>

JWT issue cont #8

Filter chain halted as :authenticate rendered or redirected

Efter mycket testande så löser bundle install jwt inte felet utan meningen ovan är vad som orsakar det.
Har ingen lösning på det än. Men det gör så att jag inte kan testa POST, PUT, DELETE

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.