Cloudkibo / CloudKibo

CloudKibo
0 stars 0 forks source link

Join meeting with LinkedIn ID #419

Open jekram opened 8 years ago

jekram commented 8 years ago

@sojharo

I would like to understand what it will take to implement this concept:

https://ln.cloudkibo.com/jekram or https://linkedin.cloudkibo.com/jekram

On the Godaddy, I know I can add an "A" record and can point it our server or another server.

So when the user enters this URL, he will be presented to authenticate himself. With two options:

  1. The owner of the account - he will use his Linkedin Userid / Password from Linkedin.
  2. Guest - Can Login with Linkedin/Google/Windows

Now the owner and the guest are joined in a meeting conference.

I want to do a quick prototype of this and test the concept, and we can refine it later.

We do not have Linkedin integration, but we have passport integration so it should not to too difficult.

Can you do a high-level plan on what step would be required to do this? Would like to review this tomorrow.

sojharo commented 8 years ago

We already have our conference code ready. We won't need much work here. If we intend to create new project for this then we would just move the conference code to that new project.

The main work would be on authentication, access rights on rooms and locking the rooms on server side.

We can simply use LinkedIn Authentication to get some information of the person and give him his room based on his user name. We might or might not allow the person to have more than one room name possessed by him.

On backend database, we would work on storing the room names with owners of the rooms. And information of users logged in through LinkedIn. Other information that we would keep on database for rooms is to know which room is locked and possessed by whom.

I am assuming we will not store chat. As person would invite multiple different people to his room on several times.

We would have two URLs : one would be like https://linkedin.cloudkibo.com/jekram this type of URL would denote the meeting URL. other would be like https://linkedin.cloudkibo.com this would be home page or page to do login using LinkedIn.

If we use current conference logic, current UI for conference and current backend code and do some modifications and insertions described above. Then I think it should not take ideally more than 3 days in case full working day is given to it.

Here are the steps:

  1. Create new github repository. As separating it would make it easier and faster
  2. Create new digitalocean droplet.
  3. Add SSL certificates to it. WebRTC needs it for screen sharing on chrome and firefox too
  4. redirect domain name to the IP address of this droplet
  5. fork cloudkibo current code, or just create new project using mean boilerplate
  6. Use conference logic code in it
  7. Use UI code in it
  8. Add LInkedin authentication on backend
  9. Make required tables in mongodb discussed above
  10. Make routing and signalling code on server, this would be little different as it would have access rights logic and room lock mechanisms
  11. Add logic to registration of users and then giving them their room names and urls (make pages for it)
  12. should show some settings page to user where he can do settings things (would be discussed later, not sure what settings should be there right now)
jekram commented 8 years ago

@sojharo

Thanks for the quick response.

Couple of questions:

  1. I do not understand the two URL

We would have two URLs : one would be like https://linkedin.cloudkibo.com/jekram this type of URL would denote the meeting URL. other would be like https://linkedin.cloudkibo.com this would be home page or page to do login using LinkedIn.

  1. Is the intent is to fork the code and later merge this back into CloudKibo or make this the main code
  2. We should design this so later we can use this with Twitter, FB or Google (Just keep this in mind we do not need to code for it now).
  3. The room name should be their handle like in my case it is: https://www.linkedin.com/in/jawaidekram or in your case it is https://pk.linkedin.com/in/sojharo-mangi-62b36018 (I do not knw why they attached numbers at the end - check if can edit that and just have your name)
jekram commented 8 years ago

@vickieme2

sojharo commented 8 years ago

I have started the work on it. I have worked on conference in this and added linkedin authentication modules of passport. I need to work on server side logic to handle logged in users and others. Others need to be logged in using other applications too i.e. google and others.

sojharo commented 8 years ago

I have completed the initial prototype work on it. I need to push it on github and live server now.

jekram commented 8 years ago

In a separate email I have sent you credentials for two servers.

sojharo commented 8 years ago

Also need one github repository. I have setup the turn server on one of virtual machine.

jekram commented 8 years ago

I already created github repo last week. Can you check again.

jekram commented 8 years ago

Do you see Cloudkibonew ? I created last week.

sojharo commented 8 years ago

Yes. I have found it.

On Tue, Mar 8, 2016 at 7:04 PM, Cloudkibo notifications@github.com wrote:

Do you see Cloudkibonew ? I created last week.

— Reply to this email directly or view it on GitHub https://github.com/Cloudkibo/CloudKibo/issues/419#issuecomment-193795897 .

Regards,

Sojharo

sojharo commented 8 years ago

I have pulled the code and worked more on it. I am having LinkedIn redirect issue again which I didn't have on localhost. I need to look into this error again.

jekram commented 8 years ago

It works from your local host but from the server?

sojharo commented 8 years ago

I have added client-side javascript sdk provided by LinkedIn to do authentication and continue meeting. Needs some more work on it.

sojharo commented 8 years ago

I had worked on it on Friday. Due to sudden Internet issue I could not update on it here. I was having issues with theme files while building the application. After running in production mode, user interface got broken. I had fixed it. Today, I will store user information in database and do room management.

jekram commented 8 years ago

Thanks for the update. What sub tasks are pending? What will be the ETA for completion ?

sojharo commented 8 years ago

I am currently working on it and hopefully it will take me just few more hours on this task.

jekram commented 8 years ago

Great. Thanks

sojharo commented 8 years ago

I have got stuck with the logic of clock in webmeeting. It is breaking the application. I need to sit with Zarmeen and understand how to integrate the clock logic of webmeeting. I had used the code of webmeeting in this new application. It has clock in it and it is giving the following error. I could not understand how to fix it or remove the clock altogether.

screenshot from 2016-03-28 03 45 54

jekram commented 8 years ago

I do not understand the issue of clock logic with linkedin authentication.

Can you send the screen shots of authentication and next screen and where it is failing. I am not understanding the flow

sojharo commented 8 years ago

When we open the page of webmeeting for conference. It gives the issue of clock. I had copied the required files of webmeeting from cloudkibo to this application. I couldn't understand which file is missing for clock and where it should be placed. Webmeeting code contains some logic of clock also. This happens when webmeeting page is opened.

sojharo commented 8 years ago

This is ready for the demo. We can check it on :

https://cloudkibotest.cloudapp.net

It doesn't have ssl certificates so it will give warning.

sojharo commented 8 years ago

LinkedIn doesn't give username so instead of using username as a room, we use combination of Last Name and First Name as the meeting room name.

sojharo commented 8 years ago

I have added the logout button and furthermore I have added the guest logins into it.

For guest login, I am using facebook and twitter and here is how login screen looks like now:

screenshot from 2016-03-29 17 31 23

After the user logs in as guest, we show him the following screen to enter the name of the room he was invited for.

screenshot from 2016-03-29 17 32 55

After this, he is taken to the meeting page.

I am having some authentication problems with Twitter login. However, Facebook is working fine. I could not understand the Twitter issue. I would look into it again.

The further work in this is when the invited person joins the meeting by entering the URL, the we check if that person is logged in or not. If he is not logged in, we should take him to the login as guest page and then he should be redirected back to the meeting URL. This will eliminate the need of having the page to enter meeting room name.

The changes are in production and can be demoed.

jekram commented 8 years ago

@sojharo

When I logged off and tried to re-login I go this error

image

sojharo commented 8 years ago

which provider did you try to log in? linkedin login?

jekram commented 8 years ago

Linkedin. I got this Linkedin page to authorize it and then I got this error.

jekram commented 8 years ago

I should have done a repro

  1. Clicked on the link
  2. Got into Web Meeting
  3. Logged off
  4. Clicked on the link again
  5. Got authentication page
  6. Use Host for LinkediN
  7. Saw Linked authentication page
  8. Then I got this error
jekram commented 8 years ago

@sojharo

Here is the use case:

I send an URL

  1. linkedin.cloudkibo.com/jawaidekram
  2. or linkedin.cloudkibo.com/jawaid@hotmail.com 3, or twitter.cloudkibo.com/jekram

There is no other URL sent to the guest.

Both the parties need to get into the same meeting without any additional URL

Let me know what can be done. Let's discuss this on slack.

sojharo commented 8 years ago

This is what we can do.

  1. When person with the meeting URL lands on the page. We check if he is logged in or not.
  2. Then, if he is logged in, we would allow him to join the meeting.
  3. Else he would be asked to log in using facebook or twitter.
  4. When he chooses any provideer, he would be taken to authentication page of that URL, our meeting URL will be lost at that time.
  5. After this facebook would redirect that person to default cloudkibo URL (often home pagee) which was given to Facebook when we were creating the app.
  6. This callback URL can't be changed through the code to replace with meeting URL as this was given manually when we created app on facebook using our developer account.
  7. What we can do is we create another cookie on guests computer and when he logs in as guest and reaches the home page. We check the cookie for meeting URL and then redirect the person to that URL.
  8. After this logic, we would remove the page which asks for meeting room name, or should we keep it?
sojharo commented 8 years ago

I am working on other tasks. Please let me know if I need to go ahead with the steps discussed above.

jekram commented 8 years ago

@sojharo

Show me in screenshots what the host workflow would be and what the guest workflow would be. I do not think we are on the same page.

If I click on this URL: Linkedin.cloudkibo.com/jawaidekram then what we want that both Host and Guest join a meeting room called something internally like linkedinjawaidekram.

If I click on this URL: Twitter.cloudkibo.com/jawaidekram then what we want that both Host and Guest join a meeting room called something internally like twittterjawaidekram

The meeting rooms would be unique as each user id in respective systems are unique. Jawaidekram in Linkedin is completely separate from Jawaidekram in Twitter.

Now we know the meeting room. Now the question is what authentication we use to allow the host and the guest.

We need to separate the authentication from room name. Can we not after authentication go to these fixed room?

Somebody implemented this with Twitter some time ago.

I want to understand two things:

1) What the user workflow would be? 2) What the effort would be?

Jawaid

jekram commented 8 years ago

Linkedin Use Case March 30 2016.pptx

sojharo commented 8 years ago

I could not completely understand the deck. Can we do a quick call.

sojharo commented 8 years ago

The use case for the host is simple.

  1. He logs in and is taken to his own URL. There he can wait for guest to join
  2. He can come back and we remember that he was logged in.
  3. He can log off.

The use case for the guest is simple if we only ask them username and doesn't ask him to do facebook, twitter or google authentication. In this case, the flow is as follows:

  1. The guest goes to the URL.
  2. His name is asked on dialogue box.
  3. and he is able to join the meeting.

With facebook (or other) authentication, flow is like this.

  1. Person goes to the URL.
  2. He is taken to the facebook page for authentication. At this point, the meeting URL is lost by browser memory.
  3. He is then taken back to the home page of website.

I am going to see if I can use the cookie to store the URL of meeting while the guest is on facebook page for authentication.

sojharo commented 8 years ago

I have fixed the linkedin login issue in this which was happening when we logged off and tried logging in again with linkedin.

sojharo commented 8 years ago

I have worked more on this issue and here is the user flow for guest now:

  1. When guest has the URL and he visits it, he is taken to the meeting page where he is asked to enter the name.

screenshot from 2016-03-31 17 36 56

  1. If he enters the name and presses Ok, he is taken to the meeting page where he can join the meeting
  2. If he presses the cancel, then we take him to the guest login page, we store the URL in cookie at this time.

screenshot from 2016-03-31 17 41 06

  1. Now, when he logs in using facebook, (or other guest login), he is then taken back to the same URL which was saved in the cookie and then cookie is removed.

In this way, we preserver the URL during provider authentication. We can do one more thing that we remove the dialog which asks for name from the guest and we just check if he is not logged in take him to the login page and ask the name there along with the options of authentication.

jekram commented 8 years ago

The issue with Guest is that we do not want to ask him again about the host . The guest may nit know as he may have been given the URL from the directly, on an embedded link or through bitly.

The key is that the guest has already provided this information once on the initial URL string.. Asking him again does nit make sense.

I am not understanding why the initial URL information is lost if we go through authentication? Do we open a new browser?

If we do not ask the gest to authenticate and only ask him for name than would it work?

sojharo commented 8 years ago

With current code that I pushed now, we do not ask guest about any information second time. when he first lands on the meeting page, we ask him username. If he doesn't provide the username we take him to the login page where he can do authentication.

The initial URL is not asked to him now in the current code. However, this URL gets lost when the user is taken to the facebook page for authentication as the memory of previous page is gone now.

this issue is also solved in current code push. We save the URL in cookie and then when user comes back to website after successful login from facebook, then we automatically take him to initial URL without asking him anything.

Whether we ask guest to authenticate or not, this is working now for both cases and user is not asked for information again.

jekram commented 8 years ago

I had not seen your last comment before I sent you my response. I was typing at the same time when you sent the last message.

I will think about it and let's discuss this online.

jekram commented 8 years ago

Got it. I think we now getting closer. I will try to use it later today to understand this better.

Thanks again. It will become more clear once I get it.

jekram commented 8 years ago

This is not working for me. When I log in as guest.

image

When I click on Twitter I get this screen:

image

I never got this screen

https://cloud.githubusercontent.com/assets/5811465/14175841/36eded02-f767-11e5-84df-9ff792edf08b.png

Please send screenshots from your side because I not getting the sam experaince.

BTW: I am using two laptops.

sojharo commented 8 years ago

The guest is supposed to use the meeting URL which was given to him. So, the guest must be coming to the system from URL like https://cloudkibotest.cloudapp.net/#/webmeeting/Ekram_Jawaid.

In this way, the system would be able to save the URL in cookie when user signs in using twitter as system already knows that the person had come to this meeting URL and is supposed to be sent back to that URL after authentication.

If guest comes to the system by landing on login page directly, system will never know who the host is for that guest. In this case, when person logs in using guest the system asks him the room name of host.

I think guest should always use the meeting URL to come to the system if he doesn't use the invitation URL (meeting URL given to him) then he is not guest anymore. Because how would system know the host of such guest.

If the guest login buttons on login page are confusing then we can do one thing: On login page we just show the login as linkedin button. Guest should always land on meeting url (which was given to him by host), at that place we show him the buttons to login or give the name.

jekram commented 8 years ago

@sojharo

You are 110% correct. I am driving right now and will test when I am home..

jekram commented 8 years ago

On hold - wait for my feedback