A Sails application!
##Demo
A demo of the app is running at http://82.196.15.113:1337/.
To log in as admin, use the following user credentials:
username: [email protected]
password: admin
To log in as a user, use the following user credentials:
username: [email protected]
password: useruser
##To set up development server:
- make sure you have [node.js] (https://nodejs.org/en/) installed
- make sure you have mongodb installed
- install [sails.js] (http://sailsjs.org/get-started) with npm
- clone or fork this repo
- run npm install to install dependencies
- start mongodb in your terminal using
mongod
- run
sails lift
to start development server - Navigate to localhost:1337/apikey
#Lab 2: Follow the instructions above to set up development-server, or use the running application at http://82.196.15.113:1337.
##API-key To recieve an api-key, sign up as a user at localhost:1337/apikey and register an application. An api-key is then generated and can be used when making requests to the api. Alternetively, use the demo-application:
username: [email protected]
password: useruser
apikey: IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG
##Auth
To create, update and delete a cafe, you need to authorise yourself. Do this through adding your user-credentials as base64-encoded authorisation-header:
Authorization: 'Basic email:password(base64-encoded)
You can encode your user-credentials by typing atob(email:password)
in the browser-console. The output is the Base64-encoded string you should use.
If using the demo-app, use the header below:
Authorization: 'Basic dXNlcjFAdXNlci5zZTp1c2VydXNlcg=='
##Queries Queries can be made either as free-text-search, geographical-search, with tags or through a combination of two or more search parameters.
###Freetext-search:
make a get to /cafeinfo
with param search=searchWord
and APIKey=(apikey)
example of free-text search to in demo-app:
http://82.196.15.113:1337/cafeinfo?APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&search=hugos
###Geographical-search
make a get to /cafeinfo
with params latitude=(latitude of choice)
, longitude=(longitude of choice)
and APIKey=(apikey)
.
IF you want to specify a maximum distance, this may be done through sending the parameter maxDistance=(maxdistance in meter)
. If omitted, the distance 500 meters is set by default.
example of geographical search using demo-app:
http://82.196.15.113:1337/cafeinfo?latitude=59.8586&longitude=17.6389&APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&maxDistance=1000
###Search per tag
By adding tags and a search-param, the result can be filtered through the different tag-values.
make a get to /cafeinfo
with param APIKey=(apikey)
and one or more of the following:
name=
,streetAddress=
, postalCode=
, createdBy=
, electricity=
(Value must be one of: 'everywhere', 'plenty', 'some' or 'nowhere') ,wifi=
(value has must be one of: 'free', 'paid' or 'no').
example of request using demo-app:
###Combined search
All above search-params may be combined as the user wish to make a detailed search in the database. http://82.196.15.113:1337/cafeinfo?APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&name=Hugos Kaffe
An example of combined search using demo-app:
http://82.196.15.113:1337/cafeinfo?latitude=59.8586&longitude=17.6389&APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&maxDistance=1000&name=Waynes Coffee StPer
###Get one specific cafe
Make a get to /cafeinfo/:id
to get a specific cafe.
example of request using demo-app:
###Create a new cafe
post to http://82.196.15.113:1337/cafeinfo/5707fe77f91e708e196fc331
/cafeinfo
with the all of the following parameters:
- name
- streetAddress
- postalCode
- city
- latitude
- longitude
- electricity (value must be one of 'everywhere', 'plenty', 'some' or 'nowhere')
- wifi (value has must be one of: 'free', 'paid' or 'no')
- APIKey
Make sure to add a valid Authorization-header to add the cafe.
Example of request using demo-app:
Post:
###Update a cafe
make a post to http://82.196.15.113:1337/cafeinfo?APIKey= IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&name=Cafe del flore&streetAddress=172, BOULEVARD SAINT-GERMAIN &postalCode=75006 &city=Paris&latitude=48.852329924&longitude= 2.326165362&electricity=plenty&wifi=free
Header: Authorization: 'Basic dXNlcjFAdXNlci5zZTp1c2VydXNlcg=='
/cafeinfo
with the parameters you want to update as well as an id of a cafe you have created (you can only change the cafes added by the user you are sending user-credentials for).
Example of request using demo-app:
Post:
###Delete a cafe
make a delete to http://82.196.15.113:1337/cafeinfo?APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG&wifi=no&id=5707ff3af91e708e196fc332&name=Ninas fik
Header: Authorization: 'Basic dXNlcjFAdXNlci5zZTp1c2VydXNlcg=='
/cafeinfo
with an id of a cafe you have created
Example of request using demo-app:
Delete:http://82.196.15.113:1337/cafeinfo/570648aa0d341c43068a74dd?APIKey=IYpkp6UBo7zHCUBdql2owk2ZPLs7OBEG
Header: Authorization: 'Basic dXNlcjFAdXNlci5zZTp1c2VydXNlcg=='
###Postman-collection A postman-collection with all available requests can be found here.
#Creating an api-key
Navigate to localhost:1337/apikey or http://82.196.15.113:1337/apikey if using demo-application.
###Creating an admin-user To create an admin-user, navigate to app/api/models/User.js. Change admin.defaultsTo:true. Start development server. Create a new user. Stop server and change back to admin.defaultsTo:false. Start development server again and create new users, log in as admin or log in as other users and play around! Please raise an issue or contact me if you have any questions!